diff --git a/numass-storage/numass-server/src/main/java/inr/numass/server/NumassRootHandler.java b/numass-storage/numass-server/src/main/java/inr/numass/server/NumassRootHandler.java
index 516393d6..78d4e8e3 100644
--- a/numass-storage/numass-server/src/main/java/inr/numass/server/NumassRootHandler.java
+++ b/numass-storage/numass-server/src/main/java/inr/numass/server/NumassRootHandler.java
@@ -12,14 +12,16 @@ import hep.dataforge.storage.api.StateLoader;
import hep.dataforge.storage.api.Storage;
import hep.dataforge.storage.commons.JSONMetaWriter;
import hep.dataforge.storage.servlet.Utils;
-import static inr.numass.server.HandlerUtils.renderStates;
-import java.io.StringWriter;
-import java.util.HashMap;
-import java.util.Map;
import org.slf4j.LoggerFactory;
import ratpack.handling.Context;
import ratpack.handling.Handler;
+import java.io.StringWriter;
+import java.util.HashMap;
+import java.util.Map;
+
+import static inr.numass.server.HandlerUtils.renderStates;
+
/**
*
* @author Alexander Nozik
@@ -98,7 +100,7 @@ public class NumassRootHandler implements Handler {
}
private void renderLoader(Context ctx, StringBuilder b, Loader loader) {
- String href = "/storage?path=" + loader.getFullPath();
+ String href = "/storage?path=" + loader.getPath();
b.append(String.format("
%s (%s)
", href, loader.getName(), loader.getType()));
}
}
diff --git a/numass-storage/src/main/java/inr/numass/storage/NumassDataLoader.java b/numass-storage/src/main/java/inr/numass/storage/NumassDataLoader.java
index b3b24e1e..b2084225 100644
--- a/numass-storage/src/main/java/inr/numass/storage/NumassDataLoader.java
+++ b/numass-storage/src/main/java/inr/numass/storage/NumassDataLoader.java
@@ -311,7 +311,7 @@ public class NumassDataLoader extends AbstractLoader implements ObjectLoader {
+ return SetDirectionUtility.isReversed(getPath(), n -> {
List points = getPoints();
if (getPoints().size() >= 2) {
return readTime(points.get(0).meta()).isAfter(readTime(points.get(1).meta()));
diff --git a/numass-storage/src/main/java/inr/numass/storage/NumassStorage.java b/numass-storage/src/main/java/inr/numass/storage/NumassStorage.java
index 0b5bb966..6e5a2e66 100644
--- a/numass-storage/src/main/java/inr/numass/storage/NumassStorage.java
+++ b/numass-storage/src/main/java/inr/numass/storage/NumassStorage.java
@@ -20,8 +20,10 @@ import hep.dataforge.events.EventBuilder;
import hep.dataforge.exceptions.StorageException;
import hep.dataforge.meta.Meta;
import hep.dataforge.meta.MetaBuilder;
+import hep.dataforge.storage.filestorage.FilePointLoader;
import hep.dataforge.storage.filestorage.FileStorage;
import hep.dataforge.storage.filestorage.VFSUtils;
+import org.apache.commons.io.FilenameUtils;
import org.apache.commons.vfs2.FileObject;
import org.apache.commons.vfs2.FileSystemException;
import org.apache.commons.vfs2.FileType;
@@ -146,6 +148,13 @@ public class NumassStorage extends FileStorage {
}
} else if (file.getName().toString().endsWith(NUMASS_ZIP_EXTENSION)) {
this.loaders.put(file.getName().getBaseName(), NumassDataLoader.fromZip(this, file));
+ } else if (file.getName().toString().endsWith(".points")) {
+ try {
+ loaders.put(FilenameUtils.getBaseName(file.getName().getBaseName()),
+ FilePointLoader.fromFile(this, file, true));
+ } catch (Exception ex) {
+ getContext().getLogger().error("Failed to build numass point loader from file {}", file.getName());
+ }
} else {
//updating non-numass loader files
updateFile(file);
diff --git a/numass-viewer/build.gradle b/numass-viewer/build.gradle
index a10f8112..9bb52c60 100644
--- a/numass-viewer/build.gradle
+++ b/numass-viewer/build.gradle
@@ -5,7 +5,7 @@ if (!hasProperty('mainClass')) {
}
mainClassName = mainClass
-version = "0.3.4"
+version = "0.3.5"
description = "The viewer for numass data"
diff --git a/numass-viewer/src/main/java/inr/numass/viewer/MspViewController.java b/numass-viewer/src/main/java/inr/numass/viewer/MspViewController.java
index 5cddebe9..5a0ec03b 100644
--- a/numass-viewer/src/main/java/inr/numass/viewer/MspViewController.java
+++ b/numass-viewer/src/main/java/inr/numass/viewer/MspViewController.java
@@ -23,7 +23,7 @@ package inr.numass.viewer;
import hep.dataforge.computation.ProgressCallback;
import hep.dataforge.context.Context;
-import hep.dataforge.exceptions.StorageException;
+import hep.dataforge.names.Name;
import hep.dataforge.plots.PlotUtils;
import hep.dataforge.plots.data.DynamicPlottable;
import hep.dataforge.plots.data.DynamicPlottableSet;
@@ -31,6 +31,7 @@ import hep.dataforge.plots.fx.PlotContainer;
import hep.dataforge.plots.jfreechart.JFreeChartFrame;
import hep.dataforge.storage.api.PointLoader;
import hep.dataforge.storage.api.Storage;
+import hep.dataforge.storage.commons.StorageUtils;
import hep.dataforge.tables.DataPoint;
import hep.dataforge.tables.MapPoint;
import hep.dataforge.values.Value;
@@ -88,17 +89,23 @@ public class MspViewController {
public void fillMspData(Storage rootStorage) {
if (rootStorage != null) {
context.taskManager().submit("viewer.msp.fill", (ProgressCallback callback) -> {
- try {
-// callback.updateTitle("Fill msp data (" + rootStorage.getName() + ")");
+ // callback.updateTitle("Fill msp data (" + rootStorage.getName() + ")");
- callback.updateTitle("Load msp data (" + rootStorage.getName() + ")");
- List mspData = new ArrayList<>();
- DataPoint last = null;
- for (String loaderName : rootStorage.loaders().keySet()) {
- if (loaderName.startsWith("msp")) {
- try (final PointLoader mspLoader = (PointLoader) rootStorage.getLoader(loaderName)) {
+ callback.updateTitle("Load msp data (" + rootStorage.getName() + ")");
+
+ List mspData = new ArrayList<>();
+
+ StorageUtils.loaderStream(rootStorage)
+ .filter(pair -> pair.getValue() instanceof PointLoader)
+ .filter(pair -> Name.of(pair.getKey()).getLast().toString().startsWith("msp"))
+ .map(pair -> pair.getValue())
+ .filter(loader -> PointLoader.POINT_LOADER_TYPE.equals(loader.getType()))
+ .forEach(loader -> {
+ try {
+ PointLoader mspLoader = (PointLoader) loader;
mspLoader.open();
callback.updateMessage("Loading mass spectrometer data from " + mspLoader.getName());
+ DataPoint last = null;
for (DataPoint dp : mspLoader) {
mspData.add(dp);
last = dp;
@@ -109,30 +116,26 @@ public class MspViewController {
} catch (Exception ex) {
LoggerFactory.getLogger(getClass()).error("Can't read msp loader data", ex);
}
- }
- }
- callback.updateMessage("Loading msp data finished");
+ });
+ callback.updateMessage("Loading msp data finished");
// return mspData;
// List mspData = (List) loadProcess.getTask().get();
- if (!mspData.isEmpty()) {
- DynamicPlottableSet plottables = new DynamicPlottableSet();
+ if (!mspData.isEmpty()) {
+ DynamicPlottableSet plottables = new DynamicPlottableSet();
- for (DataPoint point : mspData) {
- for (String name : point.names()) {
- if (!name.equals("timestamp")) {
- if (!plottables.hasPlottable(name)) {
- plottables.addPlottable(new DynamicPlottable(name, name));
- }
+ for (DataPoint point : mspData) {
+ for (String name : point.names()) {
+ if (!name.equals("timestamp")) {
+ if (!plottables.hasPlottable(name)) {
+ plottables.addPlottable(new DynamicPlottable(name, name));
}
}
- plottables.put(point);
}
-
- updateMspPane(plottables);
+ plottables.put(point);
}
- } catch (StorageException ex) {
- throw new RuntimeException(ex);
+
+ updateMspPane(plottables);
}
});
}
diff --git a/numass-viewer/src/main/resources/fxml/MainView.fxml b/numass-viewer/src/main/resources/fxml/MainView.fxml
index bcf314de..73af8da1 100644
--- a/numass-viewer/src/main/resources/fxml/MainView.fxml
+++ b/numass-viewer/src/main/resources/fxml/MainView.fxml
@@ -16,29 +16,13 @@ See the License for the specific language governing permissions and
limitations under the License.
-->
-
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+