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

gov.nasa.pds.web.ui.containers.tabularData.Element Maven / Gradle / Ivy

package gov.nasa.pds.web.ui.containers.tabularData;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

// TODO: figure out how to get get start byte position
public class Element implements Serializable {

	private static final long serialVersionUID = -7299384943668362289L;

	private final List values = new ArrayList();

	private final Column column;

	private final int lineNumber;

	public Element(final String value, final Column column, final int lineNumber) {
		if (column.getNumItems() != null) {
			// get the number of items this column is split into, defaults to 1
			final int numItems = column.getNumItems();

			// get the number of bytes in each item, if not specified, defaults
			// to the total bytes divided by the number of items\
			final int itemBytes = (int) (column.getItemBytes() != null ? column
					.getItemBytes() : Math.floor(column.getBytes() / numItems));

			final Integer itemOffset = column.getItemOffset();

			// current byte index
			int curIndex = 0;
			final String source = value.toString();
			for (int i = 0; i < numItems; i++) {
				int endIndex = curIndex + itemBytes;
				try {
					final String data = source.substring(curIndex, endIndex);
					this.values.add(data);
				} catch (StringIndexOutOfBoundsException e) {
					// missing values in row at end probably
				}

				// if an item offset was used, start index for next item is
				// start index for current plus offset. otherwise just add item
				// bytes
				if (itemOffset != null) {
					curIndex += itemOffset;
				} else {
					curIndex += itemBytes;
				}
			}
		} else {
			this.values.add(value);
		}
		this.column = column;
		this.lineNumber = lineNumber;
	}

	private Element(final Element element) {
		this.values.addAll(element.getValues());
		this.column = element.getColumn().clone();
		this.lineNumber = element.getLineNumber();
	}

	@Override
	public Element clone() {
		return new Element(this);
	}

	public String getValue() {
		return this.values.get(0);
	}

	public List getValues() {
		return this.values;
	}

	public Column getColumn() {
		return this.column;
	}

	public int getLineNumber() {
		return this.lineNumber;
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy