diff --git a/src/PamModel/PamModel.java b/src/PamModel/PamModel.java index 6fbb34d9..f0849981 100644 --- a/src/PamModel/PamModel.java +++ b/src/PamModel/PamModel.java @@ -63,7 +63,6 @@ import PamController.PamSettings; import PamDetection.RawDataUnit; import PamView.dialog.warn.WarnOnce; import PamguardMVC.PamDataBlock; -import alfa.ALFAControl; import analogarraysensor.ArraySensorControl; import backupmanager.BackupManager; import beamformer.continuous.BeamFormerControl; @@ -419,10 +418,11 @@ final public class PamModel implements PamModelInterface, PamSettings { mi.setModulesMenuGroup(utilitiesGroup); mi.setHidden(SMRUEnable.isEnable() == false); - mi = PamModuleInfo.registerControlledUnit(ALFAControl.class.getName(), "Master Controller"); - mi.setToolTipText("Big brother - will keep an eye on you and look after you"); - mi.setModulesMenuGroup(utilitiesGroup); - mi.setHidden(SMRUEnable.isEnable() == false); + // now releagate to a plugin module. +// mi = PamModuleInfo.registerControlledUnit(ALFAControl.class.getName(), "Master Controller"); +// mi.setToolTipText("Big brother - will keep an eye on you and look after you"); +// mi.setModulesMenuGroup(utilitiesGroup); +// mi.setHidden(SMRUEnable.isEnable() == false); mi = PamModuleInfo.registerControlledUnit(PrintScreenControl.class.getName(), "Print Screen"); mi.setToolTipText(PrintScreenControl.getToolTip()); diff --git a/src/alfa/ALFAControl.java b/src/alfa/ALFAControl.java deleted file mode 100644 index a012e068..00000000 --- a/src/alfa/ALFAControl.java +++ /dev/null @@ -1,338 +0,0 @@ -package alfa; - -import java.awt.Frame; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.io.Serializable; -import java.util.ArrayList; - -import javax.swing.JMenu; -import javax.swing.JMenuItem; -import Acquisition.AcquisitionControl; -import GPS.GPSControl; -import Map.MapController; -import NMEA.NMEAControl; -import PamController.PamControlledUnit; -import PamController.PamControlledUnitSettings; -import PamController.PamController; -import PamController.PamSettingManager; -import PamController.PamSettings; -import PamController.status.ModuleStatus; -import PamView.PamSidePanel; -import PamView.PamTabPanel; -import alfa.clickmonitor.ClickMonitorProcess; -import alfa.clickmonitor.eventaggregator.ClickEventAggregate; -import alfa.comms.MessageProcess; -import alfa.effortmonitor.AngleHistogram; -import alfa.effortmonitor.EffortMonitor; -import alfa.logger.LoggerMonitor; -import alfa.status.StatusMonitor; -import alfa.status.StatusObserver; -import alfa.swinggui.ALFADialog; -import alfa.swinggui.ALFAGUITransformer; -import alfa.swinggui.ALFASidePanel; -import alfa.swinggui.BBSwingTabPanel; -import alfa.utils.MiraScreen; -import binaryFileStorage.BinaryStore; -import clickDetector.ClickControl; -import clickTrainDetector.ClickTrainControl; -import detectiongrouplocaliser.DetectionGroupDataUnit; -import generalDatabase.DBControlUnit; -import rockBlock.RockBlockControl; - -/** - * ALFA module shows status of various modules in PAMGuard for real time operation detecting - * sperm whales for the Alaska Fishermen's Association. - * - * @author Doug Gillespie - * - */ -public class ALFAControl extends PamControlledUnit implements PamSettings { - - private static String unitType = "ALFA Sperm Tracker"; - - private StatusMonitor statusMonitor; - - private BBSwingTabPanel bbSwingTabPanel; - - private boolean initialisationComplete; - - private ClickMonitorProcess clickMonitorProcess; - - private EffortMonitor effortMonitor; - - private LoggerMonitor loggerMonitor; - - private MessageProcess messageProcess; - - private ALFAParameters alfaParameters = new ALFAParameters(); - - private ALFASidePanel alfaSidePanel; - - private ALFAGUITransformer alfaGuiTransformer; - - public ALFAControl(String unitName) { - super(unitType, unitName); - ArrayList controlledModulesList = new ArrayList<>(); - controlledModulesList.add(new ControlledModuleInfo(DBControlUnit.class)); - controlledModulesList.add(new ControlledModuleInfo(BinaryStore.class)); - controlledModulesList.add(new ControlledModuleInfo(NMEAControl.class)); - controlledModulesList.add(new ControlledModuleInfo(GPSControl.class)); - controlledModulesList.add(new ControlledModuleInfo(MapController.class)); - controlledModulesList.add(new ControlledModuleInfo(AcquisitionControl.class)); - controlledModulesList.add(new ControlledModuleInfo(ClickControl.class)); - controlledModulesList.add(new ControlledModuleInfo(ClickTrainControl.class)); - // controlledModulesList.add(new ControlledModuleInfo(FormsControl.class)); - controlledModulesList.add(new ControlledModuleInfo(RockBlockControl.class, "Sat Comms")); - controlledModulesList.add(new ControlledModuleInfo(ALFAControl.class)); - statusMonitor = new StatusMonitor(false, controlledModulesList); - - statusMonitor.addObserver(new StatusObserver() { - - @Override - public void newStatus() { - statusUpdated(); - } - - @Override - public void newModuleList() { - } - }); - - clickMonitorProcess = new ClickMonitorProcess(this); - addPamProcess(clickMonitorProcess); - effortMonitor = new EffortMonitor(this); - addPamProcess(effortMonitor); - messageProcess = new MessageProcess(this); - addPamProcess(messageProcess); - addPamProcess(loggerMonitor = new LoggerMonitor(this)); - - PamSettingManager.getInstance().registerSettings(this); - - if (alfaParameters.autoScreenMirror) { - MiraScreen.startMirror(); - } - - alfaSidePanel = new ALFASidePanel(this); - - if (!this.isViewer()) { - //GUI alterations for real time mode. - alfaGuiTransformer = new ALFAGUITransformer(this); - } - } - - protected void statusUpdated() { - if (alfaSidePanel != null) { - alfaSidePanel.statusUpdate(); - } - } - - /* (non-Javadoc) - * @see PamController.PamControlledUnit#getTabPanel() - */ - @Override - public PamTabPanel getTabPanel() { - if (bbSwingTabPanel == null) { - bbSwingTabPanel = new BBSwingTabPanel(this); - } - return bbSwingTabPanel; - } - - public MapController findMapController() { - return (MapController) PamController.getInstance().findControlledUnit(MapController.unitType); - } - - /** - * @return the statusMonitor - */ - public StatusMonitor getStatusMonitor() { - return statusMonitor; - } - - /* (non-Javadoc) - * @see PamController.PamControlledUnit#notifyModelChanged(int) - */ - @Override - public void notifyModelChanged(int changeType) { - super.notifyModelChanged(changeType); - if (changeType == PamController.INITIALIZATION_COMPLETE) { - // probably need to do something ? - initialisationComplete = true; - bbSwingTabPanel.updateUnits(); - findClickTrainDetector(); - } - if (initialisationComplete) { - switch (changeType) { - case PamController.ADD_CONTROLLEDUNIT: - case PamController.REMOVE_CONTROLLEDUNIT: - bbSwingTabPanel.updateUnits(); - findClickTrainDetector(); - } - } - if (alfaGuiTransformer!=null) this.alfaGuiTransformer.notifyModelChanged(changeType); - //this.alfaSidePanel.notifyModelChanged(changeType); - } - - /** - * Called when the model changes. - */ - private void findClickTrainDetector() { - ClickTrainControl clickControl = (ClickTrainControl) PamController.getInstance().findControlledUnit(ClickTrainControl.class, null); - clickMonitorProcess.setClickTrainDetector(clickControl); - } - - /** - * @return the clickMonitorProcess - */ - public ClickMonitorProcess getClickMonitorProcess() { - return clickMonitorProcess; - } - - /** - * @return the effortMonitor - */ - public EffortMonitor getEffortMonitor() { - return effortMonitor; - } - - /** - * @return the messageProcess - */ - public MessageProcess getMessageProcess() { - return messageProcess; - } - - /** - * Generic updated information from the click monitor and aggregator which can - * be used to update the effort data. - * @param aggregateEvent - * @param detectionGroupDataUnit - */ - public void updateClickInformation(ClickEventAggregate aggregateEvent, - DetectionGroupDataUnit detectionGroupDataUnit) { - effortMonitor.updateClickInformation(aggregateEvent, detectionGroupDataUnit); - } - - @Override - public JMenuItem createDetectionMenu(Frame parentFrame) { - JMenu menu = new JMenu(getUnitName() + " options ..."); - // menu.add(loggerMonitor.getMenuItem(parentFrame)); - JMenuItem menuItem = new JMenuItem(getUnitName() + " Options ..."); - menuItem.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - showAlfaDialog(parentFrame); - } - }); - menu.add(menuItem); - return menu; - } - - - public void showAlfaDialog() { - showAlfaDialog(getGuiFrame()); - } - - public void showAlfaDialog(Frame parentFrame) { - ALFAParameters newParams = ALFADialog.showDialog(parentFrame, this); - if (newParams != null) { - setAlfaParameters(newParams); - } - } - - /** - * @return the alfaParameters - */ - public ALFAParameters getAlfaParameters() { - return alfaParameters; - } - - /** - * @param alfaParameters the alfaParameters to set - */ - public void setAlfaParameters(ALFAParameters alfaParameters) { - this.alfaParameters = alfaParameters; - if (alfaParameters.autoScreenMirror) { - MiraScreen.startMirror(); - } - this.setupControlledUnit(); - } - - /** - * @return the loggerMonitor - */ - public LoggerMonitor getLoggerMonitor() { - return loggerMonitor; - } - - @Override - public Serializable getSettingsReference() { - return alfaParameters; - } - - @Override - public long getSettingsVersion() { - return ALFAParameters.serialVersionUID; - } - - @Override - public boolean restoreSettings(PamControlledUnitSettings pamControlledUnitSettings) { - alfaParameters = ((ALFAParameters) pamControlledUnitSettings.getSettings()).clone(); - return alfaParameters != null; - } - - @Override - public ModuleStatus getModuleStatus() { - return statusMonitor.getSummaryStatus(); - } - - @Override - public PamSidePanel getSidePanel() { - return alfaSidePanel; - } - - /** - * Get a status object (for display in the side panel) which - * summarises the number of whales recently detected. - * @return whale summary. - */ - public ModuleStatus getWhaleStatus() { - return effortMonitor.getWhaleStatus(); - } - - public AngleHistogram getStatusAngleHistogram() { - return effortMonitor.getAveragedAngleHistogram(); - } - - /** - * called just before data acquisition starts. Note that - * PamObservers get a call to setSampleRate anyway so this mainly needs - * to be used for display elements that may need their scales - * adjusted before startup. - * - */ - @Override - public void pamToStart() { -// SwingUtilities.invokeLater(new Runnable() { -// @Override -// public void run() { - alfaSidePanel.notifyModelChanged(PamController.PAM_RUNNING); -// } -// }); - } - - /** - * Called for all controlled units after Pam acquisition has stopped - * - */ - @Override - public void pamHasStopped() { -// SwingUtilities.invokeLater(new Runnable() { -// @Override -// public void run() { - alfaSidePanel.notifyModelChanged(PamController.PAM_IDLE); -// } -// }); - } - -} diff --git a/src/alfa/ALFAParameters.java b/src/alfa/ALFAParameters.java deleted file mode 100644 index 89fc4231..00000000 --- a/src/alfa/ALFAParameters.java +++ /dev/null @@ -1,87 +0,0 @@ -package alfa; - -import java.io.Serializable; - -import PamModel.parametermanager.ManagedParameters; -import PamModel.parametermanager.PamParameterSet; -import loggerForms.FormDescription; - -public class ALFAParameters implements Serializable, Cloneable, ManagedParameters { - - public static final long serialVersionUID = 1L; - - /** - * interval for sending effort data when no - * whales are present in SECONDS - */ - public int effortMsgIntervalNoWhales = 3600; - - /** - * interval for sending effort data when - * whales are present in SECONDS - */ -// public int effortMsgIntervalWhales = 900; - public int histosPerReportInterval = 4; - - /** - * The histogram bin interval for a 0-180 degree bearing. - */ - private int binsPerhistogram = 5; - - /** - * - * True to use click train median angle for angle histogram. - * False to use clicks in angle histogram. - */ - public boolean useClkTrains = false; - - /** - * Reload old reports at startup. This is important if - * the system crashes to reload old data and continue histogram. - */ - public boolean reloadOldReports = true; - - /** - * Automatically launch the screen mirror service - */ - public boolean autoScreenMirror = true; - - public int loggerFormFormat = FormDescription.LOGGER_FORMS_JSON; - - public boolean followOffline = false; - - @Override - public ALFAParameters clone() { - try { - return (ALFAParameters) super.clone(); - } catch (CloneNotSupportedException e) { - e.printStackTrace(); - return null; - } - } - - /** - * @return the binsPerhistogram - */ - public int getBinsPerhistogram() { - if (binsPerhistogram <= 0) { - binsPerhistogram = 4; - } - return binsPerhistogram; - } - - /** - * @param binsPerhistogram the binsPerhistogram to set - */ - public void setBinsPerhistogram(int binsPerhistogram) { - this.binsPerhistogram = binsPerhistogram; - } - - - @Override - public PamParameterSet getParameterSet() { - PamParameterSet ps = PamParameterSet.autoGenerate(this); - return ps; - } - -} diff --git a/src/alfa/ControlledModuleInfo.java b/src/alfa/ControlledModuleInfo.java deleted file mode 100644 index 067d9b82..00000000 --- a/src/alfa/ControlledModuleInfo.java +++ /dev/null @@ -1,93 +0,0 @@ -package alfa; - -import PamModel.PamModuleInfo; - -/** - * Information about a module that needs to be monitored for status.
- * Wraps around and extends PamModuleInfo to give extra functionality for - * advanced status monitoring. - * @author dg50 - * - */ -public class ControlledModuleInfo { - - - /** - * Standard PAMGuard module info for the class, tells - * PAMGuard how to construct it, a default name, etc. - */ - private PamModuleInfo pamModuleInfo; - - /** - * A fixed module name. Can be used to force a particular name rather - * than just using the default value. - */ - private String fixedModuleName; - - public ControlledModuleInfo(PamModuleInfo pamModuleInfo) { - this.pamModuleInfo = pamModuleInfo; - } - - /** - * @param pamModuleInfo - * @param fixedModuleName - */ - public ControlledModuleInfo(PamModuleInfo pamModuleInfo, String fixedModuleName) { - super(); - this.pamModuleInfo = pamModuleInfo; - this.fixedModuleName = fixedModuleName; - } - - /** - * @param className - * @param fixedModuleName - */ - public ControlledModuleInfo(Class className, String fixedModuleName) { - this(PamModuleInfo.findModuleInfo(className.getName()), fixedModuleName); - } - - /** - * @param className - */ - public ControlledModuleInfo(Class className) { - this(PamModuleInfo.findModuleInfo(className.getName())); - } - - /** - * @return the pamModuleInfo - */ - public PamModuleInfo getPamModuleInfo() { - return pamModuleInfo; - } - - /** - * @param pamModuleInfo the pamModuleInfo to set - */ - public void setPamModuleInfo(PamModuleInfo pamModuleInfo) { - this.pamModuleInfo = pamModuleInfo; - } - - /** - * @return the fixedModuleName - */ - public String getFixedModuleName() { - return fixedModuleName; - } - - /** - * @param fixedModuleName the fixedModuleName to set - */ - public void setFixedModuleName(String fixedModuleName) { - this.fixedModuleName = fixedModuleName; - } - - public String getDefaultName() { - if (fixedModuleName != null) { - return fixedModuleName; - } - else { - return pamModuleInfo.getDefaultName(); - } - } - -} diff --git a/src/alfa/clickmonitor/ClickMonitorProcess.java b/src/alfa/clickmonitor/ClickMonitorProcess.java deleted file mode 100644 index 9db3e6ba..00000000 --- a/src/alfa/clickmonitor/ClickMonitorProcess.java +++ /dev/null @@ -1,148 +0,0 @@ -package alfa.clickmonitor; - -import javax.swing.JComponent; - -import PamController.PamControlledUnit; -import PamguardMVC.PamDataUnit; -import PamguardMVC.PamObservable; -import PamguardMVC.PamProcess; -import alfa.ALFAControl; -import alfa.clickmonitor.eventaggregator.ClickAggregateDataBlock; -import alfa.clickmonitor.eventaggregator.ClickEventAggregate; -import alfa.clickmonitor.swing.ClickAggregatOverlayGraphics; -import alfa.clickmonitor.swing.ClickMonitorComponent; -import clickDetector.ClickControl; -import clickDetector.offlineFuncs.OfflineEventDataUnit; -import clickTrainDetector.ClickTrainControl; -import detectiongrouplocaliser.DetectionGroupDataUnit; - -/** - * PAM Process which will automatically subscribe to the click train detector output and prepare status messages for display and transmission - * @author dg50 - * - */ -public class ClickMonitorProcess extends PamProcess { - - private ALFAControl bigBrotherControl; -// private ClickControl clickControl; - private ClickTrainControl clickTrainControl; - - private SimpleClickEventAggregator clickEventAggregator; - - private ClickAggregateDataBlock clickAggregateDataBlock; - private ClickMonitorComponent clickMonitorComponent; - - public ClickMonitorProcess(ALFAControl bigBrotherControl) { - super(bigBrotherControl, null); - this.bigBrotherControl = bigBrotherControl; - clickEventAggregator = new SimpleClickEventAggregator(1000e6); - clickAggregateDataBlock = new ClickAggregateDataBlock("Sperm Whale Groups", this, 0); - clickAggregateDataBlock.setNaturalLifetime(3600); - clickAggregateDataBlock.setOverlayDraw(new ClickAggregatOverlayGraphics(clickAggregateDataBlock)); - addOutputDataBlock(clickAggregateDataBlock); - } - - @Override - public void pamStart() { - clickEventAggregator.reset(); - } - - @Override - public void pamStop() { - } - - public void setClickTrainDetector(ClickTrainControl clickTrainControl) { - if (this.clickTrainControl != clickTrainControl) { - this.clickTrainControl = clickTrainControl; - if (clickTrainControl != null) { - setParentDataBlock(clickTrainControl.getClssfdClickTrainDataBlock()); - } - } - } - - /* (non-Javadoc) - * @see PamguardMVC.PamProcess#setupProcess() - */ - @Override - public void setupProcess() { - super.setupProcess(); - } - - /* (non-Javadoc) - * @see PamguardMVC.PamProcess#newData(PamguardMVC.PamObservable, PamguardMVC.PamDataUnit) - */ - @Override - public void newData(PamObservable o, PamDataUnit arg) { - if (arg instanceof DetectionGroupDataUnit) { - newClickEvent((DetectionGroupDataUnit) arg); - } - } - - /* (non-Javadoc) - * @see PamguardMVC.PamProcess#updateData(PamguardMVC.PamObservable, PamguardMVC.PamDataUnit) - */ - @Override - public void updateData(PamObservable o, PamDataUnit arg) { - if (arg instanceof DetectionGroupDataUnit) { - newClickEvent((DetectionGroupDataUnit) arg); - } - } - - private void newClickEvent(DetectionGroupDataUnit detectionGroupDataUnit) { - aggregateEvent(detectionGroupDataUnit); - } - - - /** - * Bring click events together into larger aggregations to avoid transmitting to0 much stuff - * @param detectionGroupDataUnit. - */ - private void aggregateEvent(DetectionGroupDataUnit detectionGroupDataUnit) { - ClickEventAggregate aggregateEvent = clickEventAggregator.aggregateData(detectionGroupDataUnit); - if (aggregateEvent == null) { - bigBrotherControl.updateClickInformation(null, detectionGroupDataUnit); - return; - } - if (aggregateEvent.getParentDataBlock() == null) { - clickAggregateDataBlock.addPamData(aggregateEvent); - } - else { - clickAggregateDataBlock.updatePamData(aggregateEvent, aggregateEvent.getLastUpdateTime()); - } - bigBrotherControl.updateClickInformation(aggregateEvent, detectionGroupDataUnit); - } - - @Override - public long getRequiredDataHistory(PamObservable o, Object arg) { - return 1000*3600; - } - - public JComponent getSwingComponent() { - if (clickMonitorComponent == null) { - clickMonitorComponent = new ClickMonitorComponent(this); - } - return clickMonitorComponent.getComponent(); - } - - /** - * @return the clickControl - */ - public ClickTrainControl getClickTrainControl() { - return clickTrainControl; - } - - /** - * @return the clickEventAggregator - */ - public SimpleClickEventAggregator getClickEventAggregator() { - return clickEventAggregator; - } - - /** - * @return the clickAggregateDataBlock - */ - public ClickAggregateDataBlock getClickAggregateDataBlock() { - return clickAggregateDataBlock; - } - -} diff --git a/src/alfa/clickmonitor/LatLongHull.java b/src/alfa/clickmonitor/LatLongHull.java deleted file mode 100644 index 86b72013..00000000 --- a/src/alfa/clickmonitor/LatLongHull.java +++ /dev/null @@ -1,155 +0,0 @@ -package alfa.clickmonitor; -/* - * Adapted from the following by Doug Gillespie. November 2018 - * - * Convex hull algorithm - Library (Java) - * - * Copyright (c) 2017 Project Nayuki - * https://www.nayuki.io/page/convex-hull-algorithm - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program (see COPYING.txt and COPYING.LESSER.txt). - * If not, see . - */ -import java.util.ArrayList; -import java.util.Collections; -import java.util.Comparator; -import java.util.List; -import java.util.Objects; - -import PamUtils.LatLong; - - -public final class LatLongHull { - - private static LatLongCamparator latLongCamparator = new LatLongCamparator(); - - // Returns a new list of points representing the convex hull of - // the given set of points. The convex hull excludes collinear points. - // This algorithm runs in O(n log n) time. - public static List makeHull(List points) { - List newPoints = new ArrayList<>(points); - Collections.sort(newPoints, latLongCamparator); - return makeHullPresorted(newPoints); - } - - - // Returns the convex hull, assuming that each points[i] <= points[i + 1]. Runs in O(n) time. - public static List makeHullPresorted(List points) { - if (points.size() <= 1) - return new ArrayList<>(points); - - // Andrew's monotone chain algorithm. Positive y coordinates correspond to "up" - // as per the mathematical convention, instead of "down" as per the computer - // graphics convention. This doesn't affect the correctness of the result. - - List upperHull = new ArrayList<>(); - for (LatLong p : points) { - while (upperHull.size() >= 2) { - LatLong q = upperHull.get(upperHull.size() - 1); - LatLong r = upperHull.get(upperHull.size() - 2); - if ((q.getLongitude() - r.getLongitude()) * (p.getLatitude() - r.getLatitude()) >= - (q.getLatitude() - r.getLatitude()) * (p.getLongitude() - r.getLongitude())) - upperHull.remove(upperHull.size() - 1); - else - break; - } - upperHull.add(p); - } - upperHull.remove(upperHull.size() - 1); - - List lowerHull = new ArrayList<>(); - for (int i = points.size() - 1; i >= 0; i--) { - LatLong p = points.get(i); - while (lowerHull.size() >= 2) { - LatLong q = lowerHull.get(lowerHull.size() - 1); - LatLong r = lowerHull.get(lowerHull.size() - 2); - if ((q.getLongitude() - r.getLongitude()) * (p.getLatitude() - r.getLatitude()) >= - (q.getLatitude() - r.getLatitude()) * (p.getLongitude() - r.getLongitude())) - lowerHull.remove(lowerHull.size() - 1); - else - break; - } - lowerHull.add(p); - } - lowerHull.remove(lowerHull.size() - 1); - - if (!(upperHull.size() == 1 && upperHull.equals(lowerHull))) - upperHull.addAll(lowerHull); - return upperHull; - } - -} - -class LatLongCamparator implements Comparator { - - @Override - public int compare(LatLong ll1, LatLong ll2) { - /* - * - if (x != other.x) - return Double.compare(x, other.x); - else - return Double.compare(y, other.y); - */ - if (ll1.getLongitude() != ll2.getLongitude()) { - return Double.compare(ll1.getLongitude(), ll2.getLongitude()); - } - else { - return Double.compare(ll1.getLatitude(), ll2.getLatitude()); - } - } - -} - -final class LatLongPoint implements Comparable { - - public final double x; - public final double y; - - - public LatLongPoint(double x, double y) { - this.x = x; - this.y = y; - } - - - public String toString() { - return String.format("Point(%g, %g)", x, y); - } - - - public boolean equals(Object obj) { - if (!(obj instanceof LatLongPoint)) - return false; - else { - LatLongPoint other = (LatLongPoint)obj; - return x == other.x && y == other.y; - } - } - - - public int hashCode() { - return Objects.hash(x, y); - } - - - public int compareTo(LatLongPoint other) { - if (x != other.x) - return Double.compare(x, other.x); - else - return Double.compare(y, other.y); - } - -} - diff --git a/src/alfa/clickmonitor/SimpleClickEventAggregator.java b/src/alfa/clickmonitor/SimpleClickEventAggregator.java deleted file mode 100644 index c4fbeb74..00000000 --- a/src/alfa/clickmonitor/SimpleClickEventAggregator.java +++ /dev/null @@ -1,154 +0,0 @@ -package alfa.clickmonitor; - -import java.util.Iterator; -import java.util.LinkedList; -import java.util.List; - -import PamDetection.AbstractLocalisation; -import PamDetection.LocContents; -import PamUtils.LatLong; -import alfa.clickmonitor.eventaggregator.ClickEventAggregate; -import alfa.clickmonitor.eventaggregator.EventAggregator; -import clickDetector.offlineFuncs.OfflineEventDataUnit; -import detectiongrouplocaliser.DetectionGroupDataUnit; - -public class SimpleClickEventAggregator implements EventAggregator { - - private List growingList = new LinkedList<>(); - - private double minSeparationMetres; - - /** - * @param minSeparationMetres - */ - public SimpleClickEventAggregator(double minSeparationMetres) { - super(); - this.minSeparationMetres = minSeparationMetres; - } - - @Override - public ClickEventAggregate aggregateData(DetectionGroupDataUnit detectionGroupDataUnit) { - if (wantDataUnit(detectionGroupDataUnit) == false) { - return null; - } - ClickEventAggregate currentAggregate = findInCurrent(detectionGroupDataUnit); - if (currentAggregate != null) { - /** - * Data is already part of an aggregate event, so no need to do anything at all. - */ - } - else { - /* - * Try to match into existing developing aggregations. - */ - currentAggregate = matchToAggregate(detectionGroupDataUnit); - if (currentAggregate != null) { - currentAggregate.addSubDetection(detectionGroupDataUnit); - } - } - if (currentAggregate == null) { - currentAggregate = new ClickEventAggregate(detectionGroupDataUnit); - growingList.add(currentAggregate); - } - - currentAggregate.setLastUpdateTime(detectionGroupDataUnit.getLastUpdateTime()); - - if (wantAggregate(currentAggregate)) { - return currentAggregate; - } - return null; - } - - private boolean wantAggregate(ClickEventAggregate currentAggregate) { - return true; - } - - private ClickEventAggregate matchToAggregate(DetectionGroupDataUnit detectionGroupDataUnit) { - ClickEventAggregate bestAggregate = null; - double bestRange = Double.MAX_VALUE; - Iterator it = growingList.iterator(); - while (it.hasNext()) { - ClickEventAggregate agg = it.next(); - Double d = minRangeToAggregate(detectionGroupDataUnit, agg); - if (d == null) { - continue; - } - if (d < bestRange) { - bestRange = d; - bestAggregate = agg; - } - } - if (bestRange < minSeparationMetres) { - return bestAggregate; - } - else { - return null; - } - } - - private Double minRangeToAggregate(DetectionGroupDataUnit detectionGroupDataUnit, ClickEventAggregate agg) { - AbstractLocalisation dLoc = detectionGroupDataUnit.getLocalisation(); - if (dLoc == null || dLoc.hasLocContent(LocContents.HAS_LATLONG) == false) { - return null; - } - int nLL = dLoc.getAmbiguityCount(); - double closestOther = Double.MAX_VALUE; - int nSub = agg.getSubDetectionsCount(); - for (int i = 0; i < nSub; i++) { - AbstractLocalisation aggLoc = agg.getSubDetection(i).getLocalisation(); - int nALL = aggLoc.getAmbiguityCount(); - for (int is = 0; is < Math.min(nLL,nALL); is++) { - LatLong uLL = dLoc.getLatLong(is); - LatLong aLL = aggLoc.getLatLong(is); - if (aLL == null || uLL == null) { - continue; - } - double d = aLL.distanceToMetres(uLL); - closestOther = Math.min(closestOther, d); - } - } - return closestOther; - } - - /** - * Do we want this data unit ? - * Only if it's got a lat long already. - * @param detectionGroupDataUnit - * @return true if we want to use this in the aggregator. - */ - private boolean wantDataUnit(DetectionGroupDataUnit detectionGroupDataUnit) { - AbstractLocalisation localisation = detectionGroupDataUnit.getLocalisation(); - if (localisation == null) { - return false; - } - if (localisation.getLocContents().hasLocContent(LocContents.HAS_LATLONG)) { - return true; - } - return false; - } - - /** - * Find the current data unit in any of the currently growing aggregate lists. - * @param dataUnit - * @return - */ - private ClickEventAggregate findInCurrent(DetectionGroupDataUnit dataUnit) { - synchronized (growingList) { - Iterator it = growingList.iterator(); - while (it.hasNext()) { - ClickEventAggregate agg = it.next(); - int foundUnit = agg.findSubdetectionInfo(dataUnit); - if (foundUnit >= 0) { - return agg; - } - } - } - return null; - } - - @Override - public void reset() { - growingList.clear(); - } - -} diff --git a/src/alfa/clickmonitor/eventaggregator/AggregateDataUnit.java b/src/alfa/clickmonitor/eventaggregator/AggregateDataUnit.java deleted file mode 100644 index c2dccaf9..00000000 --- a/src/alfa/clickmonitor/eventaggregator/AggregateDataUnit.java +++ /dev/null @@ -1,25 +0,0 @@ -package alfa.clickmonitor.eventaggregator; - -import PamguardMVC.DataUnitBaseData; -import PamguardMVC.PamDataUnit; -import PamguardMVC.superdet.SuperDetection;; - -public abstract class AggregateDataUnit extends SuperDetection { - - public AggregateDataUnit(DataUnitBaseData basicData) { - super(basicData); - } - - - /** - * @param timeMilliseconds - */ - public AggregateDataUnit(long timeMilliseconds, T firstSubDetection) { - super(timeMilliseconds); - if (firstSubDetection != null) { - setChannelBitmap(firstSubDetection.getChannelBitmap()); - addSubDetection(firstSubDetection); - } - } - -} diff --git a/src/alfa/clickmonitor/eventaggregator/AggregateLocalisation.java b/src/alfa/clickmonitor/eventaggregator/AggregateLocalisation.java deleted file mode 100644 index cb6b9028..00000000 --- a/src/alfa/clickmonitor/eventaggregator/AggregateLocalisation.java +++ /dev/null @@ -1,108 +0,0 @@ -package alfa.clickmonitor.eventaggregator; - -import java.util.ArrayList; -import java.util.List; - -import org.apache.commons.math3.geometry.euclidean.twod.Vector2D; -import org.apache.commons.math3.geometry.euclidean.twod.hull.ConvexHull2D; - -import com.sun.javafx.geom.Area; -import com.sun.javafx.geom.PathIterator; -import com.sun.javafx.geom.Rectangle; -import com.sun.javafx.geom.Shape; - -import PamDetection.AbstractLocalisation; -import PamDetection.LocContents; -import PamUtils.LatLong; -import PamguardMVC.PamDataUnit; -import alfa.clickmonitor.LatLongHull; -import javafx.geometry.Rectangle2D; -import pamMaths.PamVector; - -public class AggregateLocalisation extends AbstractLocalisation { - - private AggLatLong[] sideLatLongs = new AggLatLong[2]; - - public AggregateLocalisation(PamDataUnit pamDataUnit) { - super(pamDataUnit, LocContents.HAS_LATLONG, pamDataUnit.getChannelBitmap()); - addLocalisation(pamDataUnit.getLocalisation()); - } - - public void addLocalisation(AbstractLocalisation localisation) { - if (localisation == null) { - return; - } - int nLL = localisation.getAmbiguityCount(); - for (int i = 0; i < nLL; i++) { - LatLong latLong = localisation.getLatLong(i); - if (latLong != null) { - if (sideLatLongs[i] == null) { - sideLatLongs[i] = new AggLatLong(latLong); - } - else { - sideLatLongs[i].add(latLong); - } - } - } - - } - - public class AggLatLong { - - private ArrayList latLongList = new ArrayList<>(); - - public AggLatLong(LatLong latLong) { - latLongList.add(latLong); - } - - public void add(LatLong latLong) { - latLongList.add(latLong); - } - - public Rectangle2D getOuterRectangle() { - if (latLongList.size() == 0) { - return null; - } - double minX, maxX, minY, maxY; - minX = maxX = latLongList.get(0).getLongitude(); - minY = maxY = latLongList.get(0).getLatitude(); - for (int i = 0; i < latLongList.size(); i++) { - LatLong ll = latLongList.get(i); - minX = Math.min(minX, ll.getLongitude()); - maxX = Math.max(maxX, ll.getLongitude()); - minY = Math.min(minY, ll.getLatitude()); - maxY = Math.max(maxY, ll.getLatitude()); - } - return new Rectangle2D(minX, minY, maxX-minX, maxY-minY); - } - -// public ConvexHull2D getOuterHull() { -// if (latLongList.size() == 0) { -// return null; -// } -// Vector2D[] v2ds = new Vector2D[latLongList.size()]; -// for (int i = 0; i < latLongList.size(); i++) { -// LatLong ll = latLongList.get(i); -// v2ds[i] = new Vector2D(ll.getLongitude(), ll.getLatitude()); -// } -// try { -// ConvexHull2D ch2d = new ConvexHull2D(v2ds, 0); -// return ch2d; -// } -// catch (Exception e) { -// return null; -// } -// } - public List getOuterHull() { - return LatLongHull.makeHull(latLongList); - } - } - - /** - * @return the sideLatLongs - */ - public AggLatLong[] getSideLatLongs() { - return sideLatLongs; - } - -} diff --git a/src/alfa/clickmonitor/eventaggregator/ClickAggregateDataBlock.java b/src/alfa/clickmonitor/eventaggregator/ClickAggregateDataBlock.java deleted file mode 100644 index 6cae16a4..00000000 --- a/src/alfa/clickmonitor/eventaggregator/ClickAggregateDataBlock.java +++ /dev/null @@ -1,14 +0,0 @@ -package alfa.clickmonitor.eventaggregator; - -import PamguardMVC.PamDataBlock; -import PamguardMVC.PamProcess; -import clickDetector.offlineFuncs.OfflineClickLogging; -import clickDetector.offlineFuncs.OfflineEventDataUnit; - -public class ClickAggregateDataBlock extends PamDataBlock { - - public ClickAggregateDataBlock(String dataName, PamProcess parentProcess, int channelMap) { - super(ClickEventAggregate.class, dataName, parentProcess, channelMap); - } - -} diff --git a/src/alfa/clickmonitor/eventaggregator/ClickEventAggregate.java b/src/alfa/clickmonitor/eventaggregator/ClickEventAggregate.java deleted file mode 100644 index 1faf2437..00000000 --- a/src/alfa/clickmonitor/eventaggregator/ClickEventAggregate.java +++ /dev/null @@ -1,20 +0,0 @@ -package alfa.clickmonitor.eventaggregator; - -import PamguardMVC.DataUnitBaseData; -import detectiongrouplocaliser.DetectionGroupDataUnit; - -public class ClickEventAggregate extends AggregateDataUnit { - - public ClickEventAggregate(DataUnitBaseData basicData) { - super(basicData); - } - - public ClickEventAggregate(long timeMilliseconds, DetectionGroupDataUnit firstSubDetection) { - super(timeMilliseconds, firstSubDetection); - } - - public ClickEventAggregate(DetectionGroupDataUnit dataUnit) { - this(dataUnit.getTimeMilliseconds(), dataUnit); - } - -} diff --git a/src/alfa/clickmonitor/eventaggregator/EventAggregator.java b/src/alfa/clickmonitor/eventaggregator/EventAggregator.java deleted file mode 100644 index 39db7499..00000000 --- a/src/alfa/clickmonitor/eventaggregator/EventAggregator.java +++ /dev/null @@ -1,14 +0,0 @@ -package alfa.clickmonitor.eventaggregator; - -import PamguardMVC.PamDataUnit; - -public interface EventAggregator> { - - public U aggregateData(T dataUnit); - - /** - * Call when PAMguard starts. - */ - public void reset(); - -} diff --git a/src/alfa/clickmonitor/swing/ClickAggregatOverlayGraphics.java b/src/alfa/clickmonitor/swing/ClickAggregatOverlayGraphics.java deleted file mode 100644 index ce865319..00000000 --- a/src/alfa/clickmonitor/swing/ClickAggregatOverlayGraphics.java +++ /dev/null @@ -1,95 +0,0 @@ -package alfa.clickmonitor.swing; - -import java.awt.Color; -import java.awt.Graphics; -import java.awt.Graphics2D; -import java.awt.Rectangle; -import java.util.List; - -import org.apache.commons.math3.geometry.euclidean.twod.Vector2D; -import org.apache.commons.math3.geometry.euclidean.twod.hull.ConvexHull2D; - -import PamUtils.Coordinate3d; -import PamUtils.LatLong; -import PamView.GeneralProjector; -import PamView.PamDetectionOverlayGraphics; -import PamView.PamSymbol; -import PamView.PamSymbolType; -import PamView.GeneralProjector.ParameterType; -import PamView.GeneralProjector.ParameterUnits; -import PamguardMVC.PamDataBlock; -import PamguardMVC.PamDataUnit; -import alfa.clickmonitor.eventaggregator.AggregateLocalisation; -import alfa.clickmonitor.eventaggregator.ClickEventAggregate; -import alfa.clickmonitor.eventaggregator.AggregateLocalisation.AggLatLong; - -public class ClickAggregatOverlayGraphics extends PamDetectionOverlayGraphics { - - /** - * Default symbol for click aggregate overalays - */ - private static PamSymbol defaultSymbol = new PamSymbol(PamSymbolType.SYMBOL_CIRCLE, 9, 9, true, Color.BLACK, Color.RED); - - - public ClickAggregatOverlayGraphics(PamDataBlock parentDataBlock) { - super(parentDataBlock, defaultSymbol); - } - - /* (non-Javadoc) - * @see PamView.PamDetectionOverlayGraphics#canDraw(PamView.GeneralProjector) - */ - @Override - public boolean canDraw(ParameterType[] parameterTypes, ParameterUnits[] parameterUnits) { - if (parameterTypes[0] == ParameterType.LATITUDE - && parameterTypes[1] == ParameterType.LONGITUDE) { - return true; - } - return false; - } - - /* (non-Javadoc) - * @see PamView.PamDetectionOverlayGraphics#drawOnMap(java.awt.Graphics, PamguardMVC.PamDataUnit, PamView.GeneralProjector) - */ - @Override - protected Rectangle drawOnMap(Graphics g, PamDataUnit pamDetection, GeneralProjector generalProjector) { - ClickEventAggregate agg = (ClickEventAggregate) pamDetection; - if (agg.getSubDetectionsCount() < 3) { - return null; -// return super.drawOnMap(g, pamDetection, generalProjector); - } - Graphics2D g2d = (Graphics2D) g; - /* - * need to make a complex hull for each side and try to draw them. - * Started coding a localisation - but probably don't want it as such. - */ - AggregateLocalisation aggLoc = new AggregateLocalisation(agg.getSubDetection(0)); - for (int i = 1; i < agg.getSubDetectionsCount(); i++) { - aggLoc.addLocalisation(agg.getSubDetection(i).getLocalisation()); - } - AggLatLong[] aggShapes = aggLoc.getSideLatLongs(); - PamSymbol symbol = getPamSymbol(pamDetection, generalProjector); - for (int i = 0; i < Math.min(1, aggShapes.length); i++) { - AggLatLong all = aggShapes[i]; - if (all == null) { - continue; - } - List outline = all.getOuterHull(); - int[] xPoints = new int[outline.size()]; - int[] yPoints = new int[outline.size()]; - for (int p = 0; p < outline.size(); p++) { - LatLong ll = outline.get(p); - Coordinate3d pt3 = generalProjector.getCoord3d(ll.getLatitude(), ll.getLongitude(), 0); - xPoints[p] = (int) pt3.x; - yPoints[p] = (int) pt3.y; - } - g.setColor(symbol.getLineColor()); - g.drawPolygon(xPoints, yPoints, yPoints.length); - Color fillCol = new Color(0.2f, .2f, 0.2f, 0.5f);//.getFillColor() - g.setColor(fillCol); - g2d.fillPolygon(xPoints, yPoints, yPoints.length); - } - - return null; - } - -} diff --git a/src/alfa/clickmonitor/swing/ClickAggregateTable.java b/src/alfa/clickmonitor/swing/ClickAggregateTable.java deleted file mode 100644 index 757fca51..00000000 --- a/src/alfa/clickmonitor/swing/ClickAggregateTable.java +++ /dev/null @@ -1,46 +0,0 @@ -package alfa.clickmonitor.swing; - -import PamUtils.PamCalendar; -import PamView.component.DataBlockTableView; -import alfa.clickmonitor.ClickMonitorProcess; -import alfa.clickmonitor.eventaggregator.ClickEventAggregate; - -public class ClickAggregateTable extends DataBlockTableView{ - - /** - * Seem to have to make this static so it get's made before the super class - * constructor is called, otherwise the calls to getColumnNames will return - * null on the first couple of calls while the table is being constructed - * and will mess everything up. - */ - private String[] colNames = {"UID", "Date Time", "N", "TX"}; - - public ClickAggregateTable(ClickMonitorProcess clickMonitorProcess) { - super(clickMonitorProcess.getClickAggregateDataBlock(), clickMonitorProcess.getProcessName() + " Data table"); - } - - @Override - public String[] getColumnNames() { - return colNames; - } - - - @Override - public Object getColumnData(ClickEventAggregate dataUnit, int columnIndex) { - if (dataUnit == null) { - return null; - } - switch (columnIndex) { - case 0: - return dataUnit.getUID(); - case 1: - return PamCalendar.formatTodaysTime(dataUnit.getTimeMilliseconds()); - case 2: - return dataUnit.getSubDetectionsCount(); - case 3: - return false; - - } - return null; - } -} diff --git a/src/alfa/clickmonitor/swing/ClickMonitorComponent.java b/src/alfa/clickmonitor/swing/ClickMonitorComponent.java deleted file mode 100644 index 103697b1..00000000 --- a/src/alfa/clickmonitor/swing/ClickMonitorComponent.java +++ /dev/null @@ -1,30 +0,0 @@ -package alfa.clickmonitor.swing; - -import java.awt.BorderLayout; - -import javax.swing.JComponent; -import javax.swing.border.TitledBorder; - -import PamView.panel.PamPanel; -import alfa.clickmonitor.ClickMonitorProcess; - -public class ClickMonitorComponent { - - private ClickMonitorProcess clickMonitorProcess; - - private PamPanel mainPanel; - - private ClickAggregateTable clickAggregateTable; - - public ClickMonitorComponent(ClickMonitorProcess clickMonitorProcess) { - this.clickMonitorProcess = clickMonitorProcess; - clickAggregateTable = new ClickAggregateTable(clickMonitorProcess); - mainPanel = new PamPanel(new BorderLayout()); - mainPanel.setBorder(new TitledBorder("Sperm whale detection results")); - mainPanel.add(clickAggregateTable.getComponent(), BorderLayout.CENTER); - } - - public JComponent getComponent() { - return mainPanel; - } -} diff --git a/src/alfa/comms/ALFACommsDataUnit.java b/src/alfa/comms/ALFACommsDataUnit.java deleted file mode 100644 index 57919847..00000000 --- a/src/alfa/comms/ALFACommsDataUnit.java +++ /dev/null @@ -1,63 +0,0 @@ -package alfa.comms; - -import PamguardMVC.DataUnitBaseData; -import PamguardMVC.PamDataUnit; - -/** - * Abstract data unit class that will be used by anything that's going to produce - * data that will ultimately get sent through the messaging interface. - * @author dg50 - * - */ -abstract public class ALFACommsDataUnit extends PamDataUnit { - - private boolean readyToSend; - - /** - * @param basicData - */ - public ALFACommsDataUnit(DataUnitBaseData basicData) { - super(basicData); - // TODO Auto-generated constructor stub - } - - /** - * @param timeMilliseconds - * @param channelBitmap - * @param startSample - * @param durationSamples - */ - public ALFACommsDataUnit(long timeMilliseconds, int channelBitmap, long startSample, long durationSamples) { - super(timeMilliseconds, channelBitmap, startSample, durationSamples); - // TODO Auto-generated constructor stub - } - - /** - * @param timeMilliseconds - */ - public ALFACommsDataUnit(long timeMilliseconds) { - super(timeMilliseconds); - // TODO Auto-generated constructor stub - } - - /** - * @return A summary String to send via satellite. - */ - abstract public String getCommsString(); - - /** - * @return the readyToSend - */ - public boolean isReadyToSend() { - return readyToSend; - } - - /** - * @param readyToSend the readyToSend to set - */ - public void setReadyToSend(boolean readyToSend) { - this.readyToSend = readyToSend; - } - - -} diff --git a/src/alfa/comms/MessageProcess.java b/src/alfa/comms/MessageProcess.java deleted file mode 100644 index 4341db18..00000000 --- a/src/alfa/comms/MessageProcess.java +++ /dev/null @@ -1,91 +0,0 @@ -package alfa.comms; - -import javax.swing.JComponent; - -import PamController.PamController; -import PamguardMVC.PamDataUnit; -import PamguardMVC.PamObservable; -import PamguardMVC.PamProcess; -import alfa.ALFAControl; -import alfa.swinggui.SwingMessagePanel; -import rockBlock.RockBlockControl; - -public class MessageProcess extends PamProcess { - - private RockBlockControl rockBlockControl; - - public MessageProcess(ALFAControl alfaControl) { - super(alfaControl, null); - setParentDataBlock(alfaControl.getEffortMonitor().getIntervalDataBlock()); - } - - @Override - public void pamStart() { - // TODO Auto-generated method stub - - } - - @Override - public void pamStop() { - // TODO Auto-generated method stub - - } - - @Override - public void newData(PamObservable o, PamDataUnit arg) { - updateData(o, arg); - } - - @Override - public void updateData(PamObservable o, PamDataUnit arg) { - if (arg instanceof ALFACommsDataUnit) { - newALFAComms((ALFACommsDataUnit) arg); - } - } - - private void newALFAComms(ALFACommsDataUnit alfaCommsDataUnit) { - if (alfaCommsDataUnit.isReadyToSend() == false) { - return; - } - if (rockBlockControl == null) { - return; - } - String txt = alfaCommsDataUnit.getCommsString(); - System.out.println(txt); - rockBlockControl.sendText(txt); - } - - - @Override - public void notifyModelChanged(int changeType) { - super.notifyModelChanged(changeType); - switch (changeType) { - case PamController.INITIALIZATION_COMPLETE: - case PamController.ADD_CONTROLLEDUNIT: - case PamController.REMOVE_CONTROLLEDUNIT: - if (PamController.getInstance().isInitializationComplete()) { - findRockBlock(); - } - } - } - - public RockBlockControl findRockBlock() { - if (rockBlockControl == null) { - rockBlockControl = (RockBlockControl) PamController.getInstance().findControlledUnit(RockBlockControl.class, null); - } - return rockBlockControl; - } - - /** - * Get a panel with tables for incoming and outgoing messages - * @param showWhat 1 = outgoing, 2 = incoming 3 = both - * @return - */ - public JComponent getSwingCommsPanel(int showWhat) { - SwingMessagePanel swingMessagePanel = new SwingMessagePanel(this, showWhat); - return swingMessagePanel.getComponent(); - - } - - -} diff --git a/src/alfa/effortmonitor/AngleHistogram.java b/src/alfa/effortmonitor/AngleHistogram.java deleted file mode 100644 index ff09b62d..00000000 --- a/src/alfa/effortmonitor/AngleHistogram.java +++ /dev/null @@ -1,34 +0,0 @@ -package alfa.effortmonitor; - -import pamMaths.PamHistogram; - -public class AngleHistogram extends PamHistogram implements Cloneable { - - private long startTime; - - public AngleHistogram(long startTime, double minVal, double maxVal, int nBins) { - super(minVal, maxVal, nBins); - this.startTime = startTime; - } - - /** - * @return the startTime - */ - public long getStartTime() { - return startTime; - } - - /** - * @param startTime the startTime to set - */ - public void setStartTime(long startTime) { - this.startTime = startTime; - } - - @Override - protected AngleHistogram clone() { - AngleHistogram angleHist = (AngleHistogram) super.clone(); - return angleHist; - } - -} diff --git a/src/alfa/effortmonitor/EffortMonitor.java b/src/alfa/effortmonitor/EffortMonitor.java deleted file mode 100644 index b7cdcd47..00000000 --- a/src/alfa/effortmonitor/EffortMonitor.java +++ /dev/null @@ -1,388 +0,0 @@ -package alfa.effortmonitor; - - -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.util.Arrays; -import java.util.ListIterator; - -import javax.swing.Timer; - -import GPS.GPSControl; -import GPS.GPSDataBlock; -import GPS.GpsData; -import GPS.GpsDataUnit; -import PamController.PamController; -import PamController.status.ModuleStatus; -import PamDetection.AbstractLocalisation; -import PamUtils.PamCalendar; -import PamguardMVC.PamDataBlock; -import PamguardMVC.PamDataUnit; -import PamguardMVC.PamProcess; -import alfa.ALFAControl; -import alfa.ALFAParameters; -import alfa.clickmonitor.eventaggregator.ClickEventAggregate; -import alfa.server.ServerIntervalDataBlock; -import alfa.swinggui.IntervalOverlayDraw; -import clickDetector.ClickTrainDetector; -import detectiongrouplocaliser.DetectionGroupDataUnit; - -/** - * Monitors incoming data from the click train detector, summarises angles into a histogram, monitors - * total effort within an interval (usually around an hour), keeps summary of the GPS track lines and handles - * making summary satellite messgaes. - * - * @author Doug Gillespie - * - */ -public class EffortMonitor extends PamProcess { - - private GPSDataBlock gpsDataBlock; - - private ClickTrainDetector clickTrainDetector; - - private Timer effortTimer; - - private IntervalDataBlock intervalDataBlock; - - private ServerIntervalDataBlock serverIntervalData; - - private IntervalDataLogging intervalLogging; - - private long effortStartTime; - - private long timerStartTime; - - private ALFAControl alfaControl; - - private AngleHistogram currentHistogram, prevHistogram; - - private IntervalDataUnit currentDataUnit; - - - public EffortMonitor(ALFAControl alfaControl) { - super(alfaControl, null, "Effort Monitor"); - this.alfaControl = alfaControl; - effortTimer = new Timer(2000, new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - timerAction(); - } - }); - - intervalDataBlock = new IntervalDataBlock(this, "ALFA Track Summary"); - intervalDataBlock.SetLogging(intervalLogging = new IntervalDataLogging(intervalDataBlock)); - intervalDataBlock.setOverlayDraw(new IntervalOverlayDraw(alfaControl)); - addOutputDataBlock(intervalDataBlock); - - if (alfaControl.isViewer()) { - serverIntervalData = new ServerIntervalDataBlock(this, "ALFA Server Data"); - serverIntervalData.setOverlayDraw(new IntervalOverlayDraw(alfaControl)); -// serverIntervalData.SetLogging(new ALFAServerLoader(serverIntervalData)); - addOutputDataBlock(serverIntervalData); - } - } - - - /* (non-Javadoc) - * @see PamguardMVC.PamProcess#notifyModelChanged(int) - */ - @Override - public void notifyModelChanged(int changeType) { - super.notifyModelChanged(changeType); - switch (changeType) { - case PamController.INITIALIZATION_COMPLETE: - loadOldData(); - case PamController.ADD_CONTROLLEDUNIT: - case PamController.REMOVE_CONTROLLEDUNIT: - findGpsDataBlock(); - break; - - default: - break; - } - } - - private synchronized void timerAction() { - long now = PamCalendar.getTimeInMillis(); - long newEffort = now-timerStartTime; - currentDataUnit.addActualEffort(newEffort); - currentDataUnit.setDurationInMilliseconds(now-currentDataUnit.getTimeMilliseconds()); - GpsData gpsData = getLatestGPS(); - if (gpsData != null) { - currentDataUnit.setLastGPSData(gpsData); - } - if (readyToSend(currentDataUnit)) { - currentDataUnit.setReadyToSend(true); - intervalDataBlock.updatePamData(currentDataUnit, now); - currentDataUnit = createNewData(now); - } - else { - checkAngleHistogram(now); - } - timerStartTime = now; - } - - - private void checkAngleHistogram(long now) { - if (currentHistogram == null) { - return; - } - ALFAParameters params = alfaControl.getAlfaParameters(); - long histoInterval = params.effortMsgIntervalNoWhales / Math.max(params.histosPerReportInterval,1); - histoInterval = Math.max(120, histoInterval); - long histoEndTime = currentHistogram.getStartTime() + histoInterval * 1000; - if (now >= histoEndTime) { - currentHistogram = makeAngleHistogram(now); - currentDataUnit.addAngleHistogram(currentHistogram); - intervalDataBlock.updatePamData(currentDataUnit, now); - } - } - - - private boolean endDataUnit(IntervalDataUnit intervalDataUnit, long timeMilliseconds) { - if (intervalDataUnit == null) { - return true; - } - return intervalDataUnit.getTimeMilliseconds() + alfaControl.getAlfaParameters().effortMsgIntervalNoWhales*1000 < timeMilliseconds; - } - /** - * Called on initialisation complete to reload old data. - */ - private void loadOldData() { - if (alfaControl.getAlfaParameters().reloadOldReports) { - intervalLogging.loadDataFrom(PamCalendar.getTimeInMillis() - 2*1000*alfaControl.getAlfaParameters().effortMsgIntervalNoWhales); - currentDataUnit = intervalDataBlock.getLastUnit(); - if (currentDataUnit != null) { - currentHistogram = currentDataUnit.getLastHistrogram(); - } -// if (currentDataUnit != null && currentDataUnit.getTimeMilliseconds() < PamCa) - } - } - - -// /** -// * -// * @return the current latest data unit, or create one. -// */ -// private IntervalDataUnit findDataUnit(long currentTime) { -// IntervalDataUnit dataunit = intervalDataBlock.getLastUnit(); -// if (dataunit == null) { -// dataunit = createNewData(currentTime); -// } -// if (currentHistogram == null) { -// currentHistogram = makeAngleHistogram(currentTime); -// dataunit.addAngleHistogram(currentHistogram); -// } -// -// return dataunit; -// } - - /** - * Create a new data unit, add current GPS data and - * add it to the data block. Also add it's first angle histogram. - * @param timeMilliseconds - * @return data unit - */ - private IntervalDataUnit createNewData(long timeMilliseconds) { - IntervalDataUnit dataUnit = new IntervalDataUnit(timeMilliseconds, getLatestGPS()); - currentHistogram = makeAngleHistogram(timeMilliseconds); - dataUnit.addAngleHistogram(currentHistogram); - intervalDataBlock.addPamData(dataUnit); - - return dataUnit; - } - - private AngleHistogram makeAngleHistogram(long timeMilliseconds) { - prevHistogram = currentHistogram; - return new AngleHistogram(timeMilliseconds, 0, Math.PI, alfaControl.getAlfaParameters().getBinsPerhistogram()); - } - - - @Override - public void pamStart() { - if (alfaControl.getAlfaParameters().reloadOldReports == false) { - intervalDataBlock.clearAll(); - } - effortTimer.start(); - timerStartTime = effortStartTime = PamCalendar.getTimeInMillis(); - if (currentDataUnit != null && endDataUnit(currentDataUnit, effortStartTime)) { - currentDataUnit = null; - } - if (currentDataUnit == null) { - currentDataUnit = createNewData(effortStartTime); - } - if (currentHistogram == null) { - currentHistogram = makeAngleHistogram(effortStartTime); - currentDataUnit.addAngleHistogram(currentHistogram); - } - } - - @Override - public void pamStop() { - effortTimer.stop(); -// timerAction(); - } - - /** - * See if it's time to send the current data unit. - * @param dataUnit data unit - * @return true if it's time to send it. - */ - private boolean readyToSend(IntervalDataUnit dataUnit) { - if (dataUnit == null) { - return false; - } - double durationSecs = dataUnit.getDurationInMilliseconds() / 1000.; - ALFAParameters params = alfaControl.getAlfaParameters(); - return durationSecs >= params.effortMsgIntervalNoWhales; - } - - /** - * - * @return the latest GPS data - */ - private GpsData getLatestGPS() { - if (gpsDataBlock == null) { - return null; - } - GpsDataUnit lastGPSUnit = gpsDataBlock.getLastUnit(); - if (lastGPSUnit == null) { - return null; - } - return lastGPSUnit.getGpsData(); - } - - private boolean findGpsDataBlock() { - GPSControl gpsControl = GPSControl.getGpsControl(); - if (gpsControl == null) { - gpsDataBlock = null; - } - else { - gpsDataBlock = gpsControl.getGpsDataBlock(); - } - setParentDataBlock(gpsDataBlock); - return gpsDataBlock != null; - } - - - /** - * @return the intervalDataBlock - */ - public IntervalDataBlock getIntervalDataBlock() { - return intervalDataBlock; - } - - - /** - * Update the click historgram information. - * @param aggregateEvent - the event. - * @param detectionGroupDataUnit - the detection group data unit. - */ - public void updateClickInformation(ClickEventAggregate aggregateEvent, - DetectionGroupDataUnit detectionGroupDataUnit) { - currentDataUnit.addClickTrain(detectionGroupDataUnit); - double medAngle = getMedianAngle(detectionGroupDataUnit); - - if (this.alfaControl.getAlfaParameters().useClkTrains) { - currentHistogram.addData(medAngle); - } - else { - for (int i=0; i intIt = intervalDataBlock.getListIterator(PamDataBlock.ITERATOR_END); - } - if (currentHistogram == null) { - return new ModuleStatus(ModuleStatus.STATUS_WARNING, "No data"); - } - else { - double n = currentHistogram.getTotalContent(); - if (n == 0) { - return new ModuleStatus(ModuleStatus.STATUS_OK, "No Whales"); - } - else if (n == 1) { - return new ModuleStatus(ModuleStatus.STATUS_WARNING, "One whale detection"); - } - else { - return new ModuleStatus(ModuleStatus.STATUS_ERROR, String.format("%d whales detected", (int) n)); - } - } - } - - - @Override - public void setupProcess() { - super.setupProcess(); - intervalLogging.checkHistogramColumns(alfaControl.getAlfaParameters().histosPerReportInterval); - if (serverIntervalData != null) { - serverIntervalData.getAlfaServerLoader().runAutoUpdates(alfaControl.getAlfaParameters().followOffline); - } - } - - - /** - * Get a slightly averaged angle histogram for status display. - * @return averaged angle histogram. - */ - public AngleHistogram getAveragedAngleHistogram() { - if (currentHistogram == null) { - return null; - } - AngleHistogram angleHist = currentHistogram.clone(); - if (prevHistogram != null) { - double[] data = angleHist.getData(); - double[] data2 = prevHistogram.getData(); - int n = Math.min(data.length, data2.length); - for (int i = 0; i < n; i++) { - data[i] = (data[i] + data2[i]); - } - } - return angleHist; - } -} diff --git a/src/alfa/effortmonitor/IntervalDataBlock.java b/src/alfa/effortmonitor/IntervalDataBlock.java deleted file mode 100644 index 05d5298f..00000000 --- a/src/alfa/effortmonitor/IntervalDataBlock.java +++ /dev/null @@ -1,37 +0,0 @@ -package alfa.effortmonitor; - -import PamController.PamController; -import PamguardMVC.PamDataBlock; -import PamguardMVC.PamDataUnit; -import PamguardMVC.PamProcess; -import PamguardMVC.dataOffline.OfflineDataLoadInfo; -import alfa.server.ALFAServerLoader; -import pamScrollSystem.ViewLoadObserver; - -public class IntervalDataBlock extends PamDataBlock { - - - public IntervalDataBlock(PamProcess parentProcess, String name) { - super(IntervalDataUnit.class, name, parentProcess, 0); - setNaturalLifetime(3600*10); // 10 hours worth. -// setClearAtStart(PamController.getInstance().getRunMode() == PamController.RUN_NORMAL); - /** - * Will call explicitly from start() if we want to depending on delected options. - */ - setClearAtStart(false); - } - - @Override - public int getNumRequiredBeforeLoadTime() { - return 10; - } - - @Override - public boolean getShouldLog(PamDataUnit pamDataUnit) { - IntervalDataUnit idu = (IntervalDataUnit) pamDataUnit; - return super.getShouldLog(pamDataUnit) & idu.getDurationInMilliseconds() > 0; - } - - - -} diff --git a/src/alfa/effortmonitor/IntervalDataLogging.java b/src/alfa/effortmonitor/IntervalDataLogging.java deleted file mode 100644 index 40711a26..00000000 --- a/src/alfa/effortmonitor/IntervalDataLogging.java +++ /dev/null @@ -1,196 +0,0 @@ -package alfa.effortmonitor; - -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.sql.Types; -import java.util.Arrays; - -import javax.swing.JTree; - -import com.fasterxml.jackson.core.JsonEncoding; -import com.fasterxml.jackson.core.JsonFactory; -import com.fasterxml.jackson.core.JsonGenerator; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.core.JsonParser; -//import org.codehaus.jackson.JsonToken; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.node.ArrayNode; - -import GPS.GpsData; -import PamUtils.LatLong; -import PamUtils.LatLongDatabaseSet; -import PamguardMVC.PamDataBlock; -import PamguardMVC.PamDataUnit; -import PamguardMVC.debug.Debug; -import generalDatabase.DBControlUnit; -import generalDatabase.DBProcess; -import generalDatabase.PamConnection; -import generalDatabase.PamTableDefinition; -import generalDatabase.PamTableItem; -import generalDatabase.SQLLogging; -import generalDatabase.SQLTypes; - -public class IntervalDataLogging extends SQLLogging { - - private PamTableItem secondsMonitored, endTime; - private LatLongDatabaseSet startGPS, endGPS; - private PamTableItem clickTrains, clicks; - private PamTableItem[] histogramColumns; - private PamTableDefinition tableDefinition; - - private static final int HISTO_TEXT_LENGTH = 30; - - public IntervalDataLogging(PamDataBlock pamDataBlock) { - super(pamDataBlock); - tableDefinition = new PamTableDefinition("Sperm Whale Intervals"); - tableDefinition.addTableItem(endTime = new PamTableItem("End Time", Types.TIMESTAMP)); - tableDefinition.addTableItem(secondsMonitored = new PamTableItem("Monitored Seconds", Types.INTEGER)); - startGPS = new LatLongDatabaseSet("Start", LatLongDatabaseSet.VERTICAL_NONE, true, true); - endGPS = new LatLongDatabaseSet("End", LatLongDatabaseSet.VERTICAL_NONE, true, true); - startGPS.addTableItems(tableDefinition); - endGPS.addTableItems(tableDefinition); - tableDefinition.addTableItem(clickTrains = new PamTableItem("Click Trains", Types.INTEGER)); - tableDefinition.addTableItem(clicks = new PamTableItem("Clicks", Types.INTEGER)); - tableDefinition.setUpdatePolicy(SQLLogging.UPDATE_POLICY_OVERWRITE); - setTableDefinition(tableDefinition); - } - - public boolean checkHistogramColumns(int nColumns) { - PamConnection con = DBControlUnit.findConnection(); - if (con == null || con.getConnection() == null) { - return false; - } - if (histogramColumns == null) { - histogramColumns = new PamTableItem[nColumns]; - } - else if (histogramColumns.length < nColumns) { - histogramColumns = Arrays.copyOf(histogramColumns, nColumns); - } - boolean ok = true; - for (int i = 0; i < nColumns; i++) { - ok |= checkHistogramColumn(con, i); - } - return ok; - } - - private boolean checkHistogramColumn(PamConnection con, int iColumn) { - DBProcess dbProc = DBControlUnit.findDatabaseControl().getDbProcess(); - String columnName = "AngleHistogram_"+iColumn; - histogramColumns[iColumn] = tableDefinition.findTableItem(columnName); - if (histogramColumns[iColumn] == null) { - histogramColumns[iColumn] = new PamTableItem(columnName, Types.CHAR, HISTO_TEXT_LENGTH); - tableDefinition.addTableItem(histogramColumns[iColumn]); - } - return dbProc.checkColumn(tableDefinition, histogramColumns[iColumn]); - } - - @Override - public void setTableData(SQLTypes sqlTypes, PamDataUnit pamDataUnit) { - IntervalDataUnit intervalDataUnit = (IntervalDataUnit) pamDataUnit; - endTime.setValue(sqlTypes.getTimeStamp(intervalDataUnit.getEndTimeInMilliseconds())); - secondsMonitored.setValue((int) intervalDataUnit.getActualEffort()/1000); - startGPS.setLatLongData(intervalDataUnit.getFirstGPSData()); - endGPS.setLatLongData(intervalDataUnit.getLastGPSData()); - clickTrains.setValue(intervalDataUnit.getnClickTrains()); - clicks.setValue(intervalDataUnit.getnClicks()); - if (histogramColumns != null) for (int i = 0; i < histogramColumns.length; i++) { - writeAngleHistogram(sqlTypes, intervalDataUnit, i); - } - } - - private void writeAngleHistogram(SQLTypes sqlTypes, IntervalDataUnit intervalDataUnit, int iAngleHist) { - AngleHistogram angleHist = intervalDataUnit.getAngleHistogram(iAngleHist); - if (angleHist == null) { - histogramColumns[iAngleHist].setValue(null); - return; - } - JsonFactory jf = new JsonFactory(); - ByteArrayOutputStream os = new ByteArrayOutputStream(); - String str = null; - try { - JsonGenerator jg = jf.createJsonGenerator(os, JsonEncoding.UTF8); - jg.writeStartObject(); -// jg.writeNumberField("NCOL", angleHist.getNBins()); - jg.writeArrayFieldStart("NW"); - double[] data = angleHist.getData(); - for (int i = 0; i < data.length; i++) { - jg.writeNumber((int) data[i]); - } - jg.writeEndArray(); - jg.writeEndObject(); - jg.close(); - String jsonString = os.toString(); - histogramColumns[iAngleHist].setValue(jsonString); - }catch (IOException e) { - e.printStackTrace(); - } - } - - @Override - protected PamDataUnit createDataUnit(SQLTypes sqlTypes, long timeMilliseconds, int databaseIndex) { - LatLong startLL = startGPS.getLatLongData(sqlTypes); - LatLong endLL = endGPS.getLatLongData(sqlTypes); - - if (startLL==null || endLL==null) return null; //for corrupt entries. - - long monTime = secondsMonitored.getIntegerValue()*1000; - long endTimeMillis = SQLTypes.millisFromTimeStamp(endTime.getValue()); - int nClickTrains = clickTrains.getIntegerValue(); - int nClicks = clickTrains.getIntegerValue(); - GpsData sGPS = new GpsData(timeMilliseconds, startLL); - GpsData eGPS = new GpsData(endTimeMillis, endLL); - IntervalDataUnit du = new IntervalDataUnit(timeMilliseconds, sGPS); - du.setDurationInMilliseconds(endTimeMillis-timeMilliseconds); - du.setActualEffort(monTime); - du.setLastGPSData(eGPS); - du.setnClickTrains(nClickTrains); - du.setnClicks(nClicks); - if (histogramColumns != null) { - long histInterval = (endTimeMillis-timeMilliseconds) / histogramColumns.length; - for (int i = 0; i < histogramColumns.length; i++) { - AngleHistogram angleHist = readAngleHistogram(i); - if (angleHist != null) { - long histTime = timeMilliseconds + histInterval*i; - angleHist.setStartTime(histTime); - du.addAngleHistogram(angleHist); - } - } - } - return du; - } - - private AngleHistogram readAngleHistogram(int iHist) { - String jString = histogramColumns[iHist].getDeblankedStringValue(); - if (jString == null || jString.length() == 0) { - return null; - } - JsonFactory jf = new JsonFactory(); - int[] data = null; - try { - ObjectMapper om = new ObjectMapper(); - JsonNode jTree = om.readTree(new ByteArrayInputStream(jString.getBytes())); - JsonNode jNode = jTree.findValue("NW"); - if (jNode.isArray()) { - ArrayNode an = (ArrayNode) jNode; - int n = an.size(); - data = new int[n]; - int i = 0; - for (JsonNode jn : an) { - data[i++] = jn.intValue(); - } - } - } catch (IOException e) { - Debug.out.printf("Interval data logging unable to interpret histogram string: %s", jString); - return null; - } - if (data == null) { - return null; - } - AngleHistogram angleHist = new AngleHistogram(0, 0, Math.PI, data.length); - angleHist.setData(data); - return angleHist; - - } - -} diff --git a/src/alfa/effortmonitor/IntervalDataUnit.java b/src/alfa/effortmonitor/IntervalDataUnit.java deleted file mode 100644 index e61d28ab..00000000 --- a/src/alfa/effortmonitor/IntervalDataUnit.java +++ /dev/null @@ -1,298 +0,0 @@ -package alfa.effortmonitor; - -import java.util.ArrayList; - -import GPS.GpsData; -import PamUtils.LatLong; -import PamUtils.PamCalendar; -import PamUtils.time.CalendarControl; -import alfa.comms.ALFACommsDataUnit; -import alfa.server.ServerRawData; -import detectiongrouplocaliser.DetectionGroupDataUnit; - -/** - * Data unit to summarise what's been going on in some defined time interval (e.g. an hour) - * @author Doug Gillespie - * - */ -public class IntervalDataUnit extends ALFACommsDataUnit { - - /** - * Actual effort in milliseconds. - */ - private long actualEffort; - - private GpsData firstGPSData, lastGPSData; - - private int nClickTrains, nClicks; - - private ArrayList angleHistograms = new ArrayList<>(); - - private Long imeiNumber; - - private ServerRawData serverRawData; - - public IntervalDataUnit(long timeMilliseconds, GpsData gpsData) { - super(timeMilliseconds); - getBasicData().setEndTime(timeMilliseconds); - firstGPSData = lastGPSData = gpsData; - } - - /** - * Add a period of effort to the data unit. - * @param effort active time in milliseconds. - * @return new total effort. - */ - public long addActualEffort(long effort) { - actualEffort += effort; - return actualEffort; - } - - /** - * @return the actualEffort - */ - public long getActualEffort() { - return actualEffort; - } - - /** - * @param actualEffort the actualEffort to set - */ - public void setActualEffort(long actualEffort) { - this.actualEffort = actualEffort; - } - - /** - * - * @return percentage of up time of PAMguard. - */ - public double getPercentEffort() { - double duration = getDurationInMilliseconds(); - if (duration == 0) { - return 0; - } - return (double) actualEffort / duration * 100.; - } - - /** - * @return the firstGPSData - */ - public GpsData getFirstGPSData() { - return firstGPSData; - } - - /** - * @param firstGPSData the firstGPSData to set - */ - public void setFirstGPSData(GpsData firstGPSData) { - this.firstGPSData = firstGPSData; - } - - /** - * @return the lastGPSData - */ - public GpsData getLastGPSData() { - return lastGPSData; - } - - /** - * @param lastGPSData the lastGPSData to set - */ - public void setLastGPSData(GpsData lastGPSData) { - this.lastGPSData = lastGPSData; - if (firstGPSData == null) { - firstGPSData = lastGPSData; - } - } - - /** - * - * @return straight line track length between start and end in metres - */ - public Double getTrackLengthMetres() { - if (firstGPSData == null || lastGPSData == null) { - return null; - } - return firstGPSData.distanceToMetres(lastGPSData); - } - - /** - * - * @return straight line track length between start and end in miles - */ - public Double getTrackLengthMiles() { - Double m = getTrackLengthMetres(); - if (m == null) { - return null; - } - return m / LatLong.MetersPerMile; - } - - - @Override - public String getCommsString() { - double duration = Math.max(0, getDurationInMilliseconds() / 1000. / 60); - LatLong startLat = firstGPSData; - if (startLat == null) { - startLat = new LatLong(); - } - LatLong endLat = lastGPSData; - if (endLat == null) { - endLat = new LatLong(); - } - String str = String.format("$PGSTA,1,%s,%s,%4.4f,%4.4f,%d,%d,%4.4f,%4.4f,%d,%d", - PamCalendar.formatDate2(getTimeMilliseconds(),false), PamCalendar.formatTime2(getTimeMilliseconds(), 0, false), - startLat.getLatitude(), startLat.getLongitude(), - (int) duration, (int) getPercentEffort(), - endLat.getLatitude(), endLat.getLongitude(), - nClickTrains, nClicks); - synchronized (angleHistograms) { - int nHist = angleHistograms.size(); - for (int i = 0; i < nHist; i++) { - AngleHistogram angleHistogram = angleHistograms.get(i); - int nBins = angleHistogram.getNBins(); - String hStr = String.format(",H,%d",nBins); - double[] data = angleHistogram.getData(); - for (int b = 0; b < nBins; b++) { - hStr += String.format(",%d", (int) data[b]); - } - str += hStr; - } - } - return str; - } - - @Override - public String getSummaryString() { - String str = ""; - str += "UID: " + getUID() + "

"; - if (getParentDataBlock() != null) { - str += getParentDataBlock().getDataName() + "

"; - } - if (imeiNumber != null) { - str += String.format("imei: %d

", imeiNumber); - } - Integer momsn = getMOMSN(); - if (momsn != null) { - str += String.format("momsn: %d

", momsn); - } - str += String.format("%s %s %s

", PamCalendar.formatDate(getTimeMilliseconds(), true), - PamCalendar.formatTime(getTimeMilliseconds(), 3, true), - CalendarControl.getInstance().getTZCode(true)); - if (CalendarControl.getInstance().isUTC() == false) { - str += String.format("(%s %s %s)

", PamCalendar.formatDate(getTimeMilliseconds(), false), - PamCalendar.formatTime(getTimeMilliseconds(), 3, false), - "UTC"); - } - double duration = Math.max(0, getDurationInMilliseconds() / 1000.); - LatLong startLat = firstGPSData; - if (startLat == null) { - startLat = new LatLong(); - } - LatLong endLat = lastGPSData; - if (endLat == null) { - endLat = new LatLong(); - } - str += String.format("Start %s

End %s

Click Trains: %d

Clicks %d", - startLat.toString(), endLat.toString(), nClickTrains, nClicks); - return str; - } - - @Override - public Double getDurationInMilliseconds() { - return Math.max(0,super.getDurationInMilliseconds()); - } - - public void addClickTrain(DetectionGroupDataUnit detectionGroupDataUnit) { - nClickTrains++; - nClicks += detectionGroupDataUnit.getSubDetectionsCount(); - } - - - /** - * @return the nClickTrains - */ - public int getnClickTrains() { - return nClickTrains; - } - - /** - * @param nClickTrains the nClickTrains to set - */ - public void setnClickTrains(int nClickTrains) { - this.nClickTrains = nClickTrains; - } - - /** - * @return the nClicks - */ - public int getnClicks() { - return nClicks; - } - - /** - * @param nClicks the nClicks to set - */ - public void setnClicks(int nClicks) { - this.nClicks = nClicks; - } - - public void addAngleHistogram(AngleHistogram angleHistogram) { - synchronized (angleHistograms) { - angleHistograms.add(angleHistogram); - } - } - - public AngleHistogram getAngleHistogram(int iHist) { - synchronized (angleHistograms) { - if (angleHistograms == null || angleHistograms.size() <= iHist) { - return null; - } - return angleHistograms.get(iHist); - } - } - - /** - * @return the angleHistograms - */ - public ArrayList getAngleHistograms() { - return angleHistograms; - } - - public AngleHistogram getLastHistrogram() { - if (angleHistograms == null) { - return null; - } - else { - return angleHistograms.get(angleHistograms.size()-1); - } - } - - /** - * @return the imeiNumber - */ - public Long getImeiNumber() { - return imeiNumber; - } - - /** - * @param imeiNumber the imeiNumber to set - */ - public void setImeiNumber(Long imeiNumber) { - this.imeiNumber = imeiNumber; - } - - public void setServerRawData(ServerRawData serverRaw) { - this.serverRawData = serverRaw; - } - - public Integer getMOMSN() { - if (serverRawData == null) { - return null; - } - else { - return serverRawData.getMOMSN(); - } - } - -} diff --git a/src/alfa/help/doc/ALFAOnePageHelp.html b/src/alfa/help/doc/ALFAOnePageHelp.html deleted file mode 100644 index 7724d739..00000000 --- a/src/alfa/help/doc/ALFAOnePageHelp.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - -ALFA Help Page - - -

this is a page of help text

- - - \ No newline at end of file diff --git a/src/alfa/help/gui/ALFAHelpPanel.java b/src/alfa/help/gui/ALFAHelpPanel.java deleted file mode 100644 index d4661f92..00000000 --- a/src/alfa/help/gui/ALFAHelpPanel.java +++ /dev/null @@ -1,53 +0,0 @@ -package alfa.help.gui; - -import java.awt.BorderLayout; -import java.awt.Component; -import java.net.URL; - -import javax.help.JHelpContentViewer; -import javax.swing.JComponent; -import javax.swing.JEditorPane; -import javax.swing.JScrollPane; -import javax.swing.JTextPane; -import javax.swing.ScrollPaneConstants; - -import PamView.panel.PamPanel; -import alfa.ALFAControl; - -public class ALFAHelpPanel { - - private ALFAControl alfaControl; - - private PamPanel mainPanel; - - private JEditorPane htmlPane; - - private static final String helpFile = "alfa/help/doc/ALFAOnePageHelp.html"; -// private static final String helpFile = "alfa/help/doc/TestRTF.rtf"; - - public ALFAHelpPanel(ALFAControl alfaControl) { - this.alfaControl = alfaControl; - mainPanel = new PamPanel(new BorderLayout()); - htmlPane = new JEditorPane(); -// htmlPane.setEditable(false); - JScrollPane scrollPane = new JScrollPane(htmlPane); - scrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS); - mainPanel.add(BorderLayout.CENTER, scrollPane); - /* - * Stick the single html file into it ... - */ - try { - URL help = ClassLoader.getSystemResource(helpFile); - htmlPane.setPage(help); - } - catch (Exception e) { - e.printStackTrace(); - } - - } - - public JComponent getComponent() { - return mainPanel; - } - -} diff --git a/src/alfa/logger/LoggerCommsDataUnit.java b/src/alfa/logger/LoggerCommsDataUnit.java deleted file mode 100644 index 8e38378f..00000000 --- a/src/alfa/logger/LoggerCommsDataUnit.java +++ /dev/null @@ -1,28 +0,0 @@ -package alfa.logger; - -import PamUtils.PamCalendar; -import alfa.comms.ALFACommsDataUnit; - -public class LoggerCommsDataUnit extends ALFACommsDataUnit { - -// public static final int CURRENT_VERSION = 1; - - private String jsonString; - - private int loggerFormFormat; - - public LoggerCommsDataUnit(long timeMilliseconds, String jsonString, int loggerFormFormat) { - super(timeMilliseconds); - this.jsonString = jsonString; - this.loggerFormFormat = loggerFormFormat; - setReadyToSend(true); - } - - @Override - public String getCommsString() { - return String.format("$PGLGR,%d,%s,%s,%s", loggerFormFormat, - PamCalendar.formatDate2(getTimeMilliseconds(),false), PamCalendar.formatTime2(getTimeMilliseconds(), 0, false), - jsonString); - } - -} diff --git a/src/alfa/logger/LoggerMonitor.java b/src/alfa/logger/LoggerMonitor.java deleted file mode 100644 index a62cb891..00000000 --- a/src/alfa/logger/LoggerMonitor.java +++ /dev/null @@ -1,116 +0,0 @@ -package alfa.logger; - -import java.awt.Frame; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; - -import javax.swing.JMenuItem; - -import PamController.PamController; -import PamUtils.PamCalendar; -import PamguardMVC.PamDataUnit; -import PamguardMVC.PamObservable; -import PamguardMVC.PamProcess; -import PamguardMVC.dataSelector.DataSelector; -import alfa.ALFAControl; -import loggerForms.FormDescription; -import loggerForms.FormsControl; -import loggerForms.FormsDataUnit; - -public class LoggerMonitor extends PamProcess { - - - private ALFAControl alfaControl; - private DataSelector formsSelector; - private FormsControl loggerControl; - - public LoggerMonitor(ALFAControl alfaControl) { - super(alfaControl, null); - this.alfaControl = alfaControl; - } - - private boolean linkLogger() { - loggerControl = (FormsControl) PamController.getInstance().findControlledUnit(FormsControl.class, null); - if (loggerControl == null) { - return false; - } - loggerControl.getFormsMonitor().addObserver(this, true); - formsSelector = loggerControl.getFormsMonitor().getDataSelector(alfaControl.getUnitName()); - return false; - } - - @Override - public void pamStart() { - // TODO Auto-generated method stub - - } - - @Override - public void pamStop() { - // TODO Auto-generated method stub - - } - - @Override - public void notifyModelChanged(int changeType) { - super.notifyModelChanged(changeType); - if (changeType == PamController.INITIALIZATION_COMPLETE) { - linkLogger(); - } - } - - public JMenuItem getMenuItem(Frame parentFrame) { - JMenuItem menuItem = new JMenuItem("Logger forms ..."); - menuItem.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - showOptionsMenu(parentFrame); - } - }); - if (loggerControl == null) { - menuItem.setEnabled(false); - menuItem.setToolTipText("No logger forms available"); - } - else { - menuItem.setToolTipText("Select logger forms for satellite messaging"); - } - return menuItem; - } - - public boolean showOptionsMenu(Frame frame) { - if (formsSelector == null) { - return false; - } - return formsSelector.showSelectDialog(frame); - } - - - - @Override - public void newData(PamObservable o, PamDataUnit arg) { - FormsDataUnit formsUnit = (FormsDataUnit) arg; - if (formsSelector.scoreData(formsUnit) > 0) { - newFormsData(formsUnit); - } - } - - private void newFormsData(FormsDataUnit formsUnit) { -// Debug.out.println(formsUnit.getSummaryString()); - FormDescription desc = formsUnit.getLoggerForm().getFormDescription(); -// Debug.out.println(desc.getXMLData(formsUnit)); -// Debug.out.println(desc.getJSONData(formsUnit)); - String jsonString = desc.getStringData(formsUnit, alfaControl.getAlfaParameters().loggerFormFormat); - if (jsonString != null) { - LoggerCommsDataUnit lcdu = new LoggerCommsDataUnit(formsUnit.getTimeMilliseconds(), jsonString, alfaControl.getAlfaParameters().loggerFormFormat); - alfaControl.getMessageProcess().newData(null, lcdu); - } - } - - /** - * @return the formsSelector - */ - public DataSelector getFormsSelector() { - return formsSelector; - } - -} diff --git a/src/alfa/server/ALFADataMapPoint.java b/src/alfa/server/ALFADataMapPoint.java deleted file mode 100644 index 6d05354e..00000000 --- a/src/alfa/server/ALFADataMapPoint.java +++ /dev/null @@ -1,76 +0,0 @@ -package alfa.server; - -import java.lang.reflect.Field; - -import PamModel.parametermanager.ManagedParameters; -import PamModel.parametermanager.PamParameterSet; -import PamModel.parametermanager.PrivatePamParameterData; -import dataMap.OfflineDataMapPoint; - -public class ALFADataMapPoint extends OfflineDataMapPoint implements ManagedParameters { - - /** - * - */ - private static final long serialVersionUID = 1L; - public static final String name = "ALFA Server"; - private Long lowUID, highUID; - public ALFADataMapPoint(long startTime, long endTime, int nDatas, long missingUIDs) { - super(startTime, endTime, nDatas, missingUIDs); - } - - @Override - public String getName() { - // TODO Auto-generated method stub - return name; - } - - @Override - public Long getLowestUID() { - return lowUID; - } - - @Override - public void setLowestUID(Long uid) { - lowUID = uid; - } - - @Override - public Long getHighestUID() { - return highUID; - } - - @Override - public void setHighestUID(Long uid) { - highUID = uid; - } - - @Override - public PamParameterSet getParameterSet() { - PamParameterSet ps = super.getParameterSet(); - try { - Field field = this.getClass().getDeclaredField("highUID"); - ps.put(new PrivatePamParameterData(this, field) { - @Override - public Object getData() throws IllegalArgumentException, IllegalAccessException { - return highUID; - } - }); - } catch (NoSuchFieldException | SecurityException e) { - e.printStackTrace(); - } - try { - Field field = this.getClass().getDeclaredField("lowUID"); - ps.put(new PrivatePamParameterData(this, field) { - @Override - public Object getData() throws IllegalArgumentException, IllegalAccessException { - return lowUID; - } - }); - } catch (NoSuchFieldException | SecurityException e) { - e.printStackTrace(); - } - return ps; - } - -} diff --git a/src/alfa/server/ALFAOfflineDataMap.java b/src/alfa/server/ALFAOfflineDataMap.java deleted file mode 100644 index 94b4ef0c..00000000 --- a/src/alfa/server/ALFAOfflineDataMap.java +++ /dev/null @@ -1,13 +0,0 @@ -package alfa.server; - -import PamguardMVC.PamDataBlock; -import dataMap.OfflineDataMap; - -public class ALFAOfflineDataMap extends OfflineDataMap{ - - public ALFAOfflineDataMap(ALFAServerLoader alfaServerLoader, PamDataBlock parentDataBlock) { - super(alfaServerLoader, parentDataBlock); - } - - -} diff --git a/src/alfa/server/ALFAServerLoader.java b/src/alfa/server/ALFAServerLoader.java deleted file mode 100644 index b767fcbc..00000000 --- a/src/alfa/server/ALFAServerLoader.java +++ /dev/null @@ -1,452 +0,0 @@ -package alfa.server; - -import java.awt.Window; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.sql.DriverManager; -import java.sql.ResultSet; -import java.sql.SQLException; -import java.sql.Timestamp; -import java.text.SimpleDateFormat; -import java.util.ArrayList; -import java.util.Date; -import java.util.List; -import java.util.TimeZone; - -import javax.swing.JOptionPane; -import javax.swing.JPasswordField; -import javax.swing.Timer; - -import org.postgresql.jdbc.PgConnection; - -import GPS.GpsData; -import PamController.OfflineDataStore; -import PamController.PamController; -import PamUtils.LatLong; -import PamUtils.PamCalendar; -import PamView.dialog.warn.WarnOnce; -import PamguardMVC.PamDataBlock; -import PamguardMVC.PamDataUnit; -import PamguardMVC.dataOffline.OfflineDataLoadInfo; -import PamguardMVC.debug.Debug; -import alfa.effortmonitor.AngleHistogram; -import alfa.effortmonitor.IntervalDataBlock; -import alfa.effortmonitor.IntervalDataUnit; -import dataGram.DatagramManager; -import dataMap.OfflineDataMapPoint; -import generalDatabase.SQLLogging; -import generalDatabase.SQLTypes; -import pamScrollSystem.AbstractScrollManager; -import pamScrollSystem.PamScroller; -import pamScrollSystem.ViewLoadObserver; - -/** - * Connect to the web server hosting satellite messages - * @author Jamie Macaulay - * - */ - -public class ALFAServerLoader extends SQLLogging implements OfflineDataStore{ - - private IntervalDataBlock intervalDataBlock; - - private static String password = "notneeded"; - - private ArrayList imeiNumbers; - - private int errorCount; - - private int highestId; - - private ALFAOfflineDataMap dataMap; - - private static final String dataTable = "data_manager_rawposteddata"; - - private javax.swing.Timer autoUpdateTimer; - - private PgConnection currentConnection; - - public ALFAServerLoader(IntervalDataBlock intervalDataBlock) { - super(intervalDataBlock); - this.intervalDataBlock = intervalDataBlock; - autoUpdateTimer = new Timer(15*60*1000, new ActionListener() { - - @Override - public void actionPerformed(ActionEvent e) { - autoUpdateAction(); - } - }); - } - - private PgConnection makeConnection() { - if (currentConnection != null) { - return currentConnection; - } - if (checkPassword() == false) { - return null; - } - String db_user = "alfa_db_user"; - String db_pw = "spermwhale"; - String dbName = "alfa_sw_db"; - // String conStr = "http://157.230.166.95:8000/api/raw_data_string/"; - - String driverClass = "org.postgresql.Driver"; - try { - Class.forName(driverClass); - } catch (ClassNotFoundException e) { - e.printStackTrace(); - return null; - } - - // try { - String url = "jdbc:postgresql://157.230.166.95:5432/"+dbName; - // System.out.println("Open connection " + url); - PgConnection conn = null; - try { - conn = (PgConnection) DriverManager.getConnection(url, db_user, db_pw); - } catch (SQLException e) { - WarnOnce.showWarning(PamController.getMainFrame(), "Server Error", "Unable to Connect to ALFA sperm whale database", WarnOnce.WARNING_MESSAGE); - currentConnection = null; - return null; - } - // Debug.out.println("server connection open"); - // DatabaseMetaData dbm = conn.getMetaData(); - // ResultSet tables = dbm.getTables(null, null, null, null); - return currentConnection = conn; - } - - private void closeConnection( ) { - if (currentConnection != null) { - try { - currentConnection.close(); - } catch (SQLException e) { -// e.printStackTrace(); - } - currentConnection = null; - } - } - - /** - * Called from controller to set up or disable auto updates. - * @param autoUpdates - */ - public void runAutoUpdates(boolean autoUpdates) { - autoUpdateTimer.stop(); - if (autoUpdates) { - autoUpdateTimer.start(); - checkForUpdates(true); // check immediately. - } - } - - private synchronized boolean checkForUpdates(boolean scrollAnyway) { - int newHighestId = getHighestId(); - boolean needUpdate = (newHighestId > highestId); - Debug.out.printf("Current ALFA server map highest id = %d, new highest id = %d\n", highestId, newHighestId); - if (needUpdate) { - if (dataMap != null) { - // clear existing data map - dataMap.clear(); - } - /* - * make new data map - just do the entire thing from scratch - * since there is so little data. - */ - createOfflineDataMap(PamController.getMainFrame()); - } - if (needUpdate || scrollAnyway) { - AbstractScrollManager scrollManager = AbstractScrollManager.getScrollManager(); - long lastTime = dataMap.getLastDataTime(); - if (lastTime > 0) { - Debug.out.printf("Moving ALFA display to center at %s\n", PamCalendar.formatDateTime(lastTime, true)); - // just call the center function - it will auto adjust to this becomes the last time. - scrollManager.centreDataAt(intervalDataBlock, lastTime); - } - } - - return needUpdate; - } - protected void autoUpdateAction() { - checkForUpdates(false); - } - - /** - * Check the highest id in the database - * @return - */ - public int getHighestId() { - PgConnection conn = makeConnection(); - if (conn == null) { - return 0; - } - int id = 0; - String qStr = "SELECT id FROM data_manager_rawposteddata WHERE decoded_message LIKE '%%$PGSTA%%' ORDER By Id DESC"; - try { - ResultSet dResult = conn.execSQLQuery(qStr); - if (dResult.next()) { - id = dResult.getInt(1); - } - dResult.close(); - } - - catch (SQLException e) { - e.printStackTrace(); - closeConnection(); - } - return id; - } - - public boolean loadALFAServerData(long startMillis, long endMillis) { - - - String clause = String.format("WHERE decoded_message LIKE '%%$PGSTA%%' AND datetime_sent BETWEEN '%s' AND '%s'", - PamCalendar.formatDBDateTime(startMillis, false), PamCalendar.formatDBDateTime(endMillis+5000*3600L, false)); - - String qStr = String.format("SELECT id, imei, date_received, decoded_message, raw_posted_data FROM data_manager_rawposteddata %s ORDER BY datetime_sent", clause); - - Debug.out.println(qStr); - PgConnection conn = makeConnection(); - if (conn == null) { - return false; - } - try { - ResultSet dResult = conn.execSQLQuery(qStr); - while (dResult.next()) { - int id = dResult.getInt(1); - long imei = dResult.getLong(2); - String date = dResult.getString(3); - Object dateObject = dResult.getObject(3); - String strData = dResult.getString(4); - String rawData = dResult.getString(5); - // Debug.out.printf("%d %d %s \"%s\" %s\n", id, imei, date, dateObject.toString(), strData); - IntervalDataUnit intervalDataUnit = parseDataString(strData); - if (intervalDataUnit != null) { - intervalDataUnit.setImeiNumber(imei); - intervalDataUnit.setUID(id); - - } - /* - * Try to unpack the rawPostedData to get additional information such as the - * message number. - */ - ServerRawData serverRaw = ServerRawData.unpackRawJson(rawData); - if (serverRaw != null) { - intervalDataUnit.setServerRawData(serverRaw); - } - intervalDataBlock.addPamData(intervalDataUnit); - } - dResult.close(); - // System.out.println(conn); -// conn.close(); - } catch (SQLException e) { - e.printStackTrace(); - closeConnection(); - return false; - } - - intervalDataBlock.sortData(); - // Debug.out.printf("%d data units loaded for ALFA intervals", intervalDataBlock.getUnitsCount()); - IntervalDataUnit idu = intervalDataBlock.getFirstUnit(); - if (idu != null) { - // MasterReferencePoint. - } - return true; - } - - - private IntervalDataUnit parseDataString(String strData) { - String[] parts = strData.split(","); - String stringId = parts[0]; - int version = Integer.valueOf(parts[1]); - String date = parts[2]; - String time = parts[3]; - long startMillis = parseDateTime(date, time); - double lat1 = Double.valueOf(parts[4]); - double lon1 = Double.valueOf(parts[5]); - int minutes = Integer.valueOf(parts[6]); - long endMillis = startMillis + minutes*60000; - int percActive = Integer.valueOf(parts[7]); - double lat2 = Double.valueOf(parts[8]); - double lon2 = Double.valueOf(parts[9]); - int nClickTrains = Integer.valueOf(parts[10]); - int nClicks = Integer.valueOf(parts[11]); - LatLong ll1 = new LatLong(lat1, lon1); - LatLong ll2 = new LatLong(lat2, lon2); - GpsData gps1 = new GpsData(startMillis, ll1); - GpsData gps2 = new GpsData(endMillis, ll2); - IntervalDataUnit idu = new IntervalDataUnit(startMillis, gps1); - idu.setDurationInMilliseconds(endMillis-startMillis); - idu.setActualEffort(minutes*60000); - idu.setLastGPSData(gps2); - idu.setnClickTrains(nClickTrains); - idu.setnClicks(nClicks); - int iCol = 12; - while (iCol < parts.length) { - String h = parts[iCol++]; - if (h.equals("H") == false) { - break; - } - int nH = Integer.valueOf(parts[iCol++]); - int[] hDat = new int[nH]; - for (int i = 0; i < nH; i++) { - hDat[i] = Integer.valueOf(parts[iCol++]); - } - AngleHistogram angleHist = new AngleHistogram(0, 0, Math.PI, nH); - angleHist.setData(hDat); - idu.addAngleHistogram(angleHist); - } - int nhists = idu.getAngleHistograms().size(); - if (nhists > 0) { - long histInterval = minutes / nhists * 60*1000; - for (int i = 0; i < nhists; i++) { - AngleHistogram angleHist = idu.getAngleHistogram(i); - long histStart = startMillis + i*histInterval; - angleHist.setStartTime(histStart); - } - } - return idu; - } - - private long parseDateTime(String date, String time) {try { - SimpleDateFormat df = new SimpleDateFormat("yyyyMMdd_hhmmss"); - df.setTimeZone(TimeZone.getTimeZone("UTC")); - Date d = df.parse("20"+date+"_"+time); //throws ParseException if no match - long millis = d.getTime(); - // Debug.out.printf("%s %s parses as %s\n", date, time, PamCalendar.formatDateTime(millis)); - return millis; - } - catch (java.text.ParseException ex) { - //No problem, just go on to next format to try. - } - return 0; - } - - private boolean checkPassword() { - if (password != null) { - return true; - } - JPasswordField pwd = new JPasswordField(10); - int action = JOptionPane.showConfirmDialog(null, pwd,"Enter server Password",JOptionPane.OK_CANCEL_OPTION); - if(action < 0) { - return false; - } - char[] pw = pwd.getPassword(); - if (pw == null || pw.length == 0) { - return false; - } - password = new String(pw); - // System.out.println(password); - return true; - } - - public List getImeiList() { - if (imeiNumbers == null) { - imeiNumbers = makeImeiList(); - } - return imeiNumbers; - } - - private ArrayList makeImeiList() { - PgConnection conn = makeConnection(); - if (conn == null) { - return null; - } - imeiNumbers = new ArrayList<>(); - String qStr = "SELECT DISTINCT imei FROM data_manager_rawposteddata"; - try { - ResultSet dResult = conn.execSQLQuery(qStr); - while (dResult.next()) { - Long id = dResult.getLong(1); - imeiNumbers.add(id); - } -// conn.close(); - } catch (SQLException e) { - e.printStackTrace(); - return null; - } - return imeiNumbers; - } - - @Override - public void setTableData(SQLTypes sqlTypes, PamDataUnit pamDataUnit) { - // TODO Auto-generated method stub - - } - @Override - public synchronized void createOfflineDataMap(Window parentFrame) { - PgConnection conn = makeConnection(); - if (dataMap == null) { - dataMap = new ALFAOfflineDataMap(this, intervalDataBlock); - intervalDataBlock.addOfflineDataMap(dataMap); - } - ALFADataMapPoint admp = null; - long mapInterval = 3600L*1L*1000L; - if (conn == null) { - return; - } - long wantedIMEI = 300234068339920L; - String selStr = String.format("Select id, datetime_sent, imei FROM %s WHERE decoded_message LIKE '%%$PGSTA%%' ORDER BY datetime_sent", dataTable); -// String selStr = String.format("Select id, utc, imei FROM %s WHERE decoded_message LIKE '%%$PGSTA%%' ORDER BY datetime_sent", dataTable); - // String selStr = String.format("Select id, datetime_sent FROM %s ORDER BY datetime_sent", dataTable); - // Debug.out.println(selStr); - highestId = 0; - try { - ResultSet dResult = conn.execSQLQuery(selStr); - while (dResult.next()) { - int id = dResult.getInt(1); - highestId = Math.max(id, highestId); - Timestamp dateObject = (Timestamp) dResult.getObject(2); - // long millis = SQLTypes.millisFromTimeStamp(dateObject); - long millis = dateObject.getTime()+3600000L; - long imei = dResult.getLong(3); - if (imei != wantedIMEI) continue; - // PamCalendar. - // System.out.println(dateObject + " " + PamCalendar.formatDateTime(millis)); - if (admp == null || millis-admp.getStartTime() > mapInterval) { - admp = new ALFADataMapPoint(millis, millis, 1, 0); - admp.setLowestUID((long) id); - dataMap.addDataPoint(admp); - } - else { - admp.setNDatas(admp.getNDatas()+1); - admp.setHighestUID((long) id); - admp.setEndTime(millis); - } - } - dResult.close(); -// conn.close(); - } catch (SQLException e) { - e.printStackTrace(); - return ; - } - dataMap.sortRanges(); - } - - @Override - public String getDataSourceName() { - return "ALFA Server"; - } - - @Override - public boolean loadData(PamDataBlock dataBlock, OfflineDataLoadInfo offlineDataLoadInfo, - ViewLoadObserver loadObserver) { - return loadALFAServerData(offlineDataLoadInfo.getStartMillis(), offlineDataLoadInfo.getEndMillis()); - } - - @Override - public boolean saveData(PamDataBlock dataBlock) { - // TODO Auto-generated method stub - return false; - } - - @Override - public boolean rewriteIndexFile(PamDataBlock dataBlock, OfflineDataMapPoint dmp) { - // TODO Auto-generated method stub - return false; - } - - @Override - public DatagramManager getDatagramManager() { - // TODO Auto-generated method stub - return null; - } -} diff --git a/src/alfa/server/SIDSCreator.java b/src/alfa/server/SIDSCreator.java deleted file mode 100644 index 2ee31f3a..00000000 --- a/src/alfa/server/SIDSCreator.java +++ /dev/null @@ -1,28 +0,0 @@ -package alfa.server; - -import PamguardMVC.PamDataBlock; -import PamguardMVC.dataSelector.DataSelectParams; -import PamguardMVC.dataSelector.DataSelector; -import PamguardMVC.dataSelector.DataSelectorCreator; - -public class SIDSCreator extends DataSelectorCreator { - - private ServerIntervalDataBlock serverIntervalDataBlock; - - public SIDSCreator(ServerIntervalDataBlock serverIntervalDataBlock) { - super(serverIntervalDataBlock); - this.serverIntervalDataBlock = serverIntervalDataBlock; - } - - @Override - public DataSelector createDataSelector(String selectorName, boolean allowScores, String selectorType) { - // TODO Auto-generated method stub - return new ServerIntervalDataSelector(serverIntervalDataBlock, selectorName); - } - - @Override - public DataSelectParams createNewParams(String name) { - return new SIDSParams(); - } - -} diff --git a/src/alfa/server/SIDSDialogPanel.java b/src/alfa/server/SIDSDialogPanel.java deleted file mode 100644 index 4578e236..00000000 --- a/src/alfa/server/SIDSDialogPanel.java +++ /dev/null @@ -1,107 +0,0 @@ -package alfa.server; - -import java.awt.GridBagConstraints; -import java.awt.GridBagLayout; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.util.List; - -import javax.swing.ButtonGroup; -import javax.swing.JComboBox; -import javax.swing.JComponent; -import javax.swing.JPanel; -import javax.swing.JRadioButton; -import javax.swing.border.TitledBorder; - -import PamView.dialog.PamDialog; -import PamView.dialog.PamDialogPanel; -import PamView.dialog.PamGridBagContraints; - -public class SIDSDialogPanel implements PamDialogPanel { - - private ServerIntervalDataSelector sids; - - private JPanel mainPanel; - - private JRadioButton showAll, showSystem; - private JComboBox systemList; - - private List imeiList; - - public SIDSDialogPanel(ServerIntervalDataSelector sids) { - this.sids = sids; - mainPanel = new JPanel(new GridBagLayout()); - GridBagConstraints c = new PamGridBagContraints(); - mainPanel.setBorder(new TitledBorder("Online ALFA data selection")); - showAll = new JRadioButton("Show all systems"); - showSystem = new JRadioButton("Show only the selected system data"); - systemList = new JComboBox<>(); - ButtonGroup bg = new ButtonGroup(); - bg.add(showAll); - bg.add(showSystem); - mainPanel.add(showAll, c); - c.gridy++; - mainPanel.add(showSystem, c); - c.gridy++; - mainPanel.add(systemList, c); - showAll.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - enableControls(); - } - }); - showSystem.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - enableControls(); - } - }); - imeiList = sids.getServerDataBlock().getImeiList(); - if (imeiList != null) { - for (Long imei : imeiList) { - systemList.addItem(imei); - } - } - } - - protected void enableControls() { - systemList.setEnabled(showSystem.isSelected()); - if (imeiList == null || imeiList.size() == 0) { - systemList.setEnabled(false); - showSystem.setEnabled(false); - systemList.setToolTipText("No system data available from online database"); - } - } - - @Override - public JComponent getDialogComponent() { - return mainPanel; - } - - @Override - public void setParams() { - SIDSParams params = sids.getParams(); - showAll.setSelected(params.showAll); - showSystem.setSelected(params.showAll == false); - if (params.selectedSystemId != null) { - systemList.setSelectedItem(params.selectedSystemId); - } - } - - @Override - public boolean getParams() { - SIDSParams params = sids.getParams(); - params.showAll = showAll.isSelected(); - if (!params.showAll) { - Long selVal = (Long) systemList.getSelectedItem(); - if (selVal == null) { - return PamDialog.showWarning(null, "Error", "You must select a valid system from the drop down list"); - } - else { - params.selectedSystemId = selVal; - } - } - return true; - } - -} diff --git a/src/alfa/server/SIDSParams.java b/src/alfa/server/SIDSParams.java deleted file mode 100644 index 58695b87..00000000 --- a/src/alfa/server/SIDSParams.java +++ /dev/null @@ -1,48 +0,0 @@ -package alfa.server; - -import java.io.Serializable; -import java.lang.reflect.Field; - -import PamModel.parametermanager.ManagedParameters; -import PamModel.parametermanager.PamParameterSet; -import PamModel.parametermanager.PrivatePamParameterData; -import PamguardMVC.dataSelector.DataSelectParams; - -public class SIDSParams extends DataSelectParams implements Serializable, Cloneable, ManagedParameters { - - public static final long serialVersionUID = 1L; - - protected boolean showAll = true; - - protected Long selectedSystemId = null; - - @Override - public PamParameterSet getParameterSet() { - PamParameterSet ps = PamParameterSet.autoGenerate(this); - try { - Field field = this.getClass().getDeclaredField("showAll"); - ps.put(new PrivatePamParameterData(this, field) { - @Override - public Object getData() throws IllegalArgumentException, IllegalAccessException { - return showAll; - } - }); - } catch (NoSuchFieldException | SecurityException e) { - e.printStackTrace(); - } - try { - Field field = this.getClass().getDeclaredField("selectedSystemId"); - ps.put(new PrivatePamParameterData(this, field) { - @Override - public Object getData() throws IllegalArgumentException, IllegalAccessException { - return selectedSystemId; - } - }); - } catch (NoSuchFieldException | SecurityException e) { - e.printStackTrace(); - } - return ps; - } - - -} diff --git a/src/alfa/server/ServerIntervalDataBlock.java b/src/alfa/server/ServerIntervalDataBlock.java deleted file mode 100644 index b783f0ab..00000000 --- a/src/alfa/server/ServerIntervalDataBlock.java +++ /dev/null @@ -1,56 +0,0 @@ -package alfa.server; - -import java.util.List; - -import PamController.PamController; -import PamguardMVC.PamProcess; -import PamguardMVC.dataOffline.OfflineDataLoadInfo; -import PamguardMVC.dataSelector.DataSelectorCreator; -import alfa.effortmonitor.IntervalDataBlock; -import pamScrollSystem.ViewLoadObserver; - -public class ServerIntervalDataBlock extends IntervalDataBlock { - - private ALFAServerLoader alfaServerLoader; - - private SIDSCreator sidsCreator; - - public ServerIntervalDataBlock(PamProcess parentProcess, String name) { - super(parentProcess, name); - alfaServerLoader = new ALFAServerLoader(this); - sidsCreator = new SIDSCreator(this); - alfaServerLoader.createOfflineDataMap(PamController.getMainFrame()); - } - - @Override - public boolean loadViewerData(OfflineDataLoadInfo offlineDataLoadInfo, ViewLoadObserver loadObserver) { - this.setCurrentViewDataStart(offlineDataLoadInfo.getStartMillis()); - this.setCurrentViewDataEnd(offlineDataLoadInfo.getEndMillis()); - return loadOnlineDatabaseData(offlineDataLoadInfo, loadObserver); - } - - private boolean loadOnlineDatabaseData(OfflineDataLoadInfo offlineDataLoadInfo, ViewLoadObserver loadObserver) { -// if (needViewerDataLoad(offlineDataLoadInfo) == false) { -// return true; -// } - clearAll(); - return alfaServerLoader.loadALFAServerData(offlineDataLoadInfo.getStartMillis(), offlineDataLoadInfo.getEndMillis()); - } - - /** - * @return the alfaServerLoader - */ - public ALFAServerLoader getAlfaServerLoader() { - return alfaServerLoader; - } - - public List getImeiList() { - return alfaServerLoader.getImeiList(); - } - - @Override - public DataSelectorCreator getDataSelectCreator() { - return sidsCreator; - } - -} diff --git a/src/alfa/server/ServerIntervalDataSelector.java b/src/alfa/server/ServerIntervalDataSelector.java deleted file mode 100644 index e2d50a46..00000000 --- a/src/alfa/server/ServerIntervalDataSelector.java +++ /dev/null @@ -1,68 +0,0 @@ -package alfa.server; - -import PamView.dialog.PamDialogPanel; -import PamguardMVC.PamDataBlock; -import PamguardMVC.PamDataUnit; -import PamguardMVC.dataSelector.DataSelectParams; -import PamguardMVC.dataSelector.DataSelector; -import alfa.effortmonitor.IntervalDataUnit; -import pamViewFX.fxSettingsPanes.DynamicSettingsPane; - -public class ServerIntervalDataSelector extends DataSelector { - - private ServerIntervalDataBlock serverDataBlock; - - private SIDSParams sidsParams = new SIDSParams(); - - public ServerIntervalDataSelector(ServerIntervalDataBlock serverDataBlock, String selectorName) { - super(serverDataBlock, selectorName, false); - this.serverDataBlock = serverDataBlock; - } - - @Override - public void setParams(DataSelectParams dataSelectParams) { - if (dataSelectParams instanceof SIDSParams) { - this.sidsParams = (SIDSParams) dataSelectParams; - } - } - - @Override - public SIDSParams getParams() { - return sidsParams; - } - - @Override - public PamDialogPanel getDialogPanel() { - return new SIDSDialogPanel(this); - } - - @Override - public DynamicSettingsPane getDialogPaneFX() { - // TODO Auto-generated method stub - return null; - } - - @Override - public double scoreData(PamDataUnit pamDataUnit) { - if (sidsParams.showAll) { - return 1; - } - IntervalDataUnit idu = (IntervalDataUnit) pamDataUnit; - Long imei = idu.getImeiNumber(); - if (imei == null) { - return 0; - } - return imei.equals(sidsParams.selectedSystemId) ? 1 : 0; - } - - /** - * @return the serverDataBlock - */ - protected ServerIntervalDataBlock getServerDataBlock() { - return serverDataBlock; - } - - - - -} diff --git a/src/alfa/server/ServerRawData.java b/src/alfa/server/ServerRawData.java deleted file mode 100644 index 08e11f6c..00000000 --- a/src/alfa/server/ServerRawData.java +++ /dev/null @@ -1,53 +0,0 @@ -package alfa.server; - -import java.io.ByteArrayInputStream; -import java.io.IOException; - -import com.fasterxml.jackson.core.JsonFactory; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.node.ArrayNode; - -import PamguardMVC.debug.Debug; - -/** - * Class to handle the raw data string from the server, which contains EVERYTHING as json. - * Example string is {"imei": "300234068339920", "device_type": "ROCKBLOCK", "serial": "16945", "momsn": "27", "transmit_time": "19-06-21 19:28:40", "iridium_latitude": "57.9165", - * "iridium_longitude": "-148.9899", "iridium_cep": "4.0", "iridium_session_status": "0", "data": - * "2450475354412c312c3139303632312c3138323833332c35372e383838332c2d3134392e323034342c36302c3130302c35372e383936362c2d3134392e303136342c312c31302c482c342c302c302c302c312c482c342c302c302c302c302c482c342c302c302c302c302c482c342c302c302c302c30"} - * @author dg50 - * - */ -public class ServerRawData { - - private Integer momsn; - - private ServerRawData(Integer momsn) { - this.momsn = momsn; - } - - public static ServerRawData unpackRawJson(String jString) { - - JsonFactory jf = new JsonFactory(); - Integer momsn; - try { - ObjectMapper om = new ObjectMapper(); - JsonNode jTree = om.readTree(new ByteArrayInputStream(jString.getBytes())); - JsonNode jNode = jTree.findValue("momsn"); - momsn = jNode.asInt(); - } catch (IOException e) { - Debug.out.printf("Interval data logging unable to interpret histogram string: %s", jString); - return null; - } - - return new ServerRawData(momsn); - } - - /** - * @return the momsn - */ - public Integer getMOMSN() { - return momsn; - } - -} diff --git a/src/alfa/server/ServerTest.java b/src/alfa/server/ServerTest.java deleted file mode 100644 index 35ad491f..00000000 --- a/src/alfa/server/ServerTest.java +++ /dev/null @@ -1,119 +0,0 @@ -package alfa.server; - -import java.sql.DatabaseMetaData; -import java.sql.DriverManager; -import java.sql.ResultSet; -import java.sql.SQLException; - -import org.postgresql.jdbc.PgConnection; - -public class ServerTest { - - public ServerTest() { - // TODO Auto-generated constructor stub - } - - public static void main(String[] args) { - ServerTest st = new ServerTest(); - st.run(); - - } - - private void run() { - /* - * https://jdbc.postgresql.org/documentation/head/connect.html - */ - // String ip_address = "157.230.166.95"; - String db_user = "alfa_db_user"; - String db_pw = "spermwhale"; - String dbName = "alfa_sw_db"; - // String conStr = "http://157.230.166.95:8000/api/raw_data_string/"; - - String driverClass = "org.postgresql.Driver"; - try { - Class.forName(driverClass); - } catch (ClassNotFoundException e) { - e.printStackTrace(); - return; - } - - try { - String url = "jdbc:postgresql://157.230.166.95:5432/"+dbName; - System.out.println("Open connection " + url); - PgConnection conn = (PgConnection) DriverManager.getConnection(url, db_user, db_pw); - System.out.println("connection open"); - DatabaseMetaData dbm = conn.getMetaData(); - ResultSet tables = dbm.getTables(null, null, null, null); - - // if (tables.next()){ - // haveTable = true; - // } - // if (databaseControll.databaseSystem.getSystemName().equals(OOoDBSystem.SYSTEMNAME)){ - String dataTable = "data_manager_rawposteddata"; - ResultSet oodbTables = dbm.getTables(null, null, dataTable, null); - - while (oodbTables.next()){ - String tableName = oodbTables.getString(3).trim(); - // if (tableName.startsWith("pg_")) { - // continue; - // } - // System.out.println("Found table named " + oodbTables.getString(3).trim()); - - // if (oodbTables.getString(3).trim().equalsIgnoreCase(tableDef.getTableName())){ - // // System.out.println("Table Found: "+oodbTables.getString(3)); - // tableDef.setTableName(oodbTables.getString(3).trim().toUpperCase()); - // haveTable = true; - // } - - // try the table data_manager_rawposteddata_id_seq to see what's in it ... - ResultSet columns = dbm.getColumns(null, null, tableName, null); - int ncol = 0; - boolean interesting = false; - while (columns.next()) { - - // now check the format - String colName = columns.getString(4); - int colType = columns.getInt(5); -// if (colName.toLowerCase().contains("iridium_latitude")) { - System.out.printf("Table %s has column %s type %d\n",tableName, colName, colType); - interesting = true; -// } - // // if (colType == tableItem.getSqlType()) return true; - // // //String strColType = columns.getString(6); - // if (columnName.equalsIgnoreCase(colName)) { - // haveColumn = true; - // } - ncol++; - } - if (interesting) - System.out.printf("found %d columns in table %s\n", ncol, tableName); - - // System.out.println("Table Not Found: "+tableDef.getTableName().toUpperCase()); - // } - } - tables.close(); - -// ResultSet dResult = conn.execSQLQuery("SELECT id, imei, date_received, decoded_message, datetime_sent, raw_posted_data, hist_string FROM data_manager_rawposteddata WHERE decoded_message LIKE '%$PGSTA%' ORDER BY id"); - ResultSet dResult = conn.execSQLQuery("SELECT id, imei, date_received, decoded_message, datetime_sent, raw_posted_data, " - + "hist_string FROM data_manager_rawposteddata ORDER BY raw_posted_data"); - while (dResult.next()) { - int id = dResult.getInt(1); - long imei = dResult.getLong(2); - String date = dResult.getString(3); - Object dateObject = dResult.getObject(5); - String strData = dResult.getString(4); - String rawData = dResult.getString(6); - String histString = dResult.getString(7); - if (dateObject == null) dateObject = "no Date"; - System.out.println(rawData); - System.out.printf("%d %d %s \"%s\" %s\n", id, imei, date, dateObject.toString(), strData); - } - dResult.close(); - System.out.println(conn); - conn.close(); - } catch (SQLException e) { - e.printStackTrace(); - } - } - -} diff --git a/src/alfa/status/CreateModuleAction.java b/src/alfa/status/CreateModuleAction.java deleted file mode 100644 index c75ae45e..00000000 --- a/src/alfa/status/CreateModuleAction.java +++ /dev/null @@ -1,37 +0,0 @@ -package alfa.status; - -import PamController.PamControlledUnit; -import PamController.PamController; -import PamController.status.ModuleStatus; -import PamController.status.RemedialAction; -import PamModel.PamModuleInfo; -import PamView.PamGui; -import alfa.ControlledModuleInfo; - -public class CreateModuleAction implements RemedialAction { - - private ControlledModuleInfo moduleInfo; - - public CreateModuleAction(ControlledModuleInfo moduleInfo) { - this.moduleInfo = moduleInfo; - } - - @Override - public String getInfo() { - String info = "Create module " + moduleInfo.getDefaultName(); - return info; - } - - @Override - public ModuleStatus takeAction(ModuleStatus currentStatus) { - PamController pamController = PamController.getInstance(); - PamControlledUnit newUnit = pamController.addModule(moduleInfo.getPamModuleInfo(), moduleInfo.getDefaultName()); - if (newUnit == null) { - return null; - } - else { - return newUnit.getModuleStatus(); - } - } - -} diff --git a/src/alfa/status/StatusMonitor.java b/src/alfa/status/StatusMonitor.java deleted file mode 100644 index 9897e983..00000000 --- a/src/alfa/status/StatusMonitor.java +++ /dev/null @@ -1,252 +0,0 @@ -package alfa.status; - -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.util.ArrayList; - -import javax.swing.Timer; - -import PamController.PamControlledUnit; -import PamController.PamController; -import PamController.status.ModuleStatus; -import PamModel.PamModuleInfo; -import alfa.ALFAControl; -import alfa.ControlledModuleInfo; -import alfa.clickmonitor.eventaggregator.ClickEventAggregate; -import detectiongrouplocaliser.DetectionGroupDataUnit; - -/** - * Status monitor, will scan a list of modules for - * @author dg50 - * - */ -public class StatusMonitor { - - private boolean monitorAll; - - private ArrayList modulesList; - - private int monitorInterval = 2; // monitor interval in seconds. - - private Timer checkTimer; - - private ModuleStatus[] moduleStatus; - - private boolean[] moduleExists; - - private ArrayList statusObservers = new ArrayList<>(); - - /** - * @param monitorAll - */ - public StatusMonitor(boolean monitorAll) { - this(monitorAll, null); - } - - /** - * @param monitorAll - * @param essentialModulesList - */ - public StatusMonitor(boolean monitorAll, ArrayList essentialModulesList) { - super(); - this.monitorAll = monitorAll; - this.modulesList = essentialModulesList; - - checkTimer = new Timer(2000, new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - checkTimerActions(); - } - }); - checkTimer.start(); - } - protected void checkTimerActions() { - checkAllModules(); - } - - private synchronized void checkAllModules() { - /** - * Get some single status object array for all of the modules. - */ - checkStatusAllocation(); - - int index = 0; - for (ControlledModuleInfo moduleInfo:modulesList) { - checkModule(moduleInfo, index++); - } - - notifyStatusUpdate(); - } - - private synchronized void checkStatusAllocation() { - int n = modulesList.size(); - if (moduleStatus == null || moduleStatus.length != n) { - moduleStatus = new ModuleStatus[n]; - } - if (moduleExists == null || moduleExists.length != n) { - moduleExists = new boolean[n]; - } - } - - private Integer checkModule(ControlledModuleInfo moduleInfo, int index) { - PamController pamController = PamController.getInstance(); - if (pamController == null) return null; - PamControlledUnit pamControlledUnit = pamController.findControlledUnit(moduleInfo.getPamModuleInfo().getModuleClass(), moduleInfo.getFixedModuleName()); - moduleExists[index] = (pamControlledUnit != null); - if (moduleExists[index]) { - moduleStatus[index] = pamControlledUnit.getModuleStatus(); - if (moduleStatus[index] != null) { - moduleStatus[index].setName(pamControlledUnit.getUnitName()); - return moduleStatus[index].getStatus(); - } - else { - return null; - } - } - else { - moduleStatus[index] = new ModuleStatus(ModuleStatus.STATUS_ERROR, "Module not present"); - moduleStatus[index].setRemedialAction(new CreateModuleAction(moduleInfo)); - return moduleStatus[index].getStatus(); - } -// sayModuleStatus(index); - } - - private void sayModuleStatus(int index) { - ControlledModuleInfo moduleInfo = modulesList.get(index); - if (moduleExists[index]) { - System.out.printf("Module %s Status %s\n", moduleInfo.getDefaultName(), moduleStatus[index]); - } - else { - System.out.printf("Module %s is not present\n", moduleInfo.getDefaultName()); - } - } - - /** - * Add an observer to get status updates. - * @param statusObserver Status observer - */ - public void addObserver(StatusObserver statusObserver) { - if (statusObservers.contains(statusObserver) == false) { - statusObservers.add(statusObserver); - } - } - - /** - * Remove a status update observer - * @param statusObserver to remove - * @return true if the observer existed in the list - */ - public boolean removeObserver(StatusObserver statusObserver) { - return statusObservers.remove(statusObserver); - } - - /** - * Notify all observers that the status has changed. - */ - private void notifyStatusUpdate() { - for (StatusObserver obs:statusObservers) { - obs.newStatus(); - } - } - /** - * @return monitorAll flag to monitor all Modules in PAMGuard. - */ - public boolean isMonitorAll() { - return monitorAll; - } - - /** - * @param monitorAll set flag to monitor all Modules in PAMGuard - */ - public void setMonitorAll(boolean monitorAll) { - this.monitorAll = monitorAll; - } - - /** - * Set list of modules to monitor - * @return the modulesList - */ - public ArrayList getModulesList() { - return modulesList; - } - - /** - * List of modules to monitor - * @param modulesList the modulesList to set - */ - public void setModulesList(ArrayList modulesList) { - this.modulesList = modulesList; - } - - /** - * Monitor interval in seconds. - * @return the monitorInterval - */ - public int getMonitorInterval() { - return monitorInterval; - } - - /** - * interval in seconds, set to zero for no timed monitoring - * @param monitorInterval the monitorInterval to set - */ - public void setMonitorInterval(int monitorInterval) { - this.monitorInterval = monitorInterval; - if (monitorInterval <= 0) { - checkTimer.stop(); - } - else { - checkTimer.setDelay(monitorInterval*1000); - checkTimer.start(); - } - } - - /** - * @return the moduleStatus of all modules monitored - */ - public ModuleStatus[] getModuleStatus() { - return moduleStatus; - } - - /** - * @return the moduleExists existence of all modules monitored - */ - public boolean[] getModuleExists() { - return moduleExists; - } - - public synchronized ModuleStatus getSummaryStatus() { - if (moduleStatus == null || moduleStatus.length == 0) { - return new ModuleStatus(ModuleStatus.STATUS_ERROR, "No PAM modules present"); - } - int maxStatus = 0; - String statusString = null; - int n = Math.min(moduleStatus.length, modulesList.size()); - for (int i = 0; i < n; i++) { - if (modulesList.get(i).getPamModuleInfo().getClassName().equals(ALFAControl.class.getName())) { - continue; - } - ModuleStatus ms = moduleStatus[i]; - if (ms == null) continue; - maxStatus = Math.max(maxStatus, ms.getStatus()); - if (ms.getStatus() > 0) { - String sBit = String.format("%s: %s %s", ModuleStatus.getStatusString(ms.getStatus()), - modulesList.get(i).getDefaultName(), ms.getMessage()); - - if (statusString == null) { - statusString = "

" + sBit; - } - else { - statusString += "

" + sBit; - } - } - } -// if (statusString != null) { -// statusString += ""; -// } - return new ModuleStatus(maxStatus, statusString); - } - - - -} diff --git a/src/alfa/status/StatusObserver.java b/src/alfa/status/StatusObserver.java deleted file mode 100644 index ef505d1c..00000000 --- a/src/alfa/status/StatusObserver.java +++ /dev/null @@ -1,9 +0,0 @@ -package alfa.status; - -public interface StatusObserver { - - public void newModuleList(); - - public void newStatus(); - -} diff --git a/src/alfa/status/swing/StatusButton.java b/src/alfa/status/swing/StatusButton.java deleted file mode 100644 index b3dd05ca..00000000 --- a/src/alfa/status/swing/StatusButton.java +++ /dev/null @@ -1,235 +0,0 @@ -package alfa.status.swing; - -import java.awt.BorderLayout; -import java.awt.Color; -import java.awt.Dimension; -import java.awt.FlowLayout; -import java.awt.Graphics; -import java.awt.Point; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.awt.event.MouseAdapter; -import java.awt.event.MouseEvent; - -import javax.swing.JComponent; -import javax.swing.JLabel; -import javax.swing.JMenuItem; -import javax.swing.JPopupMenu; -import javax.swing.border.TitledBorder; - - -import PamController.status.ModuleStatus; -import PamController.status.RemedialAction; -import PamView.PamColors; -import PamView.PamColors.PamColor; -import PamView.PamSymbol; -import PamView.PamSymbolType; -import PamView.dialog.PamLabel; -import PamView.panel.PamPanel; - -public class StatusButton { - - protected JLabel textOutput; - - private DIYButton diyButton; - - protected PamPanel mainPanel; - - private static final int DEFULATSIZE = 30; - - private PamSymbol colouredIcon = new PamSymbol(PamSymbolType.SYMBOL_CIRCLE, 20, 20, true, Color.BLUE, Color.BLUE); - - protected PamLabel nameLabel; - - protected ModuleStatus latestStatus; - - protected Color[] buttonColours = {Color.GREEN, Color.ORANGE, Color.RED}; - - public StatusButton(String name) { - this(name, new Dimension(DEFULATSIZE, DEFULATSIZE)); - } - - public StatusButton(String name, Dimension size) { - this.mainPanel = createButton(name, size); - } - - protected PamPanel createButton(String name, Dimension size) { - mainPanel = new PamPanel(PamColor.BORDER); -// simpleButton = new JButton(colouredIcon); -// Border bb = simpleButton.getBorder(); -// System.out.println(bb); - textOutput = new PamLabel("Status information"); - diyButton = new DIYButton(size); - nameLabel = new PamLabel(name + " ", JLabel.RIGHT); -// if (false) { -// mainPanel.setBorder(new TitledBorder(name)); -// mainPanel.setLayout(new FlowLayout(FlowLayout.LEFT)); -// mainPanel.add(diyButton); -// mainPanel.add(textOutput); -// } -// else { - mainPanel.setLayout(new BorderLayout()); - mainPanel.add(nameLabel); - mainPanel.add(diyButton, BorderLayout.EAST); -// mainPanel.add(textOutput); -// } - diyButton.addMouseListener(new StatusMouse()); - - return mainPanel; - } - - /** - * Get the main component. - * @return the main component. - */ - public JComponent getComponent() { - return mainPanel; - } - - /** - * Set the colour for a particular state - * @param state 0 1 or 2 - * @param color colour to display. - */ - public void setColor(int state, Color color) { - if (state >= buttonColours.length) { - return; - } - buttonColours[state] = color; - } - - private class DIYButton extends PamPanel { - - public DIYButton(Dimension d) { - super(PamColor.BORDER); - setPreferredSize(d); - } - - /** - * - */ - public DIYButton() { - this(new Dimension(DEFULATSIZE, DEFULATSIZE)); - } - - /* (non-Javadoc) - * @see javax.swing.JComponent#paintComponent(java.awt.Graphics) - */ - @Override - protected void paintComponent(Graphics g) { - super.paintComponent(g); - double h = g.getClipBounds().getHeight(); - double w = g.getClipBounds().getWidth(); - int h2 = getHeight(); - int sz = (int) Math.min(h, getWidth()); - int ww = sz - 6; - colouredIcon.draw(g, new Point(getWidth()/2-1, getHeight()/2-1), ww, ww); - } - - - - - } - - public void setName(String name) { - nameLabel.setText(name + " "); - } - - /** - * Update the status of this control, tooltips, colour, etc - * all depend on the status - * @param b - * @param moduleStatus - */ - public synchronized void setStatus(boolean exists, ModuleStatus moduleStatus) { - String txt; - Color col = null; - if (moduleStatus != null) { - txt = moduleStatus.toString(); - int stat = Math.max(0, Math.min(moduleStatus.getStatus(), buttonColours.length-1)); - col = buttonColours[stat]; -// switch (moduleStatus.getStatus()) { -// case 0: -// col = Color.GREEN; -// break; -// case 1: -// col = Color.ORANGE; -// break; -// default: -// col = Color.RED; -// break; -// } - if (moduleStatus.getName() != null) { - nameLabel.setText(moduleStatus.getName() + " "); - } - } - else if (exists == false) { - txt = "not present\n"; - col = Color.RED; - } - else { - txt = "No status data"; - col = Color.ORANGE; - } - - latestStatus = moduleStatus; - - textOutput.setText(txt); - diyButton.setToolTipText(""+txt); - if (col == null) { -// simpleButton.setIcon(null); - } - else { - colouredIcon.setFillColor(col); - colouredIcon.setLineThickness(1); - colouredIcon.setLineColor(PamColors.getInstance().getForegroudColor(PamColor.AXIS)); -// simpleButton.setIcon(colouredIcon); - } - diyButton.repaint(); - } - - private class StatusMouse extends MouseAdapter { - - @Override - public void mousePressed(MouseEvent e) { - if (e.getButton() == MouseEvent.BUTTON1) { - showRemedialMenu(e); - } - } - - } - - public synchronized void showRemedialMenu(MouseEvent e) { - if (latestStatus == null) { - return; - } - RemedialAction remedialAction = latestStatus.getRemedialAction(); - if (remedialAction == null) { - return; - } - JPopupMenu popMenu = new JPopupMenu(remedialAction.getInfo()); - JMenuItem menuItem = new JMenuItem("Fix problem: " + remedialAction.getInfo()); - menuItem.addActionListener(new RemedialActionListener(latestStatus, remedialAction)); - popMenu.add(menuItem); - - popMenu.show(e.getComponent(), e.getX(), e.getY()); - } - - private class RemedialActionListener implements ActionListener { - - private RemedialAction RemedialAction; - private ModuleStatus currentStatus; - - public RemedialActionListener(ModuleStatus currentStatus, RemedialAction remedialAction) { - super(); - this.currentStatus = currentStatus; - RemedialAction = remedialAction; - } - @Override - public void actionPerformed(ActionEvent e) { - RemedialAction.takeAction(currentStatus); - } - - } - -} diff --git a/src/alfa/status/swing/StatusButtonSquare.java b/src/alfa/status/swing/StatusButtonSquare.java deleted file mode 100644 index b298c3c4..00000000 --- a/src/alfa/status/swing/StatusButtonSquare.java +++ /dev/null @@ -1,133 +0,0 @@ -package alfa.status.swing; - -import java.awt.BorderLayout; -import java.awt.Color; -import java.awt.Dimension; -import java.awt.Font; - -import javax.swing.SwingConstants; - -import PamController.status.ModuleStatus; -import PamView.dialog.PamLabel; -import PamView.panel.PamPanel; - -/** - * Create a square status button. - * - * @author Jamie Macaulay - * - */ -public class StatusButtonSquare extends StatusButton { - - /** - * Label for the panel - */ - private PamLabel label; - - /** - * Holder panel. - */ - private PamPanel holder; - - /** - * The name text. - */ - private String name; - - private Dimension prefDim; - - /** - * Constructor for the status button - * @param name - the name of the button - * @param buttonsize - */ - public StatusButtonSquare(String name, Dimension size) { - super(name); - this.name=name; - } - - @Override - protected PamPanel createButton(String name, Dimension size) { - - label = new PamLabel(name, SwingConstants.CENTER); - label.setSize(size); - label.setFont(new Font(null, Font.BOLD, 16)); - label.setOpaque(true); - - holder = new PamPanel(new BorderLayout()); - holder.add(label, BorderLayout.CENTER); - holder.setPreferredSize(size); - holder.setOpaque(true); - - return holder; - } - - @Override - public synchronized void setStatus(boolean exists, ModuleStatus moduleStatus) { - String txt; - Color col = null; -// Debug.out.println("Hello STATUS BUTTON I am: " +moduleStatus.getStatus()); - if (moduleStatus != null) { - txt = moduleStatus.toString(); - int stat = Math.max(0, Math.min(moduleStatus.getStatus(), buttonColours.length-1)); - col = buttonColours[stat]; -// Debug.out.println("Hello STATUS BUTTON Col: " +col + " stat: " +stat); - - // switch (moduleStatus.getStatus()) { - // case 0: - // col = Color.GREEN; - // break; - // case 1: - // col = Color.ORANGE; - // break; - // default: - // col = Color.RED; - // break; - // } - if (moduleStatus.getName() != null) { - nameLabel.setText(moduleStatus.getName() + " "); - } - } - else if (exists == false) { - txt = "not present\n"; - col = Color.RED; - } - else { - txt = "No status data"; - col = Color.ORANGE; - } - - latestStatus = moduleStatus; - - switch (moduleStatus.getStatus()) { - case ModuleStatus.STATUS_OK: - label.setText(name +" OK"); - break; - case ModuleStatus.STATUS_WARNING : - label.setText(name +" WARNING"); - break; - case ModuleStatus.STATUS_ERROR : - label.setText(name +" ERROR"); - break; - } - - label.setToolTipText(""+txt); - if (col == null) { - // simpleButton.setIcon(null); - label.setBackground(Color.RED); - holder.setBackground(Color.RED); - } - else { - label.setText(txt); - label.setBackground(col); - holder.setBackground(col); - } - - label.setOpaque(true); - holder.setOpaque(true); - label.validate(); - label.repaint(); - - } - -} diff --git a/src/alfa/status/swing/StatusPanel.java b/src/alfa/status/swing/StatusPanel.java deleted file mode 100644 index e5b776d4..00000000 --- a/src/alfa/status/swing/StatusPanel.java +++ /dev/null @@ -1,90 +0,0 @@ -package alfa.status.swing; - -import java.awt.BorderLayout; -import java.util.ArrayList; - -import javax.swing.BoxLayout; -import javax.swing.JComponent; -import javax.swing.border.TitledBorder; - -import PamController.status.ModuleStatus; -import PamModel.PamModuleInfo; -import PamView.PamColors.PamColor; -import PamView.panel.PamPanel; -import alfa.ControlledModuleInfo; -import alfa.status.StatusMonitor; -import alfa.status.StatusObserver; - -/** - * Swing status display panel to go with the status monitor. - * @author Doug Gillespie - * - */ -public class StatusPanel implements StatusObserver { - - private StatusMonitor statusMonitor; - - private PamPanel statusPanel; - - private PamPanel buttonPanel; - - private StatusButton[] statusButtons; - - public StatusPanel(StatusMonitor statusMonitor) { - this.statusMonitor = statusMonitor; - statusPanel = new PamPanel(PamColor.BORDER); - statusPanel.setBorder(new TitledBorder("Module Status")); - buttonPanel = new PamPanel(PamColor.BORDER); - statusPanel.setLayout(new BorderLayout()); - statusPanel.add(buttonPanel, BorderLayout.NORTH); - refillButtonPanel(); - statusMonitor.addObserver(this); - } - - public JComponent getPanel() { - return statusPanel; - } - - private void refillButtonPanel() { - buttonPanel.removeAll(); - buttonPanel.setLayout(new BoxLayout(buttonPanel, BoxLayout.Y_AXIS)); - ArrayList list = statusMonitor.getModulesList(); - if (list == null) { - statusButtons = null; - return; - } - statusButtons = new StatusButton[list.size()]; - for (int i = 0; i < list.size(); i++) { - statusButtons[i] = new StatusButton(list.get(i).getDefaultName()); - buttonPanel.add(statusButtons[i].getComponent()); - } - } - - @Override - public void newModuleList() { - refillButtonPanel(); - } - - @Override - public void newStatus() { - updateAllStatus(); - } - - private void updateAllStatus() { - if (statusButtons == null) { - return; - } - ModuleStatus[] statuss = statusMonitor.getModuleStatus(); - if (statuss == null) { - return; - } - if (statuss.length != statusButtons.length) { - return; - } - boolean[] existss = statusMonitor.getModuleExists(); - for (int i = 0; i < statuss.length; i++) { - statusButtons[i].setStatus(existss[i], statuss[i]); - } - - } -} diff --git a/src/alfa/swinggui/ALFADialog.java b/src/alfa/swinggui/ALFADialog.java deleted file mode 100644 index 573a0927..00000000 --- a/src/alfa/swinggui/ALFADialog.java +++ /dev/null @@ -1,243 +0,0 @@ -package alfa.swinggui; - -import java.awt.GridBagConstraints; -import java.awt.GridBagLayout; -import java.awt.Window; - -import javax.swing.BoxLayout; -import javax.swing.ButtonGroup; -import javax.swing.JCheckBox; -import javax.swing.JComponent; -import javax.swing.JLabel; -import javax.swing.JPanel; -import javax.swing.JRadioButton; -import javax.swing.JTabbedPane; -import javax.swing.JTextField; -import javax.swing.border.TitledBorder; - -import PamController.PamController; -import PamView.dialog.PamDialog; -import PamView.dialog.PamDialogPanel; -import PamView.dialog.PamGridBagContraints; -import PamView.panel.WestAlignedPanel; -import PamguardMVC.dataSelector.DataSelector; -import alfa.ALFAControl; -import alfa.ALFAParameters; -import loggerForms.FormDescription; - -public class ALFADialog extends PamDialog { - - private static final long serialVersionUID = 1L; - - private static ALFADialog singleInstance; - - private ALFAControl alfaControl; - - private ALFAParameters alfaParameters; - - private JTextField effIntNoWhales; - -// private JTextField effIntWhales; - private JTextField histosPerInterval, binsPerHisto; - - private JCheckBox reloadOldReports; - - private JCheckBox launchScreenMirror; - - private PamDialogPanel loggerPanel; - - private PamDialogPanel loggerDialogPanel; - - private JRadioButton loggerComma, loggerJson, loggerXML; - - private JRadioButton jRadioButtonClks; - - private JRadioButton jRadioButtonTrns; - - private JCheckBox followOffline; - - private static final int TSCALE = 60; - - private ALFADialog(Window parentFrame, ALFAControl alfaControl) { - super(parentFrame, alfaControl.getUnitName() + " options", true); - this.alfaControl = alfaControl; - JTabbedPane tabPane = new JTabbedPane(); - JPanel reportPanel = new JPanel(new GridBagLayout()); - GridBagConstraints c = new PamGridBagContraints(); - reportPanel.setBorder(new TitledBorder("Effort Intervals")); - - c.gridwidth = 3; - reportPanel.add(new JLabel("DataType ", JLabel.LEFT), c); - c.gridy++; - jRadioButtonClks = new JRadioButton("No. Clicks in Trains"); - reportPanel.add(jRadioButtonClks, c); - c.gridy++; - jRadioButtonTrns= new JRadioButton("Click Trains"); - reportPanel.add(jRadioButtonTrns, c); - c.gridy++; - - ButtonGroup group = new ButtonGroup(); - group.add(jRadioButtonClks); - group.add(jRadioButtonTrns); - - c.gridwidth = 3; - reportPanel.add(new JLabel("Standard Reporting Intervals ", JLabel.LEFT), c); - c.gridwidth = 1; - c.gridy++; - reportPanel.add(new JLabel("Reporting interval ", JLabel.RIGHT), c); - c.gridx++; - reportPanel.add(effIntNoWhales = new JTextField(5), c); - c.gridx++; - reportPanel.add(new JLabel( "(minutes)"), c); - c.gridx = 0; - c.gridy++; - reportPanel.add(new JLabel("Angle Histograms ", JLabel.RIGHT), c); - c.gridx++; - reportPanel.add(histosPerInterval = new JTextField(5), c); - c.gridx++; - reportPanel.add(new JLabel( "(per report)"), c); - c.gridx = 0; - c.gridy++; - reportPanel.add(new JLabel("Bins per Histogram ", JLabel.RIGHT), c); - c.gridx++; - reportPanel.add(binsPerHisto = new JTextField(5), c); - c.gridy++; - c.gridx = 0; - c.gridwidth = 3; - reportPanel.add(reloadOldReports = new JCheckBox("Reload old reports at start up"), c); - tabPane.add("Messaging", reportPanel); - - DataSelector loggerformsSelector = alfaControl.getLoggerMonitor().getFormsSelector(); - JPanel logStPanel = new JPanel(new GridBagLayout()); - GridBagConstraints lc = new PamGridBagContraints(); - loggerComma = new JRadioButton("Comma separated"); - loggerJson = new JRadioButton("JSON String"); - loggerXML = new JRadioButton("XML"); - ButtonGroup bg = new ButtonGroup(); - bg.add(loggerComma); - bg.add(loggerJson); - bg.add(loggerXML); - logStPanel.setBorder(new TitledBorder("Message Style")); - logStPanel.add(loggerComma, c); - c.gridy++; - logStPanel.add(loggerJson,c); -// c.gridy++; -// logStPanel.add(loggerXML,c); - if (loggerformsSelector != null) { - loggerDialogPanel = loggerformsSelector.getDialogPanel(); - JPanel lp = new JPanel(); - lp.setLayout(new BoxLayout(lp, BoxLayout.Y_AXIS)); - lp.add(logStPanel); - lp.add(loggerDialogPanel.getDialogComponent()); - tabPane.addTab("Logger Forms", lp); - } - - JPanel dispPanel = new JPanel(new GridBagLayout()); - dispPanel.setBorder(new TitledBorder("Display Options")); - c = new PamGridBagContraints(); - dispPanel.add(launchScreenMirror = new JCheckBox("Launch Screen Mirror"), c); - tabPane.add("Display", dispPanel); - - followOffline = new JCheckBox("Follow data offline"); - followOffline.setToolTipText("Automaticlly check server for new data arrival, update data map and display"); - if (PamController.getInstance().getRunMode() == PamController.RUN_PAMVIEW) { - JPanel offlinePanel = new JPanel(new GridBagLayout()); - offlinePanel.setBorder(new TitledBorder("Offline")); - c = new PamGridBagContraints(); - offlinePanel.add(followOffline, c); - tabPane.add("Offline", offlinePanel); - } - - effIntNoWhales.setToolTipText("Interval for sending ship track data "); -// effIntWhales.setToolTipText("Interval for sending data when whale have been detected"); - histosPerInterval.setToolTipText("Number of angle histograms per reporting interval"); - binsPerHisto.setToolTipText("Number of angle bins per histogram"); - reloadOldReports.setToolTipText("Reload old reports when the system restarts"); - - setDialogComponent(tabPane); - } - - public static ALFAParameters showDialog(Window parentFrame, ALFAControl alfaControl) { -// if (singleInstance == null || singleInstance.getOwner() != parentFrame || singleInstance.alfaControl != alfaControl) { - singleInstance = new ALFADialog(parentFrame, alfaControl); -// } - singleInstance.setParams(alfaControl.getAlfaParameters().clone()); - singleInstance.setVisible(true); - return singleInstance.alfaParameters; - } - - private void setParams(ALFAParameters alfaParameters) { - this.alfaParameters = alfaParameters; - - effIntNoWhales.setText(String.format("%d", alfaParameters.effortMsgIntervalNoWhales/TSCALE)); - histosPerInterval.setText(String.format("%d", alfaParameters.histosPerReportInterval)); - binsPerHisto.setText(String.format("%d", alfaParameters.getBinsPerhistogram())); - reloadOldReports.setSelected(alfaParameters.reloadOldReports); - - loggerComma.setSelected(alfaParameters.loggerFormFormat == FormDescription.LOGGER_FORMS_COMMA); - loggerJson.setSelected(alfaParameters.loggerFormFormat == FormDescription.LOGGER_FORMS_JSON); - loggerXML.setSelected(alfaParameters.loggerFormFormat == FormDescription.LOGGER_FORMS_XML); - - if (loggerDialogPanel != null) { - loggerDialogPanel.setParams(); - } - - jRadioButtonClks.setSelected(!alfaParameters.useClkTrains); - - launchScreenMirror.setSelected(alfaParameters.autoScreenMirror); - followOffline.setSelected(alfaParameters.followOffline); - - this.pack(); - } - - @Override - public boolean getParams() { - try { - int inval = Integer.valueOf(effIntNoWhales.getText()); - alfaParameters.effortMsgIntervalNoWhales = inval*TSCALE; - inval = Integer.valueOf(histosPerInterval.getText()); - alfaParameters.histosPerReportInterval = inval; - int bins = Integer.valueOf(binsPerHisto.getText()); - alfaParameters.setBinsPerhistogram(bins); - } - catch (NumberFormatException e) { - return showWarning("Invalid interval data, must be an Integer (whole) number"); - } - if (loggerDialogPanel != null) { - if (loggerDialogPanel.getParams() == false) { - return showWarning("Error in logger forms selection"); - } - } - alfaParameters.reloadOldReports = reloadOldReports.isSelected(); - alfaParameters.autoScreenMirror = launchScreenMirror.isSelected(); - - if (loggerJson.isSelected()) { - alfaParameters.loggerFormFormat = FormDescription.LOGGER_FORMS_JSON; - } - else if (loggerComma.isSelected()) { - alfaParameters.loggerFormFormat = FormDescription.LOGGER_FORMS_COMMA; - } - else if (loggerXML.isSelected()) { - alfaParameters.loggerFormFormat = FormDescription.LOGGER_FORMS_XML; - } - alfaParameters.followOffline = followOffline.isSelected(); - - - if (this.jRadioButtonClks.isSelected()) alfaParameters.useClkTrains = false; - else alfaParameters.useClkTrains = true; - - return true; - } - - @Override - public void cancelButtonPressed() { - alfaParameters = null; - } - - @Override - public void restoreDefaultSettings() { - setParams(new ALFAParameters()); - } - - -} diff --git a/src/alfa/swinggui/ALFAGUITransformer.java b/src/alfa/swinggui/ALFAGUITransformer.java deleted file mode 100644 index 97dbaa90..00000000 --- a/src/alfa/swinggui/ALFAGUITransformer.java +++ /dev/null @@ -1,189 +0,0 @@ -package alfa.swinggui; - -import java.awt.ComponentOrientation; -import java.awt.Container; -import java.awt.Dimension; -import java.awt.Font; -import java.awt.GridBagConstraints; -import java.awt.GridBagLayout; -import java.awt.Insets; -import java.awt.Rectangle; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.util.ArrayList; - -import javax.swing.ImageIcon; -import javax.swing.JButton; -import javax.swing.JMenu; -import javax.swing.JMenuBar; -import javax.swing.JMenuItem; -import javax.swing.JPopupMenu; -import javax.swing.JTabbedPane; -import javax.swing.SwingUtilities; -import javax.swing.event.ChangeEvent; -import javax.swing.event.ChangeListener; - -import PamController.PamController; -import PamView.FullScreen; -import PamView.GuiFrameManager; -import PamView.PamGui; -import PamView.panel.PamTabbedPane; -import PamguardMVC.debug.Debug; -import alfa.ALFAControl; - -/** - * Changes the PAMGuard Swing GUI to make it more touch friendly and remove some clutter so that - * the UI is a little easier to use on tablets. - * - * @author Jamie Macaulay - * - */ -public class ALFAGUITransformer { - - /** - * The height of the main tabs - */ - - public static final int TABHEIGHT = 65; - - public static final int TABWIDTH = 90; - - - /** - * The main menu - */ - private JPopupMenu menu; - - /** - * Reference ot hte GUI frame manager. - */ - private GuiFrameManager guiFrameManager; - - private Container glassPane; - - public static ImageIcon settings = new ImageIcon(ClassLoader - .getSystemResource("Resources/MenuButton.png")); - - public ALFAGUITransformer(ALFAControl alfaControl) { - - this.guiFrameManager = PamController.getInstance().getGuiFrameManager(); - - //set the tab size. - - guiFrameManager.getFrameGui(0).setTabsSize(new Dimension(TABWIDTH, TABHEIGHT)); - - //guiFrameManager.getFrameGui(0).setTabFont(new Font(null, Font.BOLD, 16)); - - //get rid of the top tool bar - guiFrameManager.getFrameGui(0).setToolBarVisible(false); - - - guiFrameManager.getFrameGui(0).getSidePanel().showPanel(true); - guiFrameManager.getFrameGui(0).getSidePanel().disableShowButton(true); - - - //total HACK to add button to tab pane - SwingUtilities.invokeLater(new Runnable() { - @Override - public void run() { - addButtonToPane(guiFrameManager.getFrameGui(0)); - } - }); - - - //get rid of all those menus that are going to confuse folk. - guiFrameManager.getFrameGui(0).getGuiFrame().setJMenuBar(null); - setMenuItems(); - FullScreen.setGoFullScreen(true); - } - - /** - * Set the menu items - */ - private synchronized void setMenuItems() { - - guiFrameManager.getFrameGui(0).getGuiFrame().setJMenuBar(null); - - if (menu!=null) { - menu.removeAll(); - } - - JMenuBar menuBar = guiFrameManager.getFrameGui(0).makeGuiMenu(); - -// for (int i=0; i newMenuItems = new ArrayList(); - for (int i=0; i{ - if (PamController.getInstance().getPamStatus() == PamController.PAM_RUNNING) { -// Debug.out.println("ALFA: PAMStop Pressed!!!--------------------"); - PamController.getInstance().toolBarStopButton(null); - } - else if (PamController.getInstance().getPamStatus() == PamController.PAM_IDLE) { -// Debug.out.println("ALFA: PAMStart Pressed!!!--------------------"); - PamController.getInstance().pamStart(); - } - //button decoration occurs on notification - }); - - setStartStopStatus(false); - - //the status pane - Color clearColour = new Color(0,0,0,0); - for (int i = 0; i < whaleButtonNames.length; i++) { - whaleStatus[i] = new StatusButton(whaleButtonNames[i], new Dimension(BUTTONWIDTH, ALFAGUITransformer.TABHEIGHT/2)); - whaleStatus[i].setColor(0, clearColour); - whaleStatus[i].setStatus(true, new ModuleStatus(ModuleStatus.STATUS_OK)); - } - - -// whaleStatus = new StatusButton(" Whales"); - systemStatus = new StatusButtonSquare("System Diagnostics",new Dimension(BUTTONWIDTH, ALFAGUITransformer.TABHEIGHT)); - - mainPanel = new PamPanel(); - mainPanel.setLayout(new GridBagLayout()); - //mainPanel.setBorder(new TitledBorder("Status")); - GridBagConstraints c = new PamGridBagContraints(); - -// mainPanel.add(new PamView.dialog.PamLabel("System", JLabel.CENTER),c); -// c.gridx++; -// mainPanel.add(new PamView.dialog.PamLabel("Whales", JLabel.CENTER),c); -// c.gridx = 0; -// c.gridy++; - c.gridx = 0; - c.gridwidth=3; - c.gridheight=3; - if (!alfaControl.isViewer()) mainPanel.add(systemStatus.getComponent(),c); - - c.gridwidth=1; - c.gridheight=1; - c.gridx = 2; - c.gridy ++; - c.gridy ++; - mainPanel.add(new JLabel("Sperm Whale Detections"),c); - c.gridy ++; - mainPanel.add(whaleStatus[0].getComponent(),c); - c.gridy ++; - mainPanel.add(whaleStatus[1].getComponent(),c); - c.gridy ++; - mainPanel.add(whaleStatus[2].getComponent(),c); - - //advanced label - c.gridy ++; - c.gridwidth=3; - mainPanel.add(new JSeparator(),c); - - PamLabel advLabel = new PamLabel("System Details", SwingConstants.CENTER); - //advLabel.setPreferredSize(new Dimension(BUTTONWIDTH, 2*BUTTONSIZE)); - advLabel.setFont(new Font(null, Font.BOLD, 20)); - advLabel.setVerticalTextPosition(JLabel.BOTTOM); - - if (!alfaControl.isViewer()) mainHolder.add(BorderLayout.NORTH, startStopButton); - mainHolder.add(BorderLayout.CENTER, mainPanel); - if (!alfaControl.isViewer()) mainHolder.add(BorderLayout.SOUTH, advLabel); - } - - /** - * Set the status of the go button. - * @param running - */ - public synchronized void setStartStopStatus(boolean running) { - //Debug.out.println("ALFA:p Run: !!" + running); - startStopButton.setFont(new Font(null, Font.BOLD, 20)); - if (!running) { - startStopButton.setText("Press to Start"); -// startStopButton.setBackground(Color.GREEN); -// startStopButton.setOpaque(true); - //startStopButton.setBorderPainted(false); -// startStopButton.setIcon( new PamSymbol(PamSymbolType.SYMBOL_TRIANGLER, 25, 25, true, -// Color.BLACK, Color.BLACK)); - - startStopButton.setBorder(BorderFactory.createLineBorder(Color.GREEN, 5)); // Line Border + Thickness of the Border } - startStopButton.setIconTextGap(1); - } - else { - startStopButton.setText("Press to Stop"); -// startStopButton.setOpaque(true); -// startStopButton.setBackground(Color.GRAY); -// startStopButton.setIcon( new PamSymbol(PamSymbolType.SYMBOL_SQUARE, 25, 25, true, -// Color.BLACK, Color.BLACK)); - startStopButton.setBorder(BorderFactory.createLineBorder(Color.GRAY, 5)); // Line Border + Thickness of the Border } - - } - startStopButton.repaint(); - startStopButton.validate(); - startStopButton.repaint(); - - } - - @Override - public JComponent getPanel() { - return mainHolder; - } - - @Override - public void rename(String newName) { - // TODO Auto-generated method stub - - } - - public void statusUpdate() { - systemStatus.setStatus(true, alfaControl.getModuleStatus()); - - AngleHistogram aHist = alfaControl.getStatusAngleHistogram(); - if (aHist != null) { - double[] data = aHist.getData(); - double front = data[0]; - double aft = data[data.length-1]; - double abeam = aHist.getTotalContent()-front-aft; - setButtonState(0, front); - setButtonState(1, abeam); - setButtonState(2, aft); - } -// whaleStatus[0].setStatus(true, alfaControl.getWhaleStatus()); - } - - /** - * Set the state of the button. - * @param i - the state of the button. - * @param nClickTrains - the number of click trains. - */ - private void setButtonState(int i, double nClickTrains) { - StatusButton button = whaleStatus[i]; - int state = ModuleStatus.STATUS_OK; - String msg; - if (nClickTrains >= 1) { - state = ModuleStatus.STATUS_WARNING; - } - if (nClickTrains >= 3) { - state = ModuleStatus.STATUS_ERROR; - } - msg = String.format("%d click trains detected %s", (int)nClickTrains, whaleButtonNames[i].toLowerCase()); - - button.setStatus(true, new ModuleStatus(state, msg)); - } - - /** - * Notification passed from controller to side panel - * @param changeType - the change type flag. - */ - public synchronized void notifyModelChanged(int changeType) { - //Debug.out.println("ALFA SIDE PANE: " + changeType); - switch (changeType) { - case PamController.PAM_RUNNING: - setStartStopStatus(true); - break; - case PamController.PAM_IDLE: - setStartStopStatus(false); - break; - case PamController.PAM_STALLED: - setStartStopStatus(false); - break; - } - - } - -} diff --git a/src/alfa/swinggui/BBSwingTabPanel.java b/src/alfa/swinggui/BBSwingTabPanel.java deleted file mode 100644 index ebe80285..00000000 --- a/src/alfa/swinggui/BBSwingTabPanel.java +++ /dev/null @@ -1,83 +0,0 @@ -package alfa.swinggui; - -import java.awt.Frame; - -import javax.swing.JComponent; -import javax.swing.JMenu; -import javax.swing.JToolBar; - -import Map.MapController; -import Map.SimpleMap; -import PamView.PamTabPanel; -import alfa.ALFAControl; -import alfa.help.gui.ALFAHelpPanel; -import alfa.status.swing.StatusPanel; - -public class BBSwingTabPanel implements PamTabPanel { - - private ALFAControl alfaControl; - -// private PamPanel mainPanel; - - private StatusPanel statusPanel; - -// private PamPanel mapSpace; - -// private SimpleMap simpleMap; - - private ALFALayout alfaLayout; - - public BBSwingTabPanel(ALFAControl alfaControl) { - this.alfaControl = alfaControl; - alfaLayout = new ALFALayout1(); - statusPanel = new StatusPanel(alfaControl.getStatusMonitor()); - alfaLayout.setWestStatusComponent(statusPanel.getPanel()); - ALFAOptionsPanel alfaOptionsPanel = new ALFAOptionsPanel(alfaControl); - alfaLayout.setOptionsComponent(alfaOptionsPanel.getComponent()); - alfaLayout.setHelpcomponent(new ALFAHelpPanel(alfaControl).getComponent()); - } - - @Override - public JMenu createMenu(Frame parentFrame) { - // TODO Auto-generated method stub - return null; - } - - @Override - public JComponent getPanel() { - return alfaLayout.getComponent(); - } - - @Override - public JToolBar getToolBar() { - // TODO Auto-generated method stub - return null; - } - - /** - * Called when units are added or removed. - */ - public void updateUnits() { -// if (mapSpace.getComponentCount() == 0) { -// MapController mapCon = bigBrotherControl.findMapController(); -// if (mapCon != null) { -// simpleMap = new SimpleMap(mapCon, false); -// mapSpace.setLayout(new BorderLayout()); -// mapSpace.add(simpleMap, BorderLayout.CENTER); -// } -//// mapCon. - -// MapController mapCon = alfaControl.findMapController(); -// if (mapCon != null) { -// simpleMap = new SimpleMap(mapCon, false); -// alfaLayout.setMapComponent(simpleMap); -// } -// alfaLayout.setSpermSummaryComponents(bigBrotherControl.getClickMonitorProcess().getSwingComponent()); - IntervalTablePanel intervalTablePanel = new IntervalTablePanel(alfaControl,alfaControl.getEffortMonitor().getIntervalDataBlock()); - alfaLayout.setSpermSummaryComponents(intervalTablePanel.getComponent()); - - JComponent commsPanel = alfaControl.getMessageProcess().getSwingCommsPanel(SwingMessagePanel.SHOW_OUTGOING); - alfaLayout.setCommsComponent(commsPanel); - } - -} diff --git a/src/alfa/swinggui/IntervalOverlayDraw.java b/src/alfa/swinggui/IntervalOverlayDraw.java deleted file mode 100644 index 7fbf69de..00000000 --- a/src/alfa/swinggui/IntervalOverlayDraw.java +++ /dev/null @@ -1,423 +0,0 @@ -package alfa.swinggui; - -import java.awt.BasicStroke; -import java.awt.Color; -import java.awt.Graphics; -import java.awt.Graphics2D; -import java.awt.Point; -import java.awt.Rectangle; -import java.awt.Stroke; -import java.util.ArrayList; -import java.util.LinkedList; -import java.util.List; -import java.util.ListIterator; - -import GPS.GPSControl; -import GPS.GPSDataBlock; -import GPS.GpsDataUnit; -import PamController.PamController; -import PamUtils.Coordinate3d; -import PamUtils.LatLong; -import PamView.ColourArray; -import PamView.GeneralProjector; -import PamView.GeneralProjector.ParameterType; -import PamView.GeneralProjector.ParameterUnits; -import PamView.PamColors; -import PamView.PamColors.PamColor; -import PamView.PamKeyItem; -import PamView.PamSymbol; -import PamView.PamSymbolType; -import PamView.PanelOverlayDraw; -import PamguardMVC.PamDataBlock; -import PamguardMVC.PamDataUnit; -import alfa.ALFAControl; -import alfa.effortmonitor.AngleHistogram; -import alfa.effortmonitor.IntervalDataUnit; - -/** - * Draws the satellite summary data on the map for the summary module. This shows a ships - * track line and the summary localisation data. - * - * @author Doug Gillespie - * - */ -public class IntervalOverlayDraw extends PanelOverlayDraw { - - private static PamSymbol defaultSymbol = new PamSymbol(); - private ALFAControl alfaControl; - - private double[] colourLims = new double[] {0, 400}; - - private ColourArray colourArray; - private boolean isViewer; - - int DRAW_SEGMENTS = 1; - int DRAW_ARROWS = 2; - int drawType = DRAW_ARROWS; - - PamSymbol nullSymbol = new PamSymbol(PamSymbolType.SYMBOL_CIRCLE, 5, 5, true, Color.RED, Color.RED); - - public IntervalOverlayDraw(ALFAControl alfaControl) { - super(defaultSymbol ); - this.alfaControl = alfaControl; - - //dodger blue, green, yellow, orange, red. -// colourArray = ColourArray.createMultiColouredArray(100, new Color(30, 144, 255), Color.YELLOW, Color.ORANGE, Color.RED); - colourArray = ColourArray.createMultiColouredArray(100, Color.BLUE, Color.CYAN, Color.GREEN, Color.YELLOW, Color.ORANGE, Color.RED); - - // colourArray.setAlpha(255); - // colourArray.setAlpha(128); - isViewer = PamController.getInstance().getRunMode() == PamController.RUN_PAMVIEW; - - checkColorLims(); - } - - /** - * Check the colour limits for click trains. - */ - private void checkColorLims() { - if (this.alfaControl.getAlfaParameters().useClkTrains) { - colourLims[0] = 0; - colourLims[1] = 10; - } - else { - colourLims[0] = 0; - colourLims[1] = 400; - } - } - - @Override - public boolean canDraw(ParameterType[] parameterTypes, ParameterUnits[] parameterUnits) { - if (parameterTypes[0] == ParameterType.LATITUDE - && parameterTypes[1] == ParameterType.LONGITUDE) { - return true; - } - else { - return false; - } - } - - @Override - public Rectangle drawDataUnit(Graphics g, PamDataUnit pamDataUnit, GeneralProjector generalProjector) { - Rectangle r = null; - if (generalProjector.getParmeterType(0) == ParameterType.LATITUDE - && generalProjector.getParmeterType(1) == ParameterType.LONGITUDE) { - r = drawOnMap(g, pamDataUnit, generalProjector); - } - return r; - } - - private Rectangle drawOnMap(Graphics g, PamDataUnit pamDataUnit, GeneralProjector generalProjector) { - - IntervalDataUnit idu = (IntervalDataUnit) pamDataUnit; - if (idu.getnClickTrains() == 0) { - // return null; - } - Rectangle r = drawGPSLine(g, idu, generalProjector); - if (r == null) { - // r = drawEndPoints(g, idu, generalProjector); - } - ArrayList angleHists = idu.getAngleHistograms(); - long defHistLength = alfaControl.getAlfaParameters().effortMsgIntervalNoWhales / - alfaControl.getAlfaParameters().histosPerReportInterval * 1000; - synchronized (angleHists) { - int iHist = 0; - long histStart, histEnd; - for (AngleHistogram angleHist : angleHists) { - if (isViewer) { - histStart = (long) (idu.getTimeMilliseconds() + idu.getDurationInMilliseconds() / angleHists.size() * iHist); - histEnd = (long) (idu.getTimeMilliseconds() + idu.getDurationInMilliseconds() / angleHists.size() * (iHist+1)); - } - else { - histStart = idu.getTimeMilliseconds() + (iHist*defHistLength); - histEnd = histStart+defHistLength; - } - drawAngleHistogram(g, idu, generalProjector, angleHist, iHist, histStart, histEnd); - iHist++; - } - } - - return r; - } - - private void drawAngleHistogram(Graphics g, IntervalDataUnit pamDataUnit, GeneralProjector generalProjector, - AngleHistogram angleHist, int iAngleHist, long histStart, long histEnd) { - - - Graphics2D g2d = (Graphics2D) g; - - //check colour limits. - checkColorLims(); - - double[] data = angleHist.getData(); - - if (data == null || data.length == 0) { - return; - } - double angStep = 180/data.length; - int[] polyX = new int[4]; - int[] polyY = new int[4]; - LatLong ll1 = findGpsPos(histStart, pamDataUnit); - LatLong ll2 = findGpsPos(histEnd, pamDataUnit); - Point coord1 = generalProjector.getCoord3d(ll1).getXYPoint(); - Point coord2 = generalProjector.getCoord3d(ll2).getXYPoint(); - LatLong lll = findGpsPos((histStart+histEnd)/2, pamDataUnit); - Coordinate3d c3d0 = generalProjector.getCoord3d(lll); - - if (ll1 == null || ll2 == null || lll == null) return; - double angPM = 6; - double r = 5000; - r = ll1.distanceToMetres(ll2)/2.; - if (r == 0) { - r = 1000; - } - /** - * Draw the trackline segment coloured by status. - */ - int nWhale = 0; - Color lineCol = PamColors.getInstance().getColor(PamColor.GPSTRACK); - for (int i = 0; i < data.length; i++) { - nWhale += data[i]; - } - if (nWhale == 1) { - lineCol = Color.ORANGE; - } - else if (nWhale >= 2) { - lineCol = Color.RED; - } - g.setColor(lineCol); - Stroke stroke = g2d.getStroke(); - g2d.setStroke(new BasicStroke(3)); - g.drawLine(coord1.x, coord1.y, coord2.x, coord2.y); - // if (data[i] == 0) { -// nullSymbol.setFillColor(lineCol); - nullSymbol.setLineColor(lineCol); - nullSymbol.draw(g, c3d0.getXYPoint()); - // continue; - // } - - g2d.setStroke(new BasicStroke(5)); - - generalProjector.addHoverData(c3d0, pamDataUnit); - - for (int i = 0; i < data.length; i++) { - // data[i] = i+1; - if (data[i] == 0) { - continue; - } - // if (ll1 == null || ll2 == null) { - // continue; - // } - double[] angles; - if (i == 0) { - double[] aa = {0}; - angles = aa; - // ll2 = ll1; - lll = ll2; - angPM = angStep; - } - else if (i == data.length-1) { - double[] aa = {180}; - angles = aa; - // ll1 = ll2; - lll = ll1; - angPM = angStep; - } - else { - double ang = ((double) i + 0.5) * angStep; - double[] aa = {-ang, ang}; - angles = aa; - angPM = angStep/2; - } - angPM = 20; - // g.drawString("h", (int) c3d0.x, (int) c3d0.y); - polyX[0] = (int) c3d0.x; - polyY[0] = (int) c3d0.y; - // Coordinate3d c3d1 = generalProjector.getCoord3d(ll2); - // polyX[1] = (int) c3d1.x; - // polyY[1] = (int) c3d1.y; - double shipHead = ll1.bearingTo(ll2); - for (int s = 0; s < angles.length; s++) { - double ang = shipHead + angles[s]-angPM; - LatLong ll = lll.travelDistanceMeters(ang, r*.8); - Coordinate3d c3d = generalProjector.getCoord3d(ll); - polyX[1] = (int) c3d.x; - polyY[1] = (int) c3d.y; - - ang = shipHead + angles[s]; - ll = lll.travelDistanceMeters(ang, r); - c3d = generalProjector.getCoord3d(ll); - polyX[2] = (int) c3d.x; - polyY[2] = (int) c3d.y; - - ang = shipHead + angles[s]+angPM; - ll = lll.travelDistanceMeters(ang, r*.8); - c3d = generalProjector.getCoord3d(ll); - polyX[3] = (int) c3d.x; - polyY[3] = (int) c3d.y; - -// Color col = colourArray.checkColour((int) data[i]*2); - Color col = colourArray.getColour(data[i], colourLims[0], colourLims[1]); - g.setColor(col); - - if (drawType == DRAW_SEGMENTS) { - g.fillPolygon(polyX, polyY, 4); - int xT = (polyX[2]+polyX[3])/2; - int yT = (polyY[2]+polyY[3])/2; - g.setColor(Color.black); - g.drawString(String.format("%.0f", data[i]), xT, yT); - } - else if (drawType == DRAW_ARROWS) { - g2d.drawLine(polyX[0], polyY[0], polyX[2], polyY[2]); - g2d.drawLine(polyX[1], polyY[1], polyX[2], polyY[2]); - g2d.drawLine(polyX[3], polyY[3], polyX[2], polyY[2]); - int xT = (polyX[2]+polyX[3])/2; - int yT = (polyY[2]+polyY[3])/2; - g.setColor(Color.black); - g.drawString(String.format("%.0f", data[i]), xT, yT); - } - } - } - g2d.setStroke(stroke); - } - - /** - * find lat long either from striahg tline in data unit or from tru gps data. - * @param histStart - * @param pamDataUnit - * @return - */ - private LatLong findGpsPos(long time, IntervalDataUnit pamDataUnit) { - // LatLong ll = findRealGPS(time); - // if (ll != null) { - // return ll; - // } - double interpFac = (time - pamDataUnit.getTimeMilliseconds()) / pamDataUnit.getDurationInMilliseconds(); - interpFac = Math.max(0, Math.min(interpFac, 1.)); - LatLong ll1 = pamDataUnit.getFirstGPSData(); - LatLong ll2 = pamDataUnit.getLastGPSData(); - if (ll1 == null || ll2 == null) { - return null; - } - LatLong ll = new LatLong(ll1.getLatitude() + (ll2.getLatitude()-ll1.getLatitude())*interpFac, - ll1.getLongitude() + (ll2.getLongitude()-ll1.getLongitude())*interpFac); - return ll; - } - - private LatLong findRealGPS(long time) { - GPSControl gpsControl = GPSControl.getGpsControl(); - if (gpsControl == null) { - return null; - } - GPSDataBlock gpsDataBlock = gpsControl.getGpsDataBlock(); - if (gpsDataBlock == null) { - return null; - } - GpsDataUnit gpsDataUnit = gpsDataBlock.getClosestUnitMillis(time); - if (gpsDataUnit != null) { - return gpsDataUnit.getGpsData(); - } - else { - return null; - } - } - - private Rectangle drawGPSLine(Graphics g, IntervalDataUnit idu, GeneralProjector generalProjector) { - GPSControl gpsControl = GPSControl.getGpsControl(); - if (gpsControl == null) { - return null; - } - GPSDataBlock gpsDataBlock = gpsControl.getGpsDataBlock(); - if (gpsDataBlock == null) { - return null; - } - // see if we can find some GPS points in this range of track, if so draw a line between them. - List points = new LinkedList<>(); - Point lastPoint = new Point(-1000, -1000); - synchronized (gpsDataBlock.getSynchLock()) { - ListIterator iter = gpsDataBlock.getListIterator(idu.getTimeMilliseconds(), 0, PamDataBlock.MATCH_BEFORE, PamDataBlock.MATCH_BEFORE); - if (iter == null) { - return null; - } - while (iter.hasNext()) { - GpsDataUnit gpsDataUnit = iter.next(); - if (gpsDataUnit.getTimeMilliseconds() > idu.getEndTimeInMilliseconds()) { - break; - } - Point p = generalProjector.getCoord3d(gpsDataUnit.getGpsData()).getXYPoint(); - if (p.equals(lastPoint)) { - continue; - } - points.add(p); - lastPoint = p; - } - } - if (points.isEmpty()) { - return null; - } - lastPoint = points.get(0); - g.setColor(Color.RED); - ListIterator pIter = points.listIterator(1); - int meanX = lastPoint.x, meanY = lastPoint.y; - int minX, maxX, minY, maxY; - minX = maxX = meanX; - minY = maxY = meanY; - while (pIter.hasNext()) { - Point p = pIter.next(); - g.drawLine(lastPoint.x, lastPoint.y, p.x, p.y); - lastPoint = p; - meanX += p.x; - meanY += p.y; - minX = Math.min(minX, p.x); - maxX = Math.max(maxX, p.x); - minY = Math.min(minY, p.y); - maxY = Math.max(maxY, p.y); - } - Coordinate3d meanPt = new Coordinate3d(meanX/points.size(), meanY/points.size()); - generalProjector.addHoverData(meanPt, idu); - - return new Rectangle(minX, minY, maxX-minX, maxY-minY); - } - - /** - * Just draw a straight line between the end points of the segment. - * @param g - * @param pamDataUnit - * @param generalProjector - * @return - */ - private Rectangle drawEndPoints(Graphics g, IntervalDataUnit idu, GeneralProjector generalProjector) { - int nTrains = idu.getnClickTrains(); - if (nTrains == 0) { - // return null; - } - LatLong ll1 = idu.getFirstGPSData(); - LatLong ll2 = idu.getLastGPSData(); - if (ll1 == null || ll2 == null) { - return null; - } - Coordinate3d c3d1 = generalProjector.getCoord3d(ll1); - Coordinate3d c3d2 = generalProjector.getCoord3d(ll2); - Point pt1 = c3d1.getXYPoint(); - Point pt2 = c3d2.getXYPoint(); - g.setColor(Color.RED); - g.drawLine(pt1.x, pt1.y, pt2.x, pt2.y); - Rectangle r = new Rectangle(Math.min(pt1.y, pt2.x), Math.min(pt1.y, pt2.y), - Math.abs(pt1.y-pt2.x), Math.abs(pt1.y-pt2.y)); - generalProjector.addHoverData(c3d1, idu); - generalProjector.addHoverData(c3d2, idu); - return r; - } - - - @Override - public PamKeyItem createKeyItem(GeneralProjector generalProjector, int keyType) { - return null; - } - - @Override - public String getHoverText(GeneralProjector generalProjector, PamDataUnit dataUnit, int iSide) { - return dataUnit.getSummaryString(); - } - -} diff --git a/src/alfa/swinggui/IntervalTablePanel.java b/src/alfa/swinggui/IntervalTablePanel.java deleted file mode 100644 index 8e2b0333..00000000 --- a/src/alfa/swinggui/IntervalTablePanel.java +++ /dev/null @@ -1,117 +0,0 @@ -package alfa.swinggui; - -import java.awt.BorderLayout; -import java.util.Arrays; - -import javax.swing.JComponent; - -import GPS.GpsData; -import PamUtils.PamCalendar; -import PamView.component.DataBlockTableView; -import PamView.panel.PamPanel; -import alfa.ALFAControl; -import alfa.effortmonitor.AngleHistogram; -import alfa.effortmonitor.IntervalDataBlock; -import alfa.effortmonitor.IntervalDataUnit; - -public class IntervalTablePanel { - - private IntervalDataBlock intervalDataBlock; - - private IntervalTable intervalTable; - - private PamPanel mainPanel; - - private ALFAControl alfaControl; - - private final String[] baseColumnNames = {"Start", "Position", "End", "Postion", "% Effort", "Trains", "Clicks"}; - - public IntervalTablePanel(ALFAControl alfaControl, IntervalDataBlock intervalDataBlock) { - this.alfaControl = alfaControl; - intervalTable = new IntervalTable(intervalDataBlock); - mainPanel = new PamPanel(); - mainPanel.setLayout(new BorderLayout()); - mainPanel.add(BorderLayout.CENTER, intervalTable.getComponent()); - } - - public JComponent getComponent() { - return mainPanel; - } - - - private class IntervalTable extends DataBlockTableView{ - public IntervalTable(IntervalDataBlock intervalDataBlock) { - super(intervalDataBlock, "Monitor intervals"); - } - - - @Override - public String[] getColumnNames() { - int nHistos = alfaControl.getAlfaParameters().histosPerReportInterval; - String[] columnNames = Arrays.copyOf(baseColumnNames, baseColumnNames.length +nHistos); - for (int i = 0; i < nHistos; i++) { - columnNames[i+baseColumnNames.length] = "Interval_" + (i+1); - } - return columnNames; - } - - @Override - public Object getColumnData(IntervalDataUnit dataUnit, int column) { - if (dataUnit == null) { - return null; - } - switch (column) { - case 0: - return formatTime(dataUnit.getTimeMilliseconds()); - case 1: - GpsData gpsData = dataUnit.getFirstGPSData(); - if (gpsData == null) { - return "no GPS"; - } - else { - return gpsData.formatLatitude() + ", " + gpsData.formatLongitude(); - } - case 2: - return formatTime(dataUnit.getEndTimeInMilliseconds()); - case 3: - GpsData endGpsData = dataUnit.getFirstGPSData(); - if (endGpsData == null) { - return "no GPS"; - } - else { - return endGpsData.formatLatitude() + ", " + endGpsData.formatLongitude(); - } - case 4: - double duration = dataUnit.getDurationInMilliseconds(); - return String.format("%3.0f %% of %s", dataUnit.getPercentEffort(), PamCalendar.formatTime((long) duration)); - case 5: - return dataUnit.getnClickTrains(); - case 6: - return dataUnit.getnClicks(); - } - int iHist = column-baseColumnNames.length; - if (iHist < 0) return null; - AngleHistogram angleHist = dataUnit.getAngleHistogram(iHist); - if (angleHist == null) { - return null; - } - double[] data = angleHist.getData(); - if (data == null || data.length == 0) { - return null; - } - String str = String.format("(%.0f",data[0]); - for (int i = 1; i < data.length; i++) { - str += String.format(",%.0f", data[i]); - } - str += ")"; - - return str; - } - - private String formatTime(long timeMilliseconds) { - return PamCalendar.formatTodaysTime(timeMilliseconds, true); - } - } - - -} diff --git a/src/alfa/swinggui/SwingMessagePanel.java b/src/alfa/swinggui/SwingMessagePanel.java deleted file mode 100644 index 2ccc3cff..00000000 --- a/src/alfa/swinggui/SwingMessagePanel.java +++ /dev/null @@ -1,47 +0,0 @@ -package alfa.swinggui; - -import javax.swing.BoxLayout; -import javax.swing.JComponent; - -import PamView.panel.PamPanel; -import alfa.comms.MessageProcess; -import rockBlock.RockBlockControl; -import rockBlock.swing.RockBlockMessageInTable; -import rockBlock.swing.RockBlockMessageOutTable; - -public class SwingMessagePanel { - - private MessageProcess messageProcess; - - private RockBlockMessageOutTable rockBlockMessageTable; - - private RockBlockMessageInTable messageInTable; - - private PamPanel mainPanel; - - public static final int SHOW_OUTGOING = 0x1; - public static final int SHOW_INCOMING = 0x2; - public static final int SHOW_BOTH = 0x3; - - public SwingMessagePanel(MessageProcess messageProcess, int showWhat) { - this.messageProcess = messageProcess; - mainPanel = new PamPanel(); - mainPanel.setLayout(new BoxLayout(mainPanel, BoxLayout.Y_AXIS)); - RockBlockControl rockBlockControl = messageProcess.findRockBlock(); - if (rockBlockControl != null) { - rockBlockMessageTable = new RockBlockMessageOutTable(rockBlockControl); - if ((showWhat & SHOW_OUTGOING) != 0) { - mainPanel.add(rockBlockMessageTable.getComponent()); - } - messageInTable = new RockBlockMessageInTable(rockBlockControl); - if ((showWhat & SHOW_INCOMING) != 0) { - mainPanel.add(messageInTable.getComponent()); - } - } - } - - public JComponent getComponent() { - return mainPanel; - } - -} diff --git a/src/alfa/utils/MiraScreen.java b/src/alfa/utils/MiraScreen.java deleted file mode 100644 index dbdf6920..00000000 --- a/src/alfa/utils/MiraScreen.java +++ /dev/null @@ -1,82 +0,0 @@ -package alfa.utils; - -import java.awt.AWTException; -import java.awt.Robot; -import java.awt.event.KeyEvent; - - -/** - * Functions to launch Microsoft Screen mirror service. - * We've been unable to work out a way of calling these functions - * directly so have instead implemented a system of key strokes. - *

May end up being very fragile ! - * @author MER Torp - * - */ -public class MiraScreen { - -// public static void main(String[] args) { -// -//// new Stage(); -// new JFXPanel(); -// -// ObservableList screens = Screen.getScreens(); -// for (Screen s:screens) { -// System.out.println(s); -// } -// -// -// -// startMirror(); -// -// } - - private static volatile boolean running = false; - - - - public static boolean startMirror() { - if (running) { - return false; - } - Thread t = new Thread(new Runnable() { - @Override - public void run() { - startMirrorFunc(); - } - }); - t.start(); - return true; - } - - private static synchronized void startMirrorFunc() { - Robot robot; - running = true; - try { - robot = new Robot(); - robot.keyPress(KeyEvent.VK_WINDOWS); - robot.keyPress(KeyEvent.VK_K); - robot.keyRelease(KeyEvent.VK_WINDOWS); - robot.keyRelease(KeyEvent.VK_K); - pause(5000); - robot.keyPress(KeyEvent.VK_TAB); - robot.keyRelease(KeyEvent.VK_TAB); - robot.keyPress(KeyEvent.VK_ENTER); - robot.keyRelease(KeyEvent.VK_ENTER); - robot.keyPress(KeyEvent.VK_ESCAPE); - robot.keyRelease(KeyEvent.VK_ESCAPE); - } catch (AWTException e) { - e.printStackTrace(); - } - running = false; - } - - private static void pause(long millis) { - try { - Thread.sleep(millis); - } catch (InterruptedException e) { - e.printStackTrace(); - } - } - -} diff --git a/src/beamformer/loc/BeamFormerLocalisation.java b/src/beamformer/loc/BeamFormerLocalisation.java index 607e104b..a0c2f13f 100644 --- a/src/beamformer/loc/BeamFormerLocalisation.java +++ b/src/beamformer/loc/BeamFormerLocalisation.java @@ -8,6 +8,7 @@ public class BeamFormerLocalisation extends AbstractLocalisation implements Clon double[] angles = new double[1]; double[] angleErrors = new double[1]; + public BeamFormerLocalisation(PamDataUnit pamDataUnit, int locContents, int referenceHydrophones, double[] angles, double angleError) { super(pamDataUnit, locContents, referenceHydrophones); this.angles = angles; diff --git a/src/noiseOneBand/alarm/OneBandAlarmCounter.java b/src/noiseOneBand/alarm/OneBandAlarmCounter.java index 13bbc2ce..701af8c6 100644 --- a/src/noiseOneBand/alarm/OneBandAlarmCounter.java +++ b/src/noiseOneBand/alarm/OneBandAlarmCounter.java @@ -23,6 +23,7 @@ public class OneBandAlarmCounter extends AlarmDecibelCounter implements PamSetti this.oneBandControl = oneBandControl; PamSettingManager.getInstance().registerSettings(this); } + @Override public double getValue(int countType, PamDataUnit dataUnit) { diff --git a/target/classes/alfa/help/doc/ALFAOnePageHelp.html b/target/classes/alfa/help/doc/ALFAOnePageHelp.html deleted file mode 100644 index 7724d739..00000000 --- a/target/classes/alfa/help/doc/ALFAOnePageHelp.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - -ALFA Help Page - - -

this is a page of help text

- - - \ No newline at end of file