mirror of
https://github.com/PAMGuard/PAMGuard.git
synced 2024-11-25 16:42:27 +00:00
Updates to exporter
Getting export capability working in PAMGuard Updated POM to use more up to date repository
This commit is contained in:
parent
7df04d58a2
commit
bf20889743
@ -6,9 +6,8 @@
|
|||||||
<attribute name="maven.pomderived" value="true"/>
|
<attribute name="maven.pomderived" value="true"/>
|
||||||
</attributes>
|
</attributes>
|
||||||
</classpathentry>
|
</classpathentry>
|
||||||
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/jdk-21.0.2.13-hotspot">
|
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-21">
|
||||||
<attributes>
|
<attributes>
|
||||||
<attribute name="module" value="true"/>
|
|
||||||
<attribute name="maven.pomderived" value="true"/>
|
<attribute name="maven.pomderived" value="true"/>
|
||||||
</attributes>
|
</attributes>
|
||||||
</classpathentry>
|
</classpathentry>
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
eclipse.preferences.version=1
|
eclipse.preferences.version=1
|
||||||
encoding//src/rawDeepLearningClassifer/segmenter/SegmenterProcess.java=UTF-8
|
encoding//src/rawDeepLearningClassifer/segmenter/SegmenterProcess.java=UTF-8
|
||||||
|
encoding//src/test=UTF-8
|
||||||
encoding//src/test/resources=UTF-8
|
encoding//src/test/resources=UTF-8
|
||||||
encoding/<project>=UTF-8
|
encoding/<project>=UTF-8
|
||||||
encoding/src=UTF-8
|
encoding/src=UTF-8
|
||||||
|
@ -1,9 +1,9 @@
|
|||||||
eclipse.preferences.version=1
|
eclipse.preferences.version=1
|
||||||
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
|
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
|
||||||
org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate
|
org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate
|
||||||
org.eclipse.jdt.core.compiler.codegen.targetPlatform=18
|
org.eclipse.jdt.core.compiler.codegen.targetPlatform=21
|
||||||
org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
|
org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
|
||||||
org.eclipse.jdt.core.compiler.compliance=18
|
org.eclipse.jdt.core.compiler.compliance=21
|
||||||
org.eclipse.jdt.core.compiler.debug.lineNumber=generate
|
org.eclipse.jdt.core.compiler.debug.lineNumber=generate
|
||||||
org.eclipse.jdt.core.compiler.debug.localVariable=generate
|
org.eclipse.jdt.core.compiler.debug.localVariable=generate
|
||||||
org.eclipse.jdt.core.compiler.debug.sourceFile=generate
|
org.eclipse.jdt.core.compiler.debug.sourceFile=generate
|
||||||
@ -13,4 +13,4 @@ org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
|
|||||||
org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
|
org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
|
||||||
org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning
|
org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning
|
||||||
org.eclipse.jdt.core.compiler.release=enabled
|
org.eclipse.jdt.core.compiler.release=enabled
|
||||||
org.eclipse.jdt.core.compiler.source=18
|
org.eclipse.jdt.core.compiler.source=21
|
||||||
|
14
pom.xml
14
pom.xml
@ -270,14 +270,12 @@
|
|||||||
</repository>-->
|
</repository>-->
|
||||||
|
|
||||||
<!-- Repo for Renjin Script Engine -->
|
<!-- Repo for Renjin Script Engine -->
|
||||||
<repository>
|
<repository>
|
||||||
<snapshots>
|
<id>bedatadriven</id>
|
||||||
<enabled>false</enabled>
|
<name>bedatadriven public repo</name>
|
||||||
</snapshots>
|
<url>https://nexus.bedatadriven.com/content/groups/public/</url>
|
||||||
<id>bedatadriven</id>
|
</repository>
|
||||||
<name>bedatadriven_renjin</name>
|
|
||||||
<url>https://nexus.bedatadriven.com/content/groups/public/</url>
|
|
||||||
</repository>
|
|
||||||
|
|
||||||
<repository>
|
<repository>
|
||||||
<snapshots>
|
<snapshots>
|
||||||
|
@ -100,6 +100,7 @@ import PamguardMVC.uid.UIDManager;
|
|||||||
import PamguardMVC.uid.UIDOnlineManager;
|
import PamguardMVC.uid.UIDOnlineManager;
|
||||||
import PamguardMVC.uid.UIDViewerManager;
|
import PamguardMVC.uid.UIDViewerManager;
|
||||||
import binaryFileStorage.BinaryStore;
|
import binaryFileStorage.BinaryStore;
|
||||||
|
import export.ExportOptions;
|
||||||
import PamguardMVC.debug.Debug;
|
import PamguardMVC.debug.Debug;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -2692,7 +2693,7 @@ public class PamController implements PamControllerInterface, PamSettings {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Respond to storage options dialog. Selects whethere data
|
* Respond to storage options dialog. Selects whether data
|
||||||
* are stored in binary, database or both
|
* are stored in binary, database or both
|
||||||
* @param parentFrame
|
* @param parentFrame
|
||||||
*/
|
*/
|
||||||
@ -2700,6 +2701,16 @@ public class PamController implements PamControllerInterface, PamSettings {
|
|||||||
StorageOptions.getInstance().showDialog(parentFrame);
|
StorageOptions.getInstance().showDialog(parentFrame);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Show export options tp export data to other formats
|
||||||
|
* @param parentFrame
|
||||||
|
*/
|
||||||
|
public void exportData(JFrame parentFrame) {
|
||||||
|
ExportOptions.getInstance().showDialog(parentFrame);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return a verbose level for debug output
|
* Return a verbose level for debug output
|
||||||
* @return a verbose level for debug output.
|
* @return a verbose level for debug output.
|
||||||
@ -2941,4 +2952,6 @@ public class PamController implements PamControllerInterface, PamSettings {
|
|||||||
return pamConfiguration;
|
return pamConfiguration;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,13 +1,17 @@
|
|||||||
package PamView;
|
package PamView;
|
||||||
|
|
||||||
import java.awt.Component;
|
import java.awt.Component;
|
||||||
|
import java.awt.Container;
|
||||||
import java.awt.Shape;
|
import java.awt.Shape;
|
||||||
import java.awt.geom.AffineTransform;
|
import java.awt.geom.AffineTransform;
|
||||||
import java.awt.geom.Line2D;
|
import java.awt.geom.Line2D;
|
||||||
import java.awt.geom.PathIterator;
|
import java.awt.geom.PathIterator;
|
||||||
import java.awt.geom.Point2D;
|
import java.awt.geom.Point2D;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.WeakHashMap;
|
||||||
|
|
||||||
|
import javax.swing.JComponent;
|
||||||
import javax.swing.JPanel;
|
import javax.swing.JPanel;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -19,22 +23,52 @@ public class PamAWTUtils {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Disable an entire swing panel including all child components.
|
* Disable an entire swing panel including all child components.
|
||||||
* @param panel - the panel to disable
|
* @param jComponent - the panel to disable
|
||||||
* @param isEnabled true if enabled.
|
* @param isEnabled true if enabled.
|
||||||
*/
|
*/
|
||||||
public static void setPanelEnabled(JPanel panel, Boolean isEnabled) {
|
public static void setPanelEnabled(JComponent jComponent, Boolean isEnabled) {
|
||||||
panel.setEnabled(isEnabled);
|
setPanelEnabled(jComponent, isEnabled? 1 :-1);
|
||||||
|
|
||||||
Component[] components = panel.getComponents();
|
|
||||||
|
|
||||||
for (Component component : components) {
|
|
||||||
if (component instanceof JPanel) {
|
|
||||||
setPanelEnabled((JPanel) component, isEnabled);
|
|
||||||
}
|
|
||||||
component.setEnabled(isEnabled);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// private static final Map<Component, Integer> componentAvailability = new WeakHashMap<Component, Integer>();
|
||||||
|
|
||||||
|
public static void setMoreEnabled(Component component) {
|
||||||
|
setPanelEnabled(component, +1);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void setMoreDisabled(Component component) {
|
||||||
|
setPanelEnabled(component, -1);
|
||||||
|
}
|
||||||
|
|
||||||
|
// val = 1 for enabling, val = -1 for disabling
|
||||||
|
private static void setPanelEnabled(Component component, int val) {
|
||||||
|
if (component != null) {
|
||||||
|
|
||||||
|
// final Integer oldValObj = componentAvailability.get(component);
|
||||||
|
//
|
||||||
|
// final int oldVal = (oldValObj == null)
|
||||||
|
// ? 0
|
||||||
|
// : oldValObj;
|
||||||
|
//
|
||||||
|
// final int newVal = oldVal + val;
|
||||||
|
// componentAvailability.put(component, newVal);
|
||||||
|
|
||||||
|
int newVal = val;
|
||||||
|
|
||||||
|
if (newVal >= 0) {
|
||||||
|
component.setEnabled(true);
|
||||||
|
} else if (newVal < 0) {
|
||||||
|
component.setEnabled(false);
|
||||||
|
}
|
||||||
|
if (component instanceof Container) {
|
||||||
|
Container componentAsContainer = (Container) component;
|
||||||
|
for (Component c : componentAsContainer.getComponents()) {
|
||||||
|
setPanelEnabled(c,val);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Find the closest boundary of a shape to a point.
|
* Find the closest boundary of a shape to a point.
|
||||||
* http://stackoverflow.com/questions/8103451/point-outside-of-area-which-is-closest-to-point-inside
|
* http://stackoverflow.com/questions/8103451/point-outside-of-area-which-is-closest-to-point-inside
|
||||||
|
@ -668,6 +668,13 @@ public class PamGui extends PamView implements WindowListener, PamSettings {
|
|||||||
startMenuEnabler.addMenuItem(menuItem);
|
startMenuEnabler.addMenuItem(menuItem);
|
||||||
fileMenu.add(menuItem);
|
fileMenu.add(menuItem);
|
||||||
|
|
||||||
|
if (isViewer) {
|
||||||
|
menuItem = new JMenuItem("Export Data ...");
|
||||||
|
menuItem.addActionListener(new ExportData(getGuiFrame()));
|
||||||
|
startMenuEnabler.addMenuItem(menuItem);
|
||||||
|
fileMenu.add(menuItem);
|
||||||
|
}
|
||||||
|
|
||||||
for (int i = 0; i < pamControllerInterface.getNumControlledUnits(); i++) {
|
for (int i = 0; i < pamControllerInterface.getNumControlledUnits(); i++) {
|
||||||
|
|
||||||
menuItem = pamControllerInterface.getControlledUnit(i).createFileMenu(frame);
|
menuItem = pamControllerInterface.getControlledUnit(i).createFileMenu(frame);
|
||||||
@ -975,6 +982,19 @@ public class PamGui extends PamView implements WindowListener, PamSettings {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class ExportData implements ActionListener {
|
||||||
|
private JFrame parentFrame;
|
||||||
|
|
||||||
|
public ExportData(JFrame parentFrame) {
|
||||||
|
super();
|
||||||
|
this.parentFrame = parentFrame;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void actionPerformed(ActionEvent e) {
|
||||||
|
PamController.getInstance().exportData(parentFrame);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
class MenuGeneralXMLExport implements ActionListener {
|
class MenuGeneralXMLExport implements ActionListener {
|
||||||
private JFrame parentFrame;
|
private JFrame parentFrame;
|
||||||
public MenuGeneralXMLExport(JFrame parentFrame) {
|
public MenuGeneralXMLExport(JFrame parentFrame) {
|
||||||
@ -1164,6 +1184,7 @@ public class PamGui extends PamView implements WindowListener, PamSettings {
|
|||||||
pamControllerInterface.orderModules(frame);
|
pamControllerInterface.orderModules(frame);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class menuArray implements ActionListener {
|
class menuArray implements ActionListener {
|
||||||
public void actionPerformed(ActionEvent ev){
|
public void actionPerformed(ActionEvent ev){
|
||||||
ArrayManager.getArrayManager().showArrayDialog(getGuiFrame());
|
ArrayManager.getArrayManager().showArrayDialog(getGuiFrame());
|
||||||
|
@ -13,6 +13,8 @@ import javax.swing.JRadioButton;
|
|||||||
import javax.swing.border.Border;
|
import javax.swing.border.Border;
|
||||||
import javax.swing.border.TitledBorder;
|
import javax.swing.border.TitledBorder;
|
||||||
|
|
||||||
|
import PamView.PamAWTUtils;
|
||||||
|
import PamView.PamView;
|
||||||
import PamView.dialog.PamDialogPanel;
|
import PamView.dialog.PamDialogPanel;
|
||||||
import PamView.dialog.PamGridBagContraints;
|
import PamView.dialog.PamGridBagContraints;
|
||||||
|
|
||||||
@ -130,7 +132,11 @@ public class DataSelectorDialogPanel implements PamDialogPanel {
|
|||||||
|
|
||||||
public void enableComponent() {
|
public void enableComponent() {
|
||||||
boolean enable = !disableButton.isSelected();
|
boolean enable = !disableButton.isSelected();
|
||||||
innerPanel.getDialogComponent().setEnabled(enable);
|
// System.out.println("Disable!!! " + enable);
|
||||||
|
PamAWTUtils.setPanelEnabled(innerPanel.getDialogComponent(), enable);
|
||||||
|
|
||||||
|
//disable in swing is not recursive
|
||||||
|
// innerPanel.getDialogComponent().setEnabled(enable);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -79,7 +79,7 @@ public class CTMSettingsPanel extends TMSettingsPanel {
|
|||||||
*/
|
*/
|
||||||
private void setPanelEnabled(boolean enable) {
|
private void setPanelEnabled(boolean enable) {
|
||||||
PamAWTUtils.setPanelEnabled(getFilterPanel(), enable);
|
PamAWTUtils.setPanelEnabled(getFilterPanel(), enable);
|
||||||
PamAWTUtils.setPanelEnabled(getLocPanel(), enable);
|
PamAWTUtils.setPanelEnabled(getLocPanel(), enable);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,5 +1,38 @@
|
|||||||
package export.CSVExport;
|
package export.CSVExport;
|
||||||
|
|
||||||
public class CSVExportManager {
|
import java.io.File;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import PamguardMVC.PamDataUnit;
|
||||||
|
import export.PamDataUnitExporter;
|
||||||
|
|
||||||
|
public class CSVExportManager implements PamDataUnitExporter{
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean hasCompatibleUnits(Class dataUnitType) {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean exportData(File fileName, List<PamDataUnit> dataUnits, boolean append) {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getFileExtension() {
|
||||||
|
return "csv";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getIconString() {
|
||||||
|
return "mdi2f-file-table-outline";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getName() {
|
||||||
|
return "CSV Export";
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -84,7 +84,7 @@ public abstract class MLDataUnitExport<T extends PamDataUnit<?, ?>> {
|
|||||||
double datenumMT = PamCalendar.millistoDateNum(dataUnit.getTimeMilliseconds());
|
double datenumMT = PamCalendar.millistoDateNum(dataUnit.getTimeMilliseconds());
|
||||||
Matrix date = Mat5.newScalar(datenumMT);
|
Matrix date = Mat5.newScalar(datenumMT);
|
||||||
|
|
||||||
mlStruct.set("date", date);
|
mlStruct.set("date", index, date);
|
||||||
|
|
||||||
//add detection specific data
|
//add detection specific data
|
||||||
mlStruct= addDetectionSpecificFields(mlStruct, index, dataUnit);
|
mlStruct= addDetectionSpecificFields(mlStruct, index, dataUnit);
|
||||||
|
@ -2,13 +2,20 @@ package export.MLExport;
|
|||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
import java.text.SimpleDateFormat;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Comparator;
|
||||||
|
import java.util.Date;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.NoSuchElementException;
|
||||||
|
import java.util.zip.Deflater;
|
||||||
|
|
||||||
|
import PamUtils.PamCalendar;
|
||||||
import PamguardMVC.PamDataUnit;
|
import PamguardMVC.PamDataUnit;
|
||||||
import export.PamDataUnitExporter;
|
import export.PamDataUnitExporter;
|
||||||
import us.hebi.matlab.mat.format.Mat5;
|
import us.hebi.matlab.mat.format.Mat5;
|
||||||
import us.hebi.matlab.mat.format.Mat5File;
|
import us.hebi.matlab.mat.format.Mat5File;
|
||||||
|
import us.hebi.matlab.mat.format.Mat5Writer;
|
||||||
import us.hebi.matlab.mat.types.Matrix;
|
import us.hebi.matlab.mat.types.Matrix;
|
||||||
import us.hebi.matlab.mat.types.Sink;
|
import us.hebi.matlab.mat.types.Sink;
|
||||||
import us.hebi.matlab.mat.types.Sinks;
|
import us.hebi.matlab.mat.types.Sinks;
|
||||||
@ -25,12 +32,20 @@ public class MLDetectionsManager implements PamDataUnitExporter {
|
|||||||
|
|
||||||
public static final String extension = "mat";
|
public static final String extension = "mat";
|
||||||
|
|
||||||
|
// Creating date format
|
||||||
|
public static SimpleDateFormat dataFormat = new SimpleDateFormat(
|
||||||
|
"yyyyMMdd_HHmmss_SSS");
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* All the possible MLDataUnitExport export classes.
|
* All the possible MLDataUnitExport export classes.
|
||||||
*/
|
*/
|
||||||
ArrayList<MLDataUnitExport> mlDataUnitsExport = new ArrayList<MLDataUnitExport>();
|
ArrayList<MLDataUnitExport> mlDataUnitsExport = new ArrayList<MLDataUnitExport>();
|
||||||
|
|
||||||
|
private Sink sink;
|
||||||
|
|
||||||
|
private File currentFile;
|
||||||
|
|
||||||
|
|
||||||
public MLDetectionsManager(){
|
public MLDetectionsManager(){
|
||||||
mlDataUnitsExport.add(new MLClickExport());
|
mlDataUnitsExport.add(new MLClickExport());
|
||||||
@ -55,12 +70,60 @@ public class MLDetectionsManager implements PamDataUnitExporter {
|
|||||||
@Override
|
@Override
|
||||||
public boolean exportData(File fileName, List<PamDataUnit> dataUnits, boolean append) {
|
public boolean exportData(File fileName, List<PamDataUnit> dataUnits, boolean append) {
|
||||||
|
|
||||||
|
System.out.println("Export: " + dataUnits.size() + " data units " + append);
|
||||||
|
|
||||||
|
if (dataUnits==null || dataUnits.size()<1) {
|
||||||
|
//nothing to write but no error.
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
Mat5File matFile = Mat5.newMatFile();
|
|
||||||
Sink sink = Sinks.newMappedFile(fileName, Casts.sint32(1000000));
|
|
||||||
|
|
||||||
matFile.writeTo(sink);//Streams the data into a MAT file?
|
Struct dataUnitsStruct = dataUnits2MAT(dataUnits);
|
||||||
|
|
||||||
|
// then
|
||||||
|
PamDataUnit minByTime = dataUnits
|
||||||
|
.stream()
|
||||||
|
.min(Comparator.comparing(PamDataUnit::getTimeMilliseconds))
|
||||||
|
.orElseThrow(NoSuchElementException::new);
|
||||||
|
|
||||||
|
//matlab struct must start with a letter.
|
||||||
|
Date date = new Date(minByTime.getTimeMilliseconds());
|
||||||
|
String entryName = "det_" + dataFormat.format( date);
|
||||||
|
|
||||||
|
//is there an existing sink? Is that sink writing to the correct file?
|
||||||
|
if (sink==null || !fileName.equals(currentFile)) {
|
||||||
|
|
||||||
|
System.out.println("Export: " + dataUnitsStruct.getNumDimensions() + entryName);
|
||||||
|
|
||||||
|
currentFile = fileName;
|
||||||
|
|
||||||
|
//create the sink for the next data so it can be appended to the file.
|
||||||
|
sink = Sinks.newStreamingFile(fileName);
|
||||||
|
|
||||||
|
//create the Mat File - gets all the headers right etc.
|
||||||
|
Mat5File matFile = Mat5.newMatFile();
|
||||||
|
matFile.addArray(entryName, dataUnitsStruct);
|
||||||
|
// matFile.addArray("two", Mat5.newScalar(2));
|
||||||
|
|
||||||
|
matFile.writeTo(sink);
|
||||||
|
|
||||||
|
matFile.close();
|
||||||
|
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
//write to the mat file without loading all contents into memory.
|
||||||
|
Mat5Writer writer = Mat5.newWriter(sink);
|
||||||
|
|
||||||
|
writer
|
||||||
|
.writeArray(entryName, dataUnitsStruct)
|
||||||
|
.setDeflateLevel(Deflater.NO_COMPRESSION);
|
||||||
|
// .writeArray("three", Mat5.newScalar(2));
|
||||||
|
|
||||||
|
writer.flush();
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
// TODO Auto-generated catch block
|
// TODO Auto-generated catch block
|
||||||
@ -68,7 +131,6 @@ public class MLDetectionsManager implements PamDataUnitExporter {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1,11 +1,14 @@
|
|||||||
package export;
|
package export;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
import java.text.SimpleDateFormat;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
import PamUtils.PamCalendar;
|
import PamUtils.PamCalendar;
|
||||||
import PamguardMVC.PamDataBlock;
|
import PamguardMVC.PamDataBlock;
|
||||||
import PamguardMVC.PamDataUnit;
|
import PamguardMVC.PamDataUnit;
|
||||||
|
import export.CSVExport.CSVExportManager;
|
||||||
import export.MLExport.MLDetectionsManager;
|
import export.MLExport.MLDetectionsManager;
|
||||||
import export.RExport.RExportManager;
|
import export.RExport.RExportManager;
|
||||||
import export.layoutFX.ExportParams;
|
import export.layoutFX.ExportParams;
|
||||||
@ -18,9 +21,9 @@ import export.wavExport.WavFileExportManager;
|
|||||||
public class PamExporterManager {
|
public class PamExporterManager {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The number of data units to save before saving.
|
* The number of data units to save before saving. This prevents too much being stored in memory
|
||||||
*/
|
*/
|
||||||
private static int BUFFER_SIZE = 1000;
|
private static int BUFFER_SIZE = 10000;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Keep the file size to around 1GB per file
|
* Keep the file size to around 1GB per file
|
||||||
@ -48,6 +51,10 @@ public class PamExporterManager {
|
|||||||
*/
|
*/
|
||||||
private ExportParams exportParams = new ExportParams();
|
private ExportParams exportParams = new ExportParams();
|
||||||
|
|
||||||
|
// Creating date format
|
||||||
|
public static SimpleDateFormat dataFormat = new SimpleDateFormat(
|
||||||
|
"yyyy_MM_dd_HHmmss");
|
||||||
|
|
||||||
public PamExporterManager() {
|
public PamExporterManager() {
|
||||||
pamExporters = new ArrayList<PamDataUnitExporter>();
|
pamExporters = new ArrayList<PamDataUnitExporter>();
|
||||||
|
|
||||||
@ -55,19 +62,35 @@ public class PamExporterManager {
|
|||||||
pamExporters.add(new MLDetectionsManager());
|
pamExporters.add(new MLDetectionsManager());
|
||||||
pamExporters.add(new RExportManager());
|
pamExporters.add(new RExportManager());
|
||||||
pamExporters.add(new WavFileExportManager());
|
pamExporters.add(new WavFileExportManager());
|
||||||
|
pamExporters.add(new CSVExportManager());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Add a data unit to the export list.
|
* Add a data unit to the export list.
|
||||||
|
* @param force - true to force saving of data e.g. at the end of processing.
|
||||||
*/
|
*/
|
||||||
public boolean exportDataUnit(PamDataUnit<?, ?> dataUnit) {
|
public boolean exportDataUnit(PamDataUnit<?, ?> dataUnit, boolean force) {
|
||||||
boolean exportOK = true;
|
boolean exportOK = true;
|
||||||
|
|
||||||
|
if (dataUnit==null) {
|
||||||
|
if (force) {
|
||||||
|
System.out.println("Write data 1!!" + dataUnitBuffer.size());
|
||||||
|
exportOK = pamExporters.get(exportParams.exportChoice).exportData(currentFile, dataUnitBuffer, true);
|
||||||
|
dataUnitBuffer.clear();
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
//if the data unit is null then save everything to the buffer.
|
//if the data unit is null then save everything to the buffer.
|
||||||
|
|
||||||
if (currentFile == null || isFileSizeMax(currentFile)) {
|
if (currentFile == null || isFileSizeMax(currentFile)) {
|
||||||
|
Date date = new Date(dataUnit.getTimeMilliseconds());
|
||||||
|
|
||||||
|
String newFileName = "PAM_" + dataFormat.format(date);
|
||||||
|
|
||||||
//create a new file - note each exporter is responsible for closing the file after writing
|
//create a new file - note each exporter is responsible for closing the file after writing
|
||||||
//so previous files should already be closed
|
//so previous files should already be closed
|
||||||
String fileName = (exportParams.folder + File.separator + PamCalendar.formatDate2(dataUnit.getTimeMilliseconds(), false)
|
String fileName = (exportParams.folder + File.separator + newFileName
|
||||||
+ "." + pamExporters.get(exportParams.exportChoice).getFileExtension());
|
+ "." + pamExporters.get(exportParams.exportChoice).getFileExtension());
|
||||||
|
|
||||||
currentFile = new File(fileName);
|
currentFile = new File(fileName);
|
||||||
@ -75,7 +98,11 @@ public class PamExporterManager {
|
|||||||
|
|
||||||
dataUnitBuffer.add(dataUnit);
|
dataUnitBuffer.add(dataUnit);
|
||||||
|
|
||||||
if (BUFFER_SIZE>=BUFFER_SIZE) {
|
// System.out.println("Write data unit " + dataUnitBuffer.size() + " to: "+ currentFile);
|
||||||
|
|
||||||
|
if (dataUnitBuffer.size()>=BUFFER_SIZE || force) {
|
||||||
|
System.out.println("Write data 2!!" + dataUnitBuffer.size());
|
||||||
|
|
||||||
exportOK = pamExporters.get(exportParams.exportChoice).exportData(currentFile, dataUnitBuffer, true);
|
exportOK = pamExporters.get(exportParams.exportChoice).exportData(currentFile, dataUnitBuffer, true);
|
||||||
dataUnitBuffer.clear();
|
dataUnitBuffer.clear();
|
||||||
}
|
}
|
||||||
@ -101,6 +128,8 @@ public class PamExporterManager {
|
|||||||
private static double getFileSizeMegaBytes(File file) {
|
private static double getFileSizeMegaBytes(File file) {
|
||||||
return (double) file.length() / (1024 * 1024);
|
return (double) file.length() / (1024 * 1024);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public boolean canExportDataBlock(PamDataBlock dataBlock) {
|
public boolean canExportDataBlock(PamDataBlock dataBlock) {
|
||||||
for (PamDataUnitExporter exporter:pamExporters) {
|
for (PamDataUnitExporter exporter:pamExporters) {
|
||||||
if (exporter.hasCompatibleUnits(dataBlock.getUnitClass())) return true;
|
if (exporter.hasCompatibleUnits(dataBlock.getUnitClass())) return true;
|
||||||
@ -127,5 +156,19 @@ public class PamExporterManager {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setCurrentFile(File file) {
|
||||||
|
this.currentFile=file;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public ExportParams getExportParams() {
|
||||||
|
return exportParams;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setExportParams(ExportParams currentParams) {
|
||||||
|
exportParams=currentParams;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,14 +1,20 @@
|
|||||||
package export.RExport;
|
package export.RExport;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
import java.io.FileOutputStream;
|
||||||
|
import java.io.IOException;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.zip.GZIPOutputStream;
|
||||||
|
|
||||||
|
import org.renjin.eval.Context;
|
||||||
|
import org.renjin.primitives.io.serialization.RDataWriter;
|
||||||
import org.renjin.sexp.ListVector;
|
import org.renjin.sexp.ListVector;
|
||||||
import org.renjin.sexp.PairList;
|
import org.renjin.sexp.PairList;
|
||||||
|
|
||||||
import PamguardMVC.PamDataUnit;
|
import PamguardMVC.PamDataUnit;
|
||||||
import export.PamDataUnitExporter;
|
import export.PamDataUnitExporter;
|
||||||
|
import pamViewFX.fxNodes.pamDialogFX.PamDialogFX;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Handles exporting pam data units into an rdata.
|
* Handles exporting pam data units into an rdata.
|
||||||
@ -24,6 +30,16 @@ public class RExportManager implements PamDataUnitExporter {
|
|||||||
*/
|
*/
|
||||||
ArrayList<RDataUnitExport> mlDataUnitsExport = new ArrayList<RDataUnitExport>();
|
ArrayList<RDataUnitExport> mlDataUnitsExport = new ArrayList<RDataUnitExport>();
|
||||||
|
|
||||||
|
private FileOutputStream fos;
|
||||||
|
|
||||||
|
private GZIPOutputStream zos;
|
||||||
|
|
||||||
|
private File currentFileName ;
|
||||||
|
|
||||||
|
private RDataWriter writer;
|
||||||
|
|
||||||
|
private Context context;
|
||||||
|
|
||||||
|
|
||||||
public RExportManager(){
|
public RExportManager(){
|
||||||
/***Add more options here to export data units****/
|
/***Add more options here to export data units****/
|
||||||
@ -32,6 +48,56 @@ public class RExportManager implements PamDataUnitExporter {
|
|||||||
mlDataUnitsExport.add(new RRawExport()); //should be last in case raw data holders have specific exporters
|
mlDataUnitsExport.add(new RRawExport()); //should be last in case raw data holders have specific exporters
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean exportData(File fileName, List<PamDataUnit> dataUnits, boolean append) {
|
||||||
|
|
||||||
|
//convert the data units to
|
||||||
|
RData dataUnitsR = dataUnits2R(dataUnits);
|
||||||
|
|
||||||
|
// System.out.println("Export R file!!" + dataUnits.size());
|
||||||
|
|
||||||
|
//now write the file
|
||||||
|
try {
|
||||||
|
|
||||||
|
//is there an existing writer? Is that writer writing to the correct file?
|
||||||
|
if (zos==null || fileName.equals(currentFileName)) {
|
||||||
|
|
||||||
|
if (zos!=null) {
|
||||||
|
zos.close();
|
||||||
|
writer.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
currentFileName = fileName;
|
||||||
|
|
||||||
|
// System.out.println("MLDATA size: "+ mlData.size());
|
||||||
|
// System.out.println("---MLArray----");
|
||||||
|
// for (int i=0; i<mlData.size(); i++) {
|
||||||
|
// System.out.println(mlData.get(i));
|
||||||
|
// System.out.println("-------");
|
||||||
|
// }
|
||||||
|
// System.out.println("--------------");
|
||||||
|
|
||||||
|
|
||||||
|
context = Context.newTopLevelContext();
|
||||||
|
|
||||||
|
fos = new FileOutputStream(fileName);
|
||||||
|
zos = new GZIPOutputStream(fos);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
writer = new RDataWriter(context, zos);
|
||||||
|
writer.save(dataUnitsR.rData.build());
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
catch (IOException e1) {
|
||||||
|
e1.printStackTrace();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Check whether there are compatible data units to be exported.
|
* Check whether there are compatible data units to be exported.
|
||||||
* @param dataUnits - the data unit list
|
* @param dataUnits - the data unit list
|
||||||
@ -64,7 +130,7 @@ public class RExportManager implements PamDataUnitExporter {
|
|||||||
* @param dataUnits - a list of data units to convert to matlab structures.
|
* @param dataUnits - a list of data units to convert to matlab structures.
|
||||||
* @return list of list of R strucutures ready for saving to .RData file.
|
* @return list of list of R strucutures ready for saving to .RData file.
|
||||||
*/
|
*/
|
||||||
public RData dataUnits2R(ArrayList<PamDataUnit> dataUnits){
|
public RData dataUnits2R(List<PamDataUnit> dataUnits){
|
||||||
|
|
||||||
//if there's a mixed bunch of data units then we want separate arrays of structures. So a structure of arrays of structures.
|
//if there's a mixed bunch of data units then we want separate arrays of structures. So a structure of arrays of structures.
|
||||||
//so, need to sort compatible data units.
|
//so, need to sort compatible data units.
|
||||||
@ -136,12 +202,6 @@ public class RExportManager implements PamDataUnitExporter {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean exportData(File fileName, List<PamDataUnit> dataUnits, boolean append) {
|
|
||||||
// TODO Auto-generated method stub
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getFileExtension() {
|
public String getFileExtension() {
|
||||||
return "RData";
|
return "RData";
|
||||||
|
@ -13,7 +13,7 @@ public class ExportParams implements Serializable, Cloneable {
|
|||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
private static final long serialVersionUID = 1L;
|
private static final long serialVersionUID = 2L;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The index of the export choice.
|
* The index of the export choice.
|
||||||
@ -25,6 +25,11 @@ public class ExportParams implements Serializable, Cloneable {
|
|||||||
*/
|
*/
|
||||||
public String folder = System.getProperty("user.home");
|
public String folder = System.getProperty("user.home");
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The maximum file size in Megabytes
|
||||||
|
*/
|
||||||
|
public Double maximumFileSize = 1000.0;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ExportParams clone() {
|
public ExportParams clone() {
|
||||||
try {
|
try {
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
package export.swing;
|
package export.swing;
|
||||||
|
|
||||||
import java.awt.BorderLayout;
|
|
||||||
import java.awt.Color;
|
import java.awt.Color;
|
||||||
import java.awt.Dimension;
|
import java.awt.Dimension;
|
||||||
import java.awt.Frame;
|
import java.awt.Frame;
|
||||||
@ -11,14 +10,10 @@ import java.awt.event.ActionListener;
|
|||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
|
||||||
import javax.swing.Box;
|
|
||||||
import javax.swing.BoxLayout;
|
import javax.swing.BoxLayout;
|
||||||
import javax.swing.ButtonGroup;
|
import javax.swing.ButtonGroup;
|
||||||
import javax.swing.Icon;
|
|
||||||
import javax.swing.JCheckBox;
|
|
||||||
import javax.swing.JFileChooser;
|
import javax.swing.JFileChooser;
|
||||||
import javax.swing.JLabel;
|
import javax.swing.JLabel;
|
||||||
import javax.swing.JPanel;
|
|
||||||
import javax.swing.JSpinner;
|
import javax.swing.JSpinner;
|
||||||
import javax.swing.JSpinner.DefaultEditor;
|
import javax.swing.JSpinner.DefaultEditor;
|
||||||
import javax.swing.JTextField;
|
import javax.swing.JTextField;
|
||||||
@ -29,13 +24,13 @@ import javax.swing.border.TitledBorder;
|
|||||||
|
|
||||||
import org.kordamp.ikonli.Ikon;
|
import org.kordamp.ikonli.Ikon;
|
||||||
import org.kordamp.ikonli.fileicons.FileIcons;
|
import org.kordamp.ikonli.fileicons.FileIcons;
|
||||||
import org.kordamp.ikonli.materialdesign2.MaterialDesignA;
|
|
||||||
import org.kordamp.ikonli.materialdesign2.MaterialDesignF;
|
import org.kordamp.ikonli.materialdesign2.MaterialDesignF;
|
||||||
import org.kordamp.ikonli.swing.FontIcon;
|
import org.kordamp.ikonli.swing.FontIcon;
|
||||||
|
|
||||||
import PamController.PamController;
|
import PamController.PamController;
|
||||||
import PamUtils.PamFileChooser;
|
import PamUtils.PamFileChooser;
|
||||||
import PamView.dialog.PamButton;
|
import PamView.dialog.PamButton;
|
||||||
|
import PamView.dialog.PamDialog;
|
||||||
import PamView.dialog.PamGridBagContraints;
|
import PamView.dialog.PamGridBagContraints;
|
||||||
import PamView.panel.PamPanel;
|
import PamView.panel.PamPanel;
|
||||||
import PamguardMVC.PamDataBlock;
|
import PamguardMVC.PamDataBlock;
|
||||||
@ -43,6 +38,7 @@ import export.PamExporterManager;
|
|||||||
import export.layoutFX.ExportParams;
|
import export.layoutFX.ExportParams;
|
||||||
import offlineProcessing.OLProcessDialog;
|
import offlineProcessing.OLProcessDialog;
|
||||||
import offlineProcessing.OfflineTaskGroup;
|
import offlineProcessing.OfflineTaskGroup;
|
||||||
|
import offlineProcessing.TaskStatus;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Handles an offline dialog for processing offline data and exporting to bespoke file types.
|
* Handles an offline dialog for processing offline data and exporting to bespoke file types.
|
||||||
@ -150,9 +146,15 @@ public class ExportProcessDialog {
|
|||||||
|
|
||||||
public ExportOLDialog(Window parentFrame, OfflineTaskGroup taskGroup, String title) {
|
public ExportOLDialog(Window parentFrame, OfflineTaskGroup taskGroup, String title) {
|
||||||
super(parentFrame, taskGroup, title);
|
super(parentFrame, taskGroup, title);
|
||||||
// TODO Auto-generated constructor stub
|
|
||||||
|
|
||||||
|
//remove the notes panel - don't need this for export.
|
||||||
|
super.removeNotePanel();
|
||||||
|
//remove delete database entried - not used.
|
||||||
|
super.getDeleteOldDataBox().setVisible(false);
|
||||||
|
|
||||||
|
//construc tthe panel.
|
||||||
PamPanel mainPanel = new PamPanel();
|
PamPanel mainPanel = new PamPanel();
|
||||||
|
|
||||||
mainPanel.setLayout(new BoxLayout(mainPanel, BoxLayout.PAGE_AXIS));
|
mainPanel.setLayout(new BoxLayout(mainPanel, BoxLayout.PAGE_AXIS));
|
||||||
mainPanel.setBorder(new TitledBorder("Export Settings"));
|
mainPanel.setBorder(new TitledBorder("Export Settings"));
|
||||||
|
|
||||||
@ -161,9 +163,9 @@ public class ExportProcessDialog {
|
|||||||
PamPanel buttonPanel = new PamPanel();
|
PamPanel buttonPanel = new PamPanel();
|
||||||
|
|
||||||
ActionListener listener = actionEvent -> {
|
ActionListener listener = actionEvent -> {
|
||||||
System.out.println(actionEvent.getActionCommand() + " Selected");
|
// System.out.println(actionEvent.getActionCommand() + " Selected");
|
||||||
//TODO set the buttons to be disabled or enabled.
|
//TODO set the buttons to be disabled or enabled.
|
||||||
|
enableTasks(getExportSelection());
|
||||||
};
|
};
|
||||||
|
|
||||||
exportButtons = new JToggleButton[exportManager.getNumExporters()];
|
exportButtons = new JToggleButton[exportManager.getNumExporters()];
|
||||||
@ -192,8 +194,8 @@ public class ExportProcessDialog {
|
|||||||
c.gridy = 0;
|
c.gridy = 0;
|
||||||
|
|
||||||
addComponent(p, exportTo = new JTextField(), c);
|
addComponent(p, exportTo = new JTextField(), c);
|
||||||
exportTo.setMinimumSize(new Dimension(170, 25));
|
exportTo.setMinimumSize(new Dimension(180, 25));
|
||||||
exportTo.setPreferredSize(new Dimension(170, 25));
|
exportTo.setPreferredSize(new Dimension(180, 25));
|
||||||
|
|
||||||
c.gridx +=3;
|
c.gridx +=3;
|
||||||
c.gridwidth = 1;
|
c.gridwidth = 1;
|
||||||
@ -241,9 +243,26 @@ public class ExportProcessDialog {
|
|||||||
|
|
||||||
//add the main panel at a different index.
|
//add the main panel at a different index.
|
||||||
getMainPanel().add(mainPanel, 1);
|
getMainPanel().add(mainPanel, 1);
|
||||||
|
|
||||||
|
pack();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Enable which task are disables and enabled.
|
||||||
|
* @param exportSelection
|
||||||
|
*/
|
||||||
|
private void enableTasks(int exportSelection) {
|
||||||
|
this.currentParams = getExportParams();
|
||||||
|
exportManager.setExportParams(currentParams);
|
||||||
|
// ExportTask task;
|
||||||
|
// for (int i=0; i<this.getTaskGroup().getNTasks(); i++) {
|
||||||
|
// task = (ExportTask) this.getTaskGroup().getTask(i);
|
||||||
|
// }
|
||||||
|
enableControls();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
private Ikon getIconFromString(String iconString) {
|
private Ikon getIconFromString(String iconString) {
|
||||||
|
|
||||||
@ -262,13 +281,43 @@ public class ExportProcessDialog {
|
|||||||
case "mdi2f-file-music":
|
case "mdi2f-file-music":
|
||||||
icon=MaterialDesignF.FILE_MUSIC;
|
icon=MaterialDesignF.FILE_MUSIC;
|
||||||
break;
|
break;
|
||||||
|
case "mdi2f-file-table-outline":
|
||||||
|
icon=MaterialDesignF.FILE_TABLE_OUTLINE;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
return icon;
|
return icon;
|
||||||
}
|
}
|
||||||
|
|
||||||
public ExportParams getExportParams() {
|
private int getExportSelection() {
|
||||||
|
int sel=-1;
|
||||||
|
for (int i=0; i<exportButtons.length; i++) {
|
||||||
|
if (this.exportButtons[i].isSelected()) {
|
||||||
|
sel=i;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return sel;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public ExportParams getExportParams() {
|
||||||
|
currentParams.folder = null;
|
||||||
|
|
||||||
|
if (exportTo.getText().length()>0) {
|
||||||
|
|
||||||
|
File file = new File(exportTo.getText());
|
||||||
|
|
||||||
|
if (!(file.exists() && file.isDirectory())) {
|
||||||
|
currentParams.folder = null;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
currentParams.folder = file.getAbsolutePath();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
currentParams.exportChoice = getExportSelection();
|
||||||
|
currentParams.maximumFileSize = (Double) spinner.getValue();
|
||||||
|
|
||||||
return currentParams;
|
return currentParams;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -276,6 +325,13 @@ public class ExportProcessDialog {
|
|||||||
public boolean getParams() {
|
public boolean getParams() {
|
||||||
//make sure we update the current paramters before processing starts.
|
//make sure we update the current paramters before processing starts.
|
||||||
this.currentParams = getExportParams();
|
this.currentParams = getExportParams();
|
||||||
|
exportManager.setExportParams(currentParams);
|
||||||
|
|
||||||
|
if (this.currentParams.folder==null) {
|
||||||
|
return PamDialog.showWarning(super.getOwner(), "No folder or file selected", "You must select an output folder");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
return super.getParams();
|
return super.getParams();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -286,8 +342,14 @@ public class ExportProcessDialog {
|
|||||||
|
|
||||||
buttonGroup.clearSelection();
|
buttonGroup.clearSelection();
|
||||||
exportButtons[params.exportChoice].setSelected(true);
|
exportButtons[params.exportChoice].setSelected(true);
|
||||||
|
|
||||||
|
exportTo.setText(currentParams.folder);
|
||||||
|
|
||||||
|
spinner.setValue(currentParams.maximumFileSize);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -312,4 +374,5 @@ public class ExportProcessDialog {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
@ -27,11 +27,14 @@ public class ExportTask extends OfflineTask<PamDataUnit<?,?>>{
|
|||||||
*/
|
*/
|
||||||
private DataSelector dataSelector;
|
private DataSelector dataSelector;
|
||||||
|
|
||||||
|
private boolean canExport;
|
||||||
|
|
||||||
public ExportTask(PamDataBlock<PamDataUnit<?, ?>> parentDataBlock, PamExporterManager exporter) {
|
public ExportTask(PamDataBlock<PamDataUnit<?, ?>> parentDataBlock, PamExporterManager exporter) {
|
||||||
super(parentDataBlock);
|
super(parentDataBlock);
|
||||||
this.exporter = exporter;
|
this.exporter = exporter;
|
||||||
dataSelector=parentDataBlock.getDataSelectCreator().getDataSelector(this.getUnitName() +"_clicks", false, null);
|
dataSelector=parentDataBlock.getDataSelectCreator().getDataSelector(this.getUnitName() +"_clicks", false, null);
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -41,20 +44,25 @@ public class ExportTask extends OfflineTask<PamDataUnit<?,?>>{
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean processDataUnit(PamDataUnit<?, ?> dataUnit) {
|
public boolean processDataUnit(PamDataUnit<?, ?> dataUnit) {
|
||||||
exporter.exportDataUnit(dataUnit);
|
if (dataSelector==null) exporter.exportDataUnit(dataUnit, false);
|
||||||
return true;
|
else if (dataSelector.scoreData(dataUnit)>0) {
|
||||||
|
exporter.exportDataUnit(dataUnit, false);
|
||||||
|
}
|
||||||
|
return false; //we don't need to indicate that anything has changed - we are just exporting.
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void newDataLoad(long startTime, long endTime, OfflineDataMapPoint mapPoint) {
|
public void newDataLoad(long startTime, long endTime, OfflineDataMapPoint mapPoint) {
|
||||||
// TODO Auto-generated method stub
|
// TODO Auto-generated method stub
|
||||||
|
// System.out.println("EXPORTER: new data load");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void loadedDataComplete() {
|
public void loadedDataComplete() {
|
||||||
//force the exporter so save any remaning data units in the buffer
|
System.out.println("EXPORTER: loaded data complete");
|
||||||
exporter.exportDataUnit(null);
|
//force the exporter so save any renaming data units in the buffer
|
||||||
|
exporter.exportDataUnit(null, true);
|
||||||
|
exporter.setCurrentFile(null);
|
||||||
|
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
@ -79,4 +87,25 @@ public class ExportTask extends OfflineTask<PamDataUnit<?,?>>{
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set whether the task can export based on the current selection
|
||||||
|
* @param exportSelection - the index of the selected exporter
|
||||||
|
*/
|
||||||
|
public boolean canExport(int exportSelection) {
|
||||||
|
return exporter.getExporter(exportSelection).hasCompatibleUnits(getDataBlock().getUnitClass());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean canRun() {
|
||||||
|
boolean can = getDataBlock() != null;
|
||||||
|
|
||||||
|
if (can) {
|
||||||
|
//check whether we can export based on the export selection
|
||||||
|
can = canExport(exporter.getExportParams().exportChoice);
|
||||||
|
}
|
||||||
|
|
||||||
|
return can;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -47,20 +47,20 @@ public class FormsTabPanel implements PamTabPanel {
|
|||||||
// keyManager=KeyboardFocusManager.getCurrentKeyboardFocusManager();
|
// keyManager=KeyboardFocusManager.getCurrentKeyboardFocusManager();
|
||||||
// keyManager.addKeyEventDispatcher(new LoggerKeyEventDispatcher());
|
// keyManager.addKeyEventDispatcher(new LoggerKeyEventDispatcher());
|
||||||
|
|
||||||
/** Global (OS-level) hotkey manager:
|
// /** Global (OS-level) hotkey manager:
|
||||||
* jnativehook supported systems: Windows, X11, MacOS
|
// * jnativehook supported systems: Windows, X11, MacOS
|
||||||
*
|
// *
|
||||||
*/
|
// */
|
||||||
try {
|
// try {
|
||||||
LogManager.getLogManager().reset();
|
// LogManager.getLogManager().reset();
|
||||||
GlobalScreen.setEventDispatcher(new SwingDispatchService());
|
// GlobalScreen.setEventDispatcher(new SwingDispatchService());
|
||||||
GlobalScreen.registerNativeHook();
|
// GlobalScreen.registerNativeHook();
|
||||||
GlobalScreen.addNativeKeyListener(new GlobalKeyListenerExample());
|
// GlobalScreen.addNativeKeyListener(new GlobalKeyListenerExample());
|
||||||
}
|
// }
|
||||||
catch (NativeHookException ex) {
|
// catch (NativeHookException ex) {
|
||||||
System.err.println("There was a problem registering the native hook.");
|
// System.err.println("There was a problem registering the native hook.");
|
||||||
System.err.println(ex.getMessage());
|
// System.err.println(ex.getMessage());
|
||||||
}
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -13,7 +13,6 @@ import java.awt.event.WindowEvent;
|
|||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
|
||||||
import javax.swing.BoxLayout;
|
import javax.swing.BoxLayout;
|
||||||
import javax.swing.ImageIcon;
|
|
||||||
import javax.swing.JButton;
|
import javax.swing.JButton;
|
||||||
import javax.swing.JCheckBox;
|
import javax.swing.JCheckBox;
|
||||||
import javax.swing.JComboBox;
|
import javax.swing.JComboBox;
|
||||||
@ -39,7 +38,6 @@ import PamView.panel.PamAlignmentPanel;
|
|||||||
import PamView.panel.PamPanel;
|
import PamView.panel.PamPanel;
|
||||||
import PamView.panel.PamProgressBar;
|
import PamView.panel.PamProgressBar;
|
||||||
import PamguardMVC.PamDataBlock;
|
import PamguardMVC.PamDataBlock;
|
||||||
import export.layoutFX.ExportParams;
|
|
||||||
import offlineProcessing.logging.OldTaskData;
|
import offlineProcessing.logging.OldTaskData;
|
||||||
import offlineProcessing.logging.TaskLogging;
|
import offlineProcessing.logging.TaskLogging;
|
||||||
import offlineProcessing.superdet.OfflineSuperDetFilter;
|
import offlineProcessing.superdet.OfflineSuperDetFilter;
|
||||||
@ -95,7 +93,7 @@ public class OLProcessDialog extends PamDialog {
|
|||||||
|
|
||||||
|
|
||||||
// public static ImageIcon settings = new ImageIcon(ClassLoader.getSystemResource("Resources/SettingsButtonSmall2.png"));
|
// public static ImageIcon settings = new ImageIcon(ClassLoader.getSystemResource("Resources/SettingsButtonSmall2.png"));
|
||||||
public static FontIcon settings = FontIcon.of(MaterialDesignC.COG, 20, Color.DARK_GRAY);
|
public static FontIcon settings = FontIcon.of(MaterialDesignC.COG, 20, Color.DARK_GRAY);
|
||||||
|
|
||||||
|
|
||||||
TaskStatus currentStatus = TaskStatus.IDLE;
|
TaskStatus currentStatus = TaskStatus.IDLE;
|
||||||
@ -105,6 +103,13 @@ public class OLProcessDialog extends PamDialog {
|
|||||||
*/
|
*/
|
||||||
private JPanel mainPanel;
|
private JPanel mainPanel;
|
||||||
|
|
||||||
|
private JPanel notePanel;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* True if a note is required for the
|
||||||
|
*/
|
||||||
|
private boolean isNeedaNote = true;
|
||||||
|
|
||||||
|
|
||||||
public OLProcessDialog(Window parentFrame, OfflineTaskGroup taskGroup, String title) {
|
public OLProcessDialog(Window parentFrame, OfflineTaskGroup taskGroup, String title) {
|
||||||
super(parentFrame, title, false);
|
super(parentFrame, title, false);
|
||||||
@ -165,7 +170,7 @@ public class OLProcessDialog extends PamDialog {
|
|||||||
c.gridy++;
|
c.gridy++;
|
||||||
}
|
}
|
||||||
|
|
||||||
JPanel notePanel = new JPanel(new BorderLayout());
|
notePanel = new JPanel(new BorderLayout());
|
||||||
notePanel.setBorder(new TitledBorder("Notes"));
|
notePanel.setBorder(new TitledBorder("Notes"));
|
||||||
noteText = new DBTextArea(2, 40, TaskLogging.TASK_NOTE_LENGTH);
|
noteText = new DBTextArea(2, 40, TaskLogging.TASK_NOTE_LENGTH);
|
||||||
noteText.getComponent().setToolTipText("Notes to add to database record of complete tasks");
|
noteText.getComponent().setToolTipText("Notes to add to database record of complete tasks");
|
||||||
@ -185,11 +190,14 @@ public class OLProcessDialog extends PamDialog {
|
|||||||
c.gridwidth = 1;
|
c.gridwidth = 1;
|
||||||
addComponent(progressPanel, new JLabel("File ", SwingConstants.RIGHT), c);
|
addComponent(progressPanel, new JLabel("File ", SwingConstants.RIGHT), c);
|
||||||
c.gridx++;
|
c.gridx++;
|
||||||
|
c.gridwidth = 2;
|
||||||
addComponent(progressPanel, loadedProgress = new PamProgressBar(0, 100), c);
|
addComponent(progressPanel, loadedProgress = new PamProgressBar(0, 100), c);
|
||||||
c.gridx = 0;
|
c.gridx = 0;
|
||||||
c.gridy++;
|
c.gridy++;
|
||||||
|
c.gridwidth = 1;
|
||||||
addComponent(progressPanel, new JLabel("All Data ", SwingConstants.RIGHT), c);
|
addComponent(progressPanel, new JLabel("All Data ", SwingConstants.RIGHT), c);
|
||||||
c.gridx++;
|
c.gridx++;
|
||||||
|
c.gridwidth = 2;
|
||||||
addComponent(progressPanel, globalProgress = new PamProgressBar(00, 100), c);
|
addComponent(progressPanel, globalProgress = new PamProgressBar(00, 100), c);
|
||||||
|
|
||||||
mainPanel.add(dataSelectPanel);
|
mainPanel.add(dataSelectPanel);
|
||||||
@ -220,6 +228,15 @@ public class OLProcessDialog extends PamDialog {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Remove the notes panel.
|
||||||
|
*/
|
||||||
|
public void removeNotePanel() {
|
||||||
|
isNeedaNote = false;
|
||||||
|
mainPanel.remove(notePanel);
|
||||||
|
pack();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the main panel. This can be used to add additional controls if needed.
|
* Get the main panel. This can be used to add additional controls if needed.
|
||||||
* @return the main panel.
|
* @return the main panel.
|
||||||
@ -310,7 +327,7 @@ public class OLProcessDialog extends PamDialog {
|
|||||||
taskCheckBox[i].setSelected(false);
|
taskCheckBox[i].setSelected(false);
|
||||||
}
|
}
|
||||||
if (settingsButton[i] != null) {
|
if (settingsButton[i] != null) {
|
||||||
settingsButton[i].setEnabled(nr);
|
settingsButton[i].setEnabled(aTask.canRun() && nr);
|
||||||
}
|
}
|
||||||
if (taskCheckBox[i].isSelected()) {
|
if (taskCheckBox[i].isSelected()) {
|
||||||
selectedTasks++;
|
selectedTasks++;
|
||||||
@ -368,7 +385,7 @@ public class OLProcessDialog extends PamDialog {
|
|||||||
}
|
}
|
||||||
|
|
||||||
String note = noteText.getText();
|
String note = noteText.getText();
|
||||||
if (note == null || note.length() == 0) {
|
if ((note == null || note.length() == 0) && isNeedaNote) {
|
||||||
return PamDialog.showWarning(super.getOwner(), "Task note", "you must enter a note about what you are doing");
|
return PamDialog.showWarning(super.getOwner(), "Task note", "you must enter a note about what you are doing");
|
||||||
}
|
}
|
||||||
taskGroupParams.taskNote = note;
|
taskGroupParams.taskNote = note;
|
||||||
@ -376,6 +393,7 @@ public class OLProcessDialog extends PamDialog {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public void setTaskToolTips() {
|
public void setTaskToolTips() {
|
||||||
int nTasks = taskGroup.getNTasks();
|
int nTasks = taskGroup.getNTasks();
|
||||||
|
|
||||||
@ -844,4 +862,22 @@ public class OLProcessDialog extends PamDialog {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check whether a note is required.
|
||||||
|
* @return true if a note is required.
|
||||||
|
*/
|
||||||
|
public boolean isNeedaNote() {
|
||||||
|
return isNeedaNote;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set whether a note is required before processing
|
||||||
|
* @param isNeedaNote - true to require user to input a note.
|
||||||
|
*/
|
||||||
|
public void setNeedaNote(boolean isNeedaNote) {
|
||||||
|
this.isNeedaNote = isNeedaNote;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
39
src/pamguard/PAMGuard_sqlite.java
Normal file
39
src/pamguard/PAMGuard_sqlite.java
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
package pamguard;
|
||||||
|
|
||||||
|
import java.sql.Connection;
|
||||||
|
import java.sql.SQLException;
|
||||||
|
|
||||||
|
import org.sqlite.SQLiteConfig;
|
||||||
|
|
||||||
|
import generalDatabase.sqlite.SqliteSQLTypes;
|
||||||
|
|
||||||
|
public class PAMGuard_sqlite {
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
|
||||||
|
String dbName = "/Users/jdjm/Desktop/section2_cpod/hyskeir_pamguard.sqlite3";
|
||||||
|
/*
|
||||||
|
* Don't use the driver manager, but open from the built in command in
|
||||||
|
* SQLiteConfig. This will then correctly set the dateformat of the database.
|
||||||
|
*/
|
||||||
|
SQLiteConfig config = new SQLiteConfig();
|
||||||
|
config.setSharedCache(true);
|
||||||
|
config.enableRecursiveTriggers(true);
|
||||||
|
config.enableLoadExtension(true);
|
||||||
|
config.setDateClass(SqliteSQLTypes.dateClass.getValue());
|
||||||
|
config.setDateStringFormat(SQLiteConfig.DEFAULT_DATE_STRING_FORMAT);
|
||||||
|
|
||||||
|
Connection con = null;
|
||||||
|
try {
|
||||||
|
con = config.createConnection("jdbc:sqlite:" + dbName);
|
||||||
|
con.setAutoCommit(false);
|
||||||
|
} catch (SQLException e) {
|
||||||
|
// TODO Auto-generated catch block
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
System.out.println("Connection: " + con);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user