diff --git a/modules/AdministrationGUI/src/main/java/org/janelia/workstation/admin/AdministrationTopComponent.java b/modules/AdministrationGUI/src/main/java/org/janelia/workstation/admin/AdministrationTopComponent.java
index 0eb356c32..bec3b0b6a 100644
--- a/modules/AdministrationGUI/src/main/java/org/janelia/workstation/admin/AdministrationTopComponent.java
+++ b/modules/AdministrationGUI/src/main/java/org/janelia/workstation/admin/AdministrationTopComponent.java
@@ -44,11 +44,6 @@
)
@TopComponent.Registration(mode = "editor", openAtStartup = false)
@ActionID(category = "Window", id = "org.janelia.workstation.admin.AdministrationTopComponent")
-@ActionReference(path = "Menu/Window/Core", position = 10)
-@TopComponent.OpenActionRegistration(
- displayName = "#CTL_AdministrationTopComponentAction",
- preferredID = AdministrationTopComponent.PREFERRED_ID
-)
@Messages({
"CTL_AdministrationTopComponentAction=Administration Tool",
"CTL_AdministrationTopComponent=" + AdministrationTopComponent.LABEL_TEXT,
diff --git a/modules/AdministrationGUI/src/main/java/org/janelia/workstation/admin/RetrieveLogsPanel.java b/modules/AdministrationGUI/src/main/java/org/janelia/workstation/admin/RetrieveLogsPanel.java
index 62d807fa7..f6de83f29 100644
--- a/modules/AdministrationGUI/src/main/java/org/janelia/workstation/admin/RetrieveLogsPanel.java
+++ b/modules/AdministrationGUI/src/main/java/org/janelia/workstation/admin/RetrieveLogsPanel.java
@@ -29,6 +29,7 @@
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
+import java.util.Objects;
import java.util.stream.Collectors;
/**
@@ -140,11 +141,15 @@ public void actionPerformed(ActionEvent ae) {
null, null, AccessManager.getSubjectKey());
try {
BufferedWriter writer = new BufferedWriter(new FileWriter(fileOutputLocation.getText()));
- for(TmOperation log: logs) {
- writer.write(log.getTimestamp().toString() + "," +
- log.getWorkspaceId() + "," + log.getNeuronId() + "," +
- log.getUser() + "," + log.getActivity() + "," +
- log.getElapsedTime());
+ for (TmOperation log : logs) {
+ writer.write(
+ Objects.toString(log.getTimestamp(), "") + "," +
+ Objects.toString(log.getWorkspaceId(), "") + "," +
+ Objects.toString(log.getNeuronId(), "") + "," +
+ Objects.toString(log.getUser(), "") + "," +
+ Objects.toString(log.getActivity(), "") + "," +
+ Objects.toString(log.getElapsedTime(), "")
+ );
writer.newLine();
}
writer.close();
diff --git a/modules/AdministrationGUI/src/main/java/org/janelia/workstation/admin/nb_actions/OpenAdminPanelAction.java b/modules/AdministrationGUI/src/main/java/org/janelia/workstation/admin/nb_actions/OpenAdminPanelAction.java
new file mode 100644
index 000000000..339767a3b
--- /dev/null
+++ b/modules/AdministrationGUI/src/main/java/org/janelia/workstation/admin/nb_actions/OpenAdminPanelAction.java
@@ -0,0 +1,53 @@
+package org.janelia.workstation.admin.nb_actions;
+import java.awt.event.ActionEvent;
+
+import org.janelia.workstation.admin.AdministrationTopComponent;
+import org.janelia.workstation.core.api.AccessManager;
+import org.openide.awt.ActionID;
+import org.openide.awt.ActionReference;
+import org.openide.awt.ActionRegistration;
+import org.openide.util.HelpCtx;
+import org.openide.util.NbBundle.Messages;
+import org.openide.util.actions.SystemAction;
+import org.slf4j.LoggerFactory;
+import org.openide.windows.TopComponent;
+import org.openide.windows.WindowManager;
+
+@ActionID(
+ category = "Window",
+ id = "org.janelia.workstation.admin.OpenAdminTopComponentAction"
+)
+@ActionRegistration(
+ displayName = "#CTL_AdministrationTopComponentAction",
+ lazy = false
+)
+@Messages("CTL_AdministrationTopComponentAction=Administration Tool")
+public final class OpenAdminPanelAction extends SystemAction {
+
+ @Override
+ public String getName() {
+ return "Administration Tool";
+ }
+
+ @Override
+ public HelpCtx getHelpCtx() {
+ return null;
+ }
+
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ if (AccessManager.getAccessManager().isAdmin()) {
+ TopComponent win = WindowManager.getDefault()
+ .findTopComponent(AdministrationTopComponent.PREFERRED_ID);
+ if (win != null) {
+ win.open();
+ win.requestActive();
+ }
+ } else {
+ // either silently disable, or tell the user
+ LoggerFactory.getLogger(getClass())
+ .warn("Non-admin attempted to open Administration Tool");
+ }
+ }
+}
+
diff --git a/modules/AdministrationGUI/src/main/java/org/janelia/workstation/admin/nb_actions/OpenAdminPanelActionBuilder.java b/modules/AdministrationGUI/src/main/java/org/janelia/workstation/admin/nb_actions/OpenAdminPanelActionBuilder.java
new file mode 100644
index 000000000..eb25b3b1d
--- /dev/null
+++ b/modules/AdministrationGUI/src/main/java/org/janelia/workstation/admin/nb_actions/OpenAdminPanelActionBuilder.java
@@ -0,0 +1,22 @@
+package org.janelia.workstation.admin.nb_actions;
+
+import javax.swing.Action;
+
+import org.janelia.workstation.common.nb_action.RunAsMenuAction;
+import org.janelia.workstation.integration.spi.actions.AdminActionBuilder;
+import org.openide.util.actions.SystemAction;
+import org.openide.util.lookup.ServiceProvider;
+
+/**
+ * Builds the admin menu item for launching the Admin GUI.
+ *
+ * @author David Schauder
+ */
+@ServiceProvider(service = AdminActionBuilder.class, position=1)
+public final class OpenAdminPanelActionBuilder implements AdminActionBuilder {
+ @Override
+ public Action getAction() {
+ return SystemAction.get(OpenAdminPanelAction.class);
+ }
+}
+
diff --git a/modules/HortaTracer/src/main/java/org/janelia/horta/NeuronTracerTopComponent.java b/modules/HortaTracer/src/main/java/org/janelia/horta/NeuronTracerTopComponent.java
index 5760fb28f..db23750d8 100644
--- a/modules/HortaTracer/src/main/java/org/janelia/horta/NeuronTracerTopComponent.java
+++ b/modules/HortaTracer/src/main/java/org/janelia/horta/NeuronTracerTopComponent.java
@@ -117,12 +117,7 @@
import org.janelia.jacsstorage.clients.api.http.ClientProxy;
import org.janelia.model.domain.DomainConstants;
import org.janelia.model.domain.enums.FileType;
-import org.janelia.model.domain.tiledMicroscope.TmColorModel;
-import org.janelia.model.domain.tiledMicroscope.TmGeoAnnotation;
-import org.janelia.model.domain.tiledMicroscope.TmNeuronMetadata;
-import org.janelia.model.domain.tiledMicroscope.TmObjectMesh;
-import org.janelia.model.domain.tiledMicroscope.TmSample;
-import org.janelia.model.domain.tiledMicroscope.TmWorkspace;
+import org.janelia.model.domain.tiledMicroscope.*;
import org.janelia.rendering.RenderedVolumeLoader;
import org.janelia.rendering.RenderedVolumeLoaderImpl;
import org.janelia.scenewindow.OrbitPanZoomInteractor;
@@ -132,6 +127,7 @@
import org.janelia.scenewindow.fps.FrameTracker;
import org.janelia.workstation.common.actions.CopyToClipboardAction;
import org.janelia.workstation.controller.NeuronManager;
+import org.janelia.workstation.controller.TmViewerManager;
import org.janelia.workstation.controller.ViewerEventBus;
import org.janelia.workstation.controller.access.ModelTranslation;
import org.janelia.workstation.controller.action.AddEditNoteAction;
@@ -1356,8 +1352,12 @@ public void actionPerformed(ActionEvent e) {
viewMenu.add(new AbstractAction("Recenter on This 3D Position [left-click]") {
@Override
public void actionPerformed(ActionEvent e) {
+ long startTime = System.currentTimeMillis();
PerspectiveCamera pCam = (PerspectiveCamera) sceneWindow.getCamera();
neuronTraceLoader.animateToFocusXyz(mouseStageLocation, pCam.getVantage(), 150);
+ long endTime = System.currentTimeMillis();
+ TmViewerManager.getInstance().logOperation(TmOperation.Activity.RECENTER_3D_VIEW,
+ null, endTime-startTime);
}
});
}
@@ -1782,6 +1782,7 @@ public void actionPerformed(ActionEvent e) {
topMenu.add(new AbstractAction("Center on Current Anchor") {
@Override
public void actionPerformed(ActionEvent e) {
+ long startTime = System.currentTimeMillis();
PerspectiveCamera pCam = (PerspectiveCamera) sceneWindow.getCamera();
float[] vtxLocation = TmModelManager.getInstance().getLocationInMicrometers(vertex.getX(),
vertex.getY(), vertex.getZ());
@@ -1792,6 +1793,9 @@ public void actionPerformed(ActionEvent e) {
null,
false);
setSampleLocation(event);
+ long endTime = System.currentTimeMillis();
+ TmViewerManager.getInstance().logOperation(TmOperation.Activity.CENTER_CURRENT_ANCHOR,
+ null, endTime-startTime);
}
});
@@ -1833,24 +1837,36 @@ public void actionPerformed(ActionEvent e) {
topMenu.add(new AbstractAction("Set Vertex as Neuron Root") {
@Override
public void actionPerformed(ActionEvent e) {
+ long startTime = System.currentTimeMillis();
RerootNeuronAction action = new RerootNeuronAction();
action.execute(vertex.getNeuronId(), vertex.getId());
+ long endTime = System.currentTimeMillis();
+ TmViewerManager.getInstance().logOperation(TmOperation.Activity.SET_VERTEX_NEURON_ROOT,
+ null, endTime-startTime);
}
});
topMenu.add(new AbstractAction("Split Neuron Edge Between Vertices") {
@Override
public void actionPerformed(ActionEvent e) {
+ long startTime = System.currentTimeMillis();
SplitNeuronBetweenVerticesAction action = new SplitNeuronBetweenVerticesAction();
action.execute(vertex.getNeuronId(), vertex.getId());
+ long endTime = System.currentTimeMillis();
+ TmViewerManager.getInstance().logOperation(TmOperation.Activity.SPLIT_NEURON_EDGE_VERTICES,
+ null, endTime-startTime);
}
});
topMenu.add(new AbstractAction("Split Neurite At Vertex") {
@Override
public void actionPerformed(ActionEvent e) {
+ long startTime = System.currentTimeMillis();
SplitNeuronAtVertexAction action = new SplitNeuronAtVertexAction();
action.execute(vertex.getNeuronId(), vertex.getId());
+ long endTime = System.currentTimeMillis();
+ TmViewerManager.getInstance().logOperation(TmOperation.Activity.SPLIT_NEURITE_AT_VERTEX,
+ null, endTime-startTime);
}
});
}
@@ -1875,10 +1891,14 @@ public void actionPerformed(ActionEvent e) {
AbstractAction hideNeuronAction = new AbstractAction("Hide Neuron") {
@Override
public void actionPerformed(ActionEvent e) {
+ long startTime = System.currentTimeMillis();
TmModelManager.getInstance().getCurrentView().addAnnotationToHidden(indicatedNeuron.getId());
NeuronUpdateEvent updateEvent = new NeuronUpdateEvent(
this, Arrays.asList(new TmNeuronMetadata[]{indicatedNeuron}));
ViewerEventBus.postEvent(updateEvent);
+ long endTime = System.currentTimeMillis();
+ TmViewerManager.getInstance().logOperation(TmOperation.Activity.HIDE_NEURON,
+ null, endTime-startTime);
}
};
topMenu.add(hideNeuronAction);
@@ -1949,6 +1969,7 @@ public void actionPerformed(ActionEvent e) {
topMenu.add(new AbstractAction("Merge neurites...") {
@Override
public void actionPerformed(ActionEvent e) {
+
interactorContext.mergeNeurites();
}
});
diff --git a/modules/HortaTracer/src/main/java/org/janelia/horta/TracingInteractor.java b/modules/HortaTracer/src/main/java/org/janelia/horta/TracingInteractor.java
index 2ac08e655..852067459 100644
--- a/modules/HortaTracer/src/main/java/org/janelia/horta/TracingInteractor.java
+++ b/modules/HortaTracer/src/main/java/org/janelia/horta/TracingInteractor.java
@@ -31,6 +31,8 @@
import javax.swing.event.MouseInputListener;
import Jama.Matrix;
+import org.janelia.model.domain.tiledMicroscope.*;
+import org.janelia.workstation.controller.TmViewerManager;
import org.janelia.workstation.controller.action.AnnotationSetRadiusAction;
import org.janelia.workstation.controller.action.NeuronChooseColorAction;
import org.janelia.workstation.controller.model.DefaultNeuron;
@@ -45,8 +47,6 @@
import org.janelia.horta.actors.SpheresActor;
import org.janelia.horta.actors.VertexHighlightActor;
import org.janelia.horta.options.TileLoadingPanel;
-import org.janelia.model.domain.tiledMicroscope.TmGeoAnnotation;
-import org.janelia.model.domain.tiledMicroscope.TmWorkspace;
import org.janelia.workstation.controller.NeuronManager;
import org.janelia.workstation.controller.SpatialIndexManager;
import org.janelia.workstation.controller.ViewerEventBus;
@@ -58,8 +58,6 @@
import org.janelia.workstation.core.api.AccessManager;
import org.janelia.workstation.core.keybind.KeymapUtil;
import org.janelia.workstation.core.util.ConsoleProperties;
-import org.janelia.model.domain.tiledMicroscope.TmNeuronMetadata;
-import org.janelia.model.domain.tiledMicroscope.TmNeuronTagMap;
import org.janelia.workstation.core.workers.SimpleWorker;
import org.janelia.workstation.geom.Vec3;
import org.janelia.workstation.integration.util.FrameworkAccess;
@@ -323,8 +321,9 @@ public void mouseExited(MouseEvent event) {
public boolean selectParentVertex(TmGeoAnnotation vertex, TmNeuronMetadata neuron)
{
+ long startTime = System.currentTimeMillis();
if (vertex == null) return false;
-
+
if (cachedParentVertex == vertex)
return false;
cachedParentVertex = vertex;
@@ -378,6 +377,9 @@ public boolean selectParentVertex(TmGeoAnnotation vertex, TmNeuronMetadata neuro
updateActorListener.neuronVertexUpdated(new VertexWithNeuron(
vertex, neuron));
log.info("Horta parent vertex set");
+ long endTime = System.currentTimeMillis();
+ TmViewerManager.getInstance().logOperation(TmOperation.Activity.SELECT_VERTEX,
+ null, endTime-startTime);
return true;
}
@@ -555,6 +557,7 @@ public void mouseDragged(MouseEvent event)
return;
}
+ long startTime = System.currentTimeMillis();
// log.info("Dragging a vertex");
// Update display (only) of dragged vertex
// Update location of hover vertex glyph
@@ -593,6 +596,10 @@ public void mouseDragged(MouseEvent event)
event.consume(); // Don't let OrbitPanZoomInteractor drag the world
// log.info("Consumed tracing drag event");
+
+ long endTime = System.currentTimeMillis();
+ TmViewerManager.getInstance().logOperation(TmOperation.Activity.MOVE_VERTEX,
+ null, endTime-startTime);
}
@Override
@@ -987,7 +994,7 @@ public boolean canCreateRootVertex() {
}
public boolean appendVertex() {
- long beginAppendTime = System.nanoTime();
+ long startTime = System.currentTimeMillis();
if (! canAppendVertex())
return false;
if (!TmModelManager.checkOwnership(
@@ -1009,6 +1016,9 @@ public boolean appendVertex() {
FrameworkAccess.handleException(error);
return false;
}
+ long endTime = System.currentTimeMillis();
+ TmViewerManager.getInstance().logOperation(TmOperation.Activity.APPEND_VERTEX,
+ null, endTime-startTime);
return true;
}
@@ -1041,9 +1051,14 @@ public boolean canClearParent() {
public void clearParent() {
if (! canClearParent())
return;
+
+ long startTime = System.currentTimeMillis();
clearParentVertex();
SelectionAnnotationEvent annEvent = new SelectionAnnotationEvent(this,
null, false, true);
+ long endTime = System.currentTimeMillis();
+ TmViewerManager.getInstance().logOperation(TmOperation.Activity.CLEAR_PARENT_ANCHOR,
+ null, endTime-startTime);
ViewerEventBus.postEvent(annEvent);
}
@@ -1087,16 +1102,6 @@ public boolean canSplitNeurite() {
if (TmModelManager.getInstance().getCurrentView().isProjectReadOnly()) return false;
return true;
}
-
- public boolean splitNeurite() {
- if (!canSplitNeurite())
- return false;
- if (!TmModelManager.checkOwnership(NeuronManager.getInstance().getNeuronFromNeuronID(hoveredVertex.getNeuronId()))) {
- return false;
- }
-
- return true;
- }
private List findAncestors(Long neuronId, TmGeoAnnotation vertex) {
List ancestors = new ArrayList<>();
@@ -1124,6 +1129,7 @@ public boolean canMergeNeurite() {
public boolean mergeNeurites() {
if (!canMergeNeurite())
return false;
+ long startTime = System.currentTimeMillis();
if (hoveredNeuron == parentNeuron) {
List targetAncestors = findAncestors(hoveredNeuron.getId(), hoveredVertex);
List sourceAncestors = findAncestors(hoveredNeuron.getId(), parentVertex);
@@ -1168,6 +1174,9 @@ public boolean mergeNeurites() {
FrameworkAccess.handleException(error);
return false;
}
+ long endTime = System.currentTimeMillis();
+ TmViewerManager.getInstance().logOperation(TmOperation.Activity.MERGE_NEURITES,
+ null, endTime-startTime);
return true;
}
@@ -1205,6 +1214,7 @@ public void selectNeuron(TmNeuronMetadata neuron) {
}
public void selectParent() {
+ long startTime = System.currentTimeMillis();
TmModelManager.getInstance().getCurrentSelections().setCurrentNeuron(hoveredNeuron);
TmModelManager.getInstance().getCurrentSelections().setCurrentVertex(hoveredVertex);
SelectionAnnotationEvent event = new SelectionAnnotationEvent(this,
@@ -1214,6 +1224,10 @@ public void selectParent() {
selectParentVertex(hoveredVertex, hoveredNeuron);
NeuronManager.getInstance().updateFragsByAnnotation(hoveredNeuron.getId(), hoveredVertex.getId());
+ long endTime = System.currentTimeMillis();
+ TmViewerManager.getInstance().logOperation(TmOperation.Activity.SELECT_VERTEX,
+ null, endTime-startTime);
+
}
boolean canUpdateAnchorRadius() {
diff --git a/modules/SceneWindow/src/main/java/org/janelia/scenewindow/OrbitPanZoomInteractor.java b/modules/SceneWindow/src/main/java/org/janelia/scenewindow/OrbitPanZoomInteractor.java
index ce9046e7c..48dc2fe2b 100644
--- a/modules/SceneWindow/src/main/java/org/janelia/scenewindow/OrbitPanZoomInteractor.java
+++ b/modules/SceneWindow/src/main/java/org/janelia/scenewindow/OrbitPanZoomInteractor.java
@@ -23,6 +23,9 @@
import javax.swing.ImageIcon;
import javax.swing.SwingUtilities;
import javax.swing.event.MouseInputListener;
+
+import org.janelia.model.domain.tiledMicroscope.TmOperation;
+import org.janelia.workstation.controller.TmViewerManager;
import org.openide.util.Exceptions;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -167,10 +170,14 @@ public void mouseDragged(MouseEvent event) {
}
// Middle drag to rotate
else if (isRotateMode(event)) {
+ long startTime = System.currentTimeMillis();
if (camera.getVantage().isConstrainedToUpDirection())
bChanged = orbitPixels(dx, -dy, 6.0f);
else
bChanged = rotatePixels(dx, -dy, 6.0f);
+ long endTime = System.currentTimeMillis();
+ TmViewerManager.getInstance().logOperation(TmOperation.Activity.ROTATE_SCREEN,
+ null, endTime-startTime);
}
}
}
diff --git a/modules/ViewerController/src/main/java/org/janelia/workstation/controller/NeuronManager.java b/modules/ViewerController/src/main/java/org/janelia/workstation/controller/NeuronManager.java
index 8045a15f2..d01e5e9c5 100644
--- a/modules/ViewerController/src/main/java/org/janelia/workstation/controller/NeuronManager.java
+++ b/modules/ViewerController/src/main/java/org/janelia/workstation/controller/NeuronManager.java
@@ -494,7 +494,7 @@ public synchronized void changeNeuronOwner(List neuronList, Su
}
public synchronized void deleteNeuron(final TmNeuronMetadata deletedNeuron) {
-
+ long startTime = System.currentTimeMillis();
// Update the UI first
if (applyFilter) {
// if filter, add and remove fragments as necessary
@@ -517,6 +517,10 @@ public synchronized void deleteNeuron(final TmNeuronMetadata deletedNeuron) {
FrameworkAccess.handleException(e);
return null;
});
+
+ long endTime = System.currentTimeMillis();
+ TmViewerManager.getInstance().logOperation(TmOperation.Activity.DELETE_NEURON,
+ null, endTime-startTime);
}
/**
@@ -1256,7 +1260,6 @@ public synchronized void deleteSubTree(final TmGeoAnnotation rootAnnotation) thr
if (rootAnnotation == null) {
return;
}
-
final TmNeuronMetadata neuron = getNeuronFromNeuronID(rootAnnotation.getNeuronId());
TmModelManager.getInstance().getNeuronHistory().checkBackup(neuron);
if (neuron == null) {
diff --git a/modules/ViewerController/src/main/java/org/janelia/workstation/controller/TmViewerManager.java b/modules/ViewerController/src/main/java/org/janelia/workstation/controller/TmViewerManager.java
index 27d7092a1..04a3777e1 100644
--- a/modules/ViewerController/src/main/java/org/janelia/workstation/controller/TmViewerManager.java
+++ b/modules/ViewerController/src/main/java/org/janelia/workstation/controller/TmViewerManager.java
@@ -26,6 +26,9 @@
import org.janelia.workstation.integration.util.FrameworkAccess;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
import java.util.*;
public class TmViewerManager implements GlobalViewerController {
@@ -60,16 +63,19 @@ public void logOperation (TmOperation.Activity activity, Date timestamp, Long el
if (!ApplicationPanel.isOperationsLogged()) {
return;
}
- String timestampDate = null;
- if (timestamp!=null) {
- timestampDate = timestamp.toString();
- }
Long workspaceId = null, sampleId = null;
if (modelManager.getCurrentWorkspace()!=null)
workspaceId = modelManager.getCurrentWorkspace().getId();
- tmDomainMgr.createOperationLog(modelManager.getCurrentSample().getId(),
- workspaceId, null,
- activity, timestampDate, elapsedTime, AccessManager.getSubjectKey());
+ TmOperation newOperationLog = new TmOperation();
+ newOperationLog.setActivity(activity);
+ newOperationLog.setTimestamp(timestamp);
+ newOperationLog.setElapsedTime(elapsedTime);
+ newOperationLog.setWorkspaceId(workspaceId);
+ if (modelManager.getCurrentSelections().getCurrentNeuron()!=null)
+ newOperationLog.setNeuronId(modelManager.getCurrentSelections().getCurrentNeuron().getId());
+ if (modelManager.getCurrentSelections().getCurrentVertex()!=null)
+ newOperationLog.setVertexId(modelManager.getCurrentSelections().getCurrentVertex().getId());
+ tmDomainMgr.createOperationLog(newOperationLog, AccessManager.getSubjectKey());
}
@Subscribe
diff --git a/modules/ViewerController/src/main/java/org/janelia/workstation/controller/access/TiledMicroscopeDomainMgr.java b/modules/ViewerController/src/main/java/org/janelia/workstation/controller/access/TiledMicroscopeDomainMgr.java
index a1cf84b81..5252827c9 100644
--- a/modules/ViewerController/src/main/java/org/janelia/workstation/controller/access/TiledMicroscopeDomainMgr.java
+++ b/modules/ViewerController/src/main/java/org/janelia/workstation/controller/access/TiledMicroscopeDomainMgr.java
@@ -166,10 +166,10 @@ public List getOperationLogs (Long workspaceId, Long neuronId, Date
return client.getOperationLogs(workspaceId, neuronId, startTime, endTime, subjectKey);
}
- public void createOperationLog (Long sampleId, Long workspaceId, Long neuronId, TmOperation.Activity activity,
- String timestamp, Long elapsedTime, String subjectKey) {
- LOG.debug("createOperationLog(activity={}, timestamp={}, elapsedTime={})",activity, timestamp, elapsedTime);
- client.createOperationLog(sampleId, workspaceId, neuronId, activity, timestamp, elapsedTime, subjectKey);
+ public void createOperationLog (TmOperation operation, String subjectKey) {
+ LOG.debug("createOperationLog(activity={}, timestamp={}, elapsedTime={})",operation.getActivity(),
+ operation.getTimestamp(), operation.getElapsedTime());
+ client.createOperationLog(operation, subjectKey);
}
public TmWorkspace createWorkspace(Long sampleId, String name) throws Exception {
diff --git a/modules/ViewerController/src/main/java/org/janelia/workstation/controller/access/TiledMicroscopeRestClient.java b/modules/ViewerController/src/main/java/org/janelia/workstation/controller/access/TiledMicroscopeRestClient.java
index eb338b110..3d65a0389 100644
--- a/modules/ViewerController/src/main/java/org/janelia/workstation/controller/access/TiledMicroscopeRestClient.java
+++ b/modules/ViewerController/src/main/java/org/janelia/workstation/controller/access/TiledMicroscopeRestClient.java
@@ -156,20 +156,12 @@ public List getOperationLogs(Long workspaceId, Long neuronId,
return response.readEntity(new GenericType>() {});
}
- public void createOperationLog(Long sampleId, Long workspaceId, Long neuronId,
- TmOperation.Activity activity, String timestamp, Long elapsedTime,
+ public void createOperationLog(TmOperation tmOperation,
String subjectKey ) {
- WebTarget target = getMouselightDataEndpoint("/operation/log")
- .queryParam("username", subjectKey)
- .queryParam("sampleId", sampleId)
- .queryParam("workspaceId", workspaceId)
- .queryParam("neuronId", neuronId)
- .queryParam("activity", activity)
- .queryParam("elapsedTime", elapsedTime)
- .queryParam("timestamp", timestamp);
+ WebTarget target = getMouselightDataEndpoint("/operation/log");
Response response = target
.request("application/json")
- .get();
+ .post(Entity.json(tmOperation));
checkBadResponse(target, response);
}
diff --git a/modules/ViewerController/src/main/java/org/janelia/workstation/controller/action/DeleteNeuronSubtreeAction.java b/modules/ViewerController/src/main/java/org/janelia/workstation/controller/action/DeleteNeuronSubtreeAction.java
index 1484167eb..475e10017 100644
--- a/modules/ViewerController/src/main/java/org/janelia/workstation/controller/action/DeleteNeuronSubtreeAction.java
+++ b/modules/ViewerController/src/main/java/org/janelia/workstation/controller/action/DeleteNeuronSubtreeAction.java
@@ -2,7 +2,9 @@
import org.janelia.model.domain.tiledMicroscope.TmGeoAnnotation;
import org.janelia.model.domain.tiledMicroscope.TmNeuronMetadata;
+import org.janelia.model.domain.tiledMicroscope.TmOperation;
import org.janelia.workstation.controller.NeuronManager;
+import org.janelia.workstation.controller.TmViewerManager;
import org.janelia.workstation.controller.model.TmModelManager;
import org.janelia.workstation.core.workers.SimpleWorker;
import org.janelia.workstation.integration.util.FrameworkAccess;
@@ -44,10 +46,14 @@ public void actionPerformed(ActionEvent e) {
}
public void execute(Long neuronID, Long vertexID) {
+ long startTime = System.currentTimeMillis();
NeuronManager manager = NeuronManager.getInstance();
TmGeoAnnotation vertex = manager.getGeoAnnotationFromID(neuronID, vertexID);
TmNeuronMetadata neuron = manager.getNeuronFromNeuronID(neuronID);
deleteSubTree(neuron, vertex);
+ long endTime = System.currentTimeMillis();
+ TmViewerManager.getInstance().logOperation(TmOperation.Activity.DELETE_NEURON_SUBTREE,
+ null, endTime-startTime);
}
public void deleteSubTree(TmNeuronMetadata neuron, TmGeoAnnotation vertex) {
diff --git a/modules/ViewerController/src/main/java/org/janelia/workstation/controller/action/NeuronCreateAction.java b/modules/ViewerController/src/main/java/org/janelia/workstation/controller/action/NeuronCreateAction.java
index b7b1d3c4c..43b3f3d70 100644
--- a/modules/ViewerController/src/main/java/org/janelia/workstation/controller/action/NeuronCreateAction.java
+++ b/modules/ViewerController/src/main/java/org/janelia/workstation/controller/action/NeuronCreateAction.java
@@ -8,7 +8,9 @@
import org.janelia.model.domain.tiledMicroscope.TmGeoAnnotation;
import org.janelia.model.domain.tiledMicroscope.TmNeuronMetadata;
+import org.janelia.model.domain.tiledMicroscope.TmOperation;
import org.janelia.workstation.controller.NeuronManager;
+import org.janelia.workstation.controller.TmViewerManager;
import org.janelia.workstation.controller.action.EditAction;
import org.janelia.workstation.controller.model.TmModelManager;
import org.janelia.workstation.controller.model.annotations.neuron.NeuronModel;
@@ -46,6 +48,7 @@ public void actionPerformed(ActionEvent e) {
}
private void createNeuron(boolean createInitVertex, Vec3 vertexLoc) {
+ long startTime = System.currentTimeMillis();
if (TmModelManager.getInstance().getCurrentWorkspace() == null) {
// dialog?
return;
@@ -83,5 +86,8 @@ protected void hadError(Throwable t) {
};
creator.execute();
}
+ long endTime = System.currentTimeMillis();
+ TmViewerManager.getInstance().logOperation(TmOperation.Activity.CREATE_NEURON,
+ null, endTime-startTime);
}
}
diff --git a/modules/ViewerController/src/main/java/org/janelia/workstation/controller/action/NeuronDeleteAction.java b/modules/ViewerController/src/main/java/org/janelia/workstation/controller/action/NeuronDeleteAction.java
index e62b120e2..ce218d21d 100644
--- a/modules/ViewerController/src/main/java/org/janelia/workstation/controller/action/NeuronDeleteAction.java
+++ b/modules/ViewerController/src/main/java/org/janelia/workstation/controller/action/NeuronDeleteAction.java
@@ -1,7 +1,9 @@
package org.janelia.workstation.controller.action;
import org.janelia.model.domain.tiledMicroscope.TmNeuronMetadata;
+import org.janelia.model.domain.tiledMicroscope.TmOperation;
import org.janelia.workstation.controller.NeuronManager;
+import org.janelia.workstation.controller.TmViewerManager;
import org.janelia.workstation.controller.model.TmModelManager;
import org.janelia.workstation.core.api.AccessManager;
import org.openide.awt.ActionID;
@@ -34,6 +36,7 @@ public NeuronDeleteAction(TmNeuronMetadata targetNeuron) {
@Override
public void actionPerformed(ActionEvent e) {
+ long startTime = System.currentTimeMillis();
if (targetNeuron == null) {
targetNeuron = TmModelManager.getInstance().getCurrentSelections().getCurrentNeuron();
if (targetNeuron == null) {
@@ -64,5 +67,8 @@ public void actionPerformed(ActionEvent e) {
NeuronManager.getInstance().deleteNeuron(targetNeuron);
}
this.targetNeuron = null;
+ long endTime = System.currentTimeMillis();
+ TmViewerManager.getInstance().logOperation(TmOperation.Activity.DELETE_NEURON,
+ null, endTime-startTime);
}
}
diff --git a/pom.xml b/pom.xml
index 88ead4e39..c632dc82d 100644
--- a/pom.xml
+++ b/pom.xml
@@ -109,7 +109,7 @@
9.4.46.v20220331
- 3.3.4
+ 3.3.10
2.5.0