Skip to content

Commit 2d2b6b2

Browse files
committed
DataModel can now process a List<OIData>
SelectorResult provides its DataModel instance
1 parent 0b7d308 commit 2d2b6b2

2 files changed

Lines changed: 102 additions & 54 deletions

File tree

src/main/java/fr/jmmc/oitools/model/DataModel.java

Lines changed: 91 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,9 @@
3737
import java.net.MalformedURLException;
3838
import java.util.ArrayList;
3939
import java.util.Arrays;
40+
import java.util.Collection;
4041
import java.util.Collections;
42+
import java.util.EnumMap;
4143
import java.util.HashSet;
4244
import java.util.LinkedHashSet;
4345
import java.util.List;
@@ -77,13 +79,26 @@ public final class DataModel {
7779
private static final String TEST_DIR = "src/test/resources/";
7880

7981
/** lazy DataModel singleton */
80-
private static DataModel INSTANCE = null;
82+
private static final EnumMap<OIFitsStandard, DataModel> INSTANCES = new EnumMap(OIFitsStandard.class);
83+
84+
public static synchronized DataModel getInstance() {
85+
return getInstance(OIFitsStandard.VERSION_2);
86+
}
8187

8288
public static synchronized DataModel getInstance(final OIFitsStandard version) {
83-
if (INSTANCE == null) {
84-
INSTANCE = new DataModel(version);
89+
DataModel dm = INSTANCES.get(version);
90+
if (dm == null) {
91+
dm = new DataModel(version);
92+
INSTANCES.put(version, dm);
93+
}
94+
return dm;
95+
}
96+
97+
public static DataModel getInstance(final Collection<OIData> oiDatas) {
98+
if (oiDatas == null || oiDatas.isEmpty()) {
99+
return getInstance();
85100
}
86-
return INSTANCE;
101+
return new DataModel(oiDatas, false);
87102
}
88103

89104
/**
@@ -552,85 +567,107 @@ private static void dump(final boolean all) {
552567
}
553568
}
554569

570+
private static OIFitsFile createOIFitsFile(final OIFitsStandard version) {
571+
switch (version) {
572+
case VERSION_1:
573+
return createOIFitsFileV1();
574+
default:
575+
case VERSION_2:
576+
return createOIFitsFileV2();
577+
}
578+
}
579+
555580
// members:
556-
private final OIFitsFile oiFitsFile;
581+
private final boolean shared;
582+
private final Collection<OIData> oiDatas;
557583
/* cached values */
558-
private Set<String> columnNames = null;
559-
private Set<String> columnNames1D = null;
560-
private Set<String> columnNames2D = null;
584+
private Set<String> allColumnNames = null;
585+
private Set<String> allColumnNames1D = null;
586+
private Set<String> allColumnNames2D = null;
561587

562588
private DataModel(final OIFitsStandard version) {
563-
this.oiFitsFile = (version == OIFitsStandard.VERSION_2) ? createOIFitsFileV2() : createOIFitsFileV1();
589+
this(createOIFitsFile(version).getOiDataList(), true);
564590
}
565591

566-
// public API:
567-
public OIFitsFile getOiFitsFile() {
568-
return oiFitsFile;
592+
private DataModel(final Collection<OIData> oiDatas, final boolean shared) {
593+
logger.log(Level.INFO, "new DataModel for {0}", oiDatas);
594+
this.oiDatas = oiDatas;
595+
this.shared = shared;
596+
}
597+
598+
private void reset() {
599+
allColumnNames = null;
600+
allColumnNames1D = null;
601+
allColumnNames2D = null;
602+
}
603+
604+
public void refresh() {
605+
if (!shared) {
606+
reset();
607+
}
608+
}
609+
610+
// public API ?
611+
private Collection<OIData> getOiDatas() {
612+
return oiDatas;
569613
}
570614

571615
public Set<String> getNumericalColumnNames() {
572-
if (columnNames == null) {
573-
columnNames = getAllNumericalColumnNames();
616+
if (allColumnNames == null) {
617+
allColumnNames = getAllNumericalColumnNames(getOiDatas(), true, false);
574618
}
575-
return columnNames;
619+
return allColumnNames;
576620
}
577621

578622
public Set<String> getNumericalColumnNames1D() {
579-
if (columnNames1D == null) {
580-
columnNames1D = getAllNumericalColumnNames(false);
623+
if (allColumnNames1D == null) {
624+
allColumnNames1D = getAllNumericalColumnNames(getOiDatas(), false, false);
581625
}
582-
return columnNames1D;
626+
return allColumnNames1D;
583627
}
584628

585629
public Set<String> getNumericalColumnNames2D() {
586-
if (columnNames2D == null) {
587-
columnNames2D = getAllNumericalColumnNames(true);
630+
if (allColumnNames2D == null) {
631+
allColumnNames2D = getAllNumericalColumnNames(getOiDatas(), false, true);
588632
}
589-
return columnNames2D;
633+
return allColumnNames2D;
590634
}
591635

592-
private Set<String> getAllNumericalColumnNames(final boolean is2D) {
636+
private static Set<String> getAllNumericalColumnNames(final Collection<OIData> oiDatas,
637+
final boolean all, final boolean is2D) {
638+
593639
final Set<String> columnNames = new LinkedHashSet<String>();
594640

595-
for (OIData oiData : oiFitsFile.getOiDataList()) {
596-
final List<ColumnMeta> columnsDescCollection = oiData.getNumericalColumnsDescs();
641+
getAllNumericalColumnNames(oiDatas, OIFitsConstants.TABLE_OI_VIS2, all, is2D, columnNames);
642+
getAllNumericalColumnNames(oiDatas, OIFitsConstants.TABLE_OI_VIS, all, is2D, columnNames);
643+
getAllNumericalColumnNames(oiDatas, OIFitsConstants.TABLE_OI_T3, all, is2D, columnNames);
644+
getAllNumericalColumnNames(oiDatas, OIFitsConstants.TABLE_OI_FLUX, all, is2D, columnNames);
597645

598-
for (ColumnMeta colMeta : columnsDescCollection) {
599-
if (colMeta != null) {
600-
if (colMeta instanceof WaveColumnMeta) {
601-
if (is2D) {
602-
columnNames.add(colMeta.getName());
603-
}
604-
} else if (colMeta.is3D()) {
605-
// not possible in OIData:
606-
} else if (!is2D) {
607-
columnNames.add(colMeta.getName());
608-
}
609-
}
610-
}
611-
}
612646
return columnNames;
613647
}
614648

615-
private Set<String> getAllNumericalColumnNames() {
616-
final Set<String> columnNames = new LinkedHashSet<String>();
617-
618-
for (OIData oiData : oiFitsFile.getOiDataList()) {
619-
final List<ColumnMeta> columnsDescCollection = oiData.getNumericalColumnsDescs();
620-
621-
for (ColumnMeta colMeta : columnsDescCollection) {
622-
if (colMeta != null) {
623-
if (colMeta instanceof WaveColumnMeta) {
624-
columnNames.add(colMeta.getName());
625-
} else if (colMeta.is3D()) {
626-
// not possible in OIData:
627-
} else {
628-
columnNames.add(colMeta.getName());
649+
private static void getAllNumericalColumnNames(final Collection<OIData> oiDatas, final String extName,
650+
final boolean all, final boolean is2D,
651+
final Set<String> columnNames) {
652+
for (final OIData oiData : oiDatas) {
653+
if (extName.equals(oiData.getExtName())) {
654+
final List<ColumnMeta> columnsDescCollection = oiData.getNumericalColumnsDescs();
655+
656+
for (final ColumnMeta colMeta : columnsDescCollection) {
657+
if (colMeta != null) {
658+
if (colMeta instanceof WaveColumnMeta) {
659+
if (all || is2D) {
660+
columnNames.add(colMeta.getName());
661+
}
662+
} else if (colMeta.is3D()) {
663+
// not possible in OIData:
664+
} else if (all || !is2D) {
665+
columnNames.add(colMeta.getName());
666+
}
629667
}
630668
}
631669
}
632670
}
633-
return columnNames;
634671
}
635672

636673
/**
@@ -641,7 +678,7 @@ public static void main(String[] unused) {
641678
dump(false);
642679
dump(true);
643680

644-
final DataModel dm = getInstance(OIFitsStandard.VERSION_2);
681+
final DataModel dm = getInstance();
645682

646683
logger.log(Level.WARNING, "columnNames: {0}", dm.getNumericalColumnNames());
647684

src/main/java/fr/jmmc/oitools/processing/SelectorResult.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
*/
1717
package fr.jmmc.oitools.processing;
1818

19+
import fr.jmmc.oitools.model.DataModel;
1920
import fr.jmmc.oitools.model.Granule;
2021
import fr.jmmc.oitools.model.Granule.GranuleField;
2122
import fr.jmmc.oitools.model.IndexMask;
@@ -68,6 +69,8 @@ public final class SelectorResult {
6869
private List<OIData> sortedOIDatas = null;
6970
/** Map of used staNames to StaNamesDir (reference StaNames / orientation) */
7071
private Map<String, StaNamesDir> usedStaNamesMap = null;
72+
/* data model on selected data */
73+
private DataModel dataModel = null;
7174

7275
public SelectorResult(final OIFitsCollection oiFitsCollection) {
7376
this.oiFitsCollection = oiFitsCollection;
@@ -88,6 +91,7 @@ public void reset() {
8891
sortedNightIds = null;
8992
sortedOIDatas = null;
9093
usedStaNamesMap = null;
94+
dataModel = null;
9195
}
9296

9397
public void resetFilters() {
@@ -247,6 +251,13 @@ public void setUsedStaNamesMap(final Map<String, StaNamesDir> usedStaNamesMap) {
247251
this.usedStaNamesMap = usedStaNamesMap;
248252
}
249253

254+
public DataModel getDataModel() {
255+
if (dataModel == null) {
256+
dataModel = DataModel.getInstance(oiDatas);
257+
}
258+
return dataModel;
259+
}
260+
250261
@Override
251262
public String toString() {
252263
return "SelectorResult{" + "granules=" + granules

0 commit comments

Comments
 (0)