All Downloads are FREE. Search and download functionalities are using the official Maven repository.

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("}");
	}

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy