org.eclipse.dawnsci.nexus.builder.data.impl.DataDeviceImpl Maven / Gradle / Ivy
/*-
*******************************************************************************
* Copyright (c) 2011, 2016 Diamond Light Source Ltd.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Matthew Gerring - initial API and implementation and/or initial documentation
*******************************************************************************/
package org.eclipse.dawnsci.nexus.builder.data.impl;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import org.eclipse.dawnsci.analysis.api.tree.Node;
import org.eclipse.dawnsci.nexus.NXdata;
import org.eclipse.dawnsci.nexus.NXobject;
import org.eclipse.dawnsci.nexus.builder.NexusObjectProvider;
import org.eclipse.dawnsci.nexus.builder.data.DataDevice;
import org.eclipse.dawnsci.nexus.builder.data.NexusDataBuilder;
/**
* A object of this class wraps an {@link NexusObjectProvider} and contains
* additional information that can be used by a {@link NexusDataBuilder}
* describing how to add the fields for this device to an {@link NXdata}
* group when its added, either as a primary data device (by calling
* {@link NexusDataBuilder#setPrimaryDevice(org.eclipse.dawnsci.nexus.builder.data.PrimaryDataDevice)})
* or as an axis device (by calling {@link NexusDataBuilder#addAxisDevice(org.eclipse.dawnsci.nexus.builder.data.AxisDataDevice)}
*
* @author Matthew Dickie
* @param subinterface of {@link NXobject} created by the
* wrapped {@link NexusObjectProvider}
*/
public abstract class DataDeviceImpl implements DataDevice {
private final Map axisFields;
private final N nexusObject;
public DataDeviceImpl(N nexusObject) {
this.nexusObject = nexusObject;
this.axisFields = new LinkedHashMap<>();
}
public void addAxisField(AxisFieldModel axisFieldModel) {
axisFields.put(axisFieldModel.getSourceFieldName(), axisFieldModel);
}
private AxisFieldModel getAxisDataFieldModel(String sourceFieldName) {
AxisFieldModel axisDataFieldModel = axisFields.get(sourceFieldName);
if (axisDataFieldModel == null) {
throw new IllegalArgumentException("No such axis field: " + sourceFieldName);
}
return axisDataFieldModel;
}
@Override
public final N getNexusObject() {
return nexusObject;
}
public List getAxisFieldNames() {
return new ArrayList<>(axisFields.keySet());
}
public int[] getDimensionMappings(String sourceFieldName) {
return getAxisDataFieldModel(sourceFieldName).getDimensionMappings();
}
public Integer getDefaultAxisDimension(String sourceFieldName) {
return getAxisDataFieldModel(sourceFieldName).getDefaultAxisDimension();
}
public String getDestinationFieldName(String sourceFieldName) {
return getAxisDataFieldModel(sourceFieldName).getDestinationFieldName();
}
@Override
public Node getFieldNode(String sourceFieldName) {
return nexusObject.getNode(sourceFieldName);
}
@Override
public int getFieldRank(String sourceFieldName) {
return getAxisDataFieldModel(sourceFieldName).getFieldRank();
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append(getClass().getSimpleName());
sb.append(" [");
sb.append("nexusObject=" + nexusObject);
appendFields(sb);
sb.append("]");
return sb.toString();
}
protected void appendFields(StringBuilder sb) {
sb.append(", axisFields={");
sb.append("\n");
for (Map.Entry entry : axisFields.entrySet()) {
sb.append(" ");
sb.append(entry.getKey());
sb.append(": ");
sb.append(entry.getValue());
sb.append("\n");
}
sb.append("}");
}
}