/*
* Copyright (C) 2006-2016 DLR, Germany
*
* All rights reserved
*
* http://www.rcenvironment.de/
*/
package de.rcenvironment.components.excel.common;
import java.io.File;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.Path;
import de.rcenvironment.core.datamodel.api.DataType;
import de.rcenvironment.core.datamodel.api.TypedDatum;
import de.rcenvironment.core.datamodel.types.api.BooleanTD;
import de.rcenvironment.core.datamodel.types.api.DateTimeTD;
import de.rcenvironment.core.datamodel.types.api.FloatTD;
import de.rcenvironment.core.datamodel.types.api.IntegerTD;
import de.rcenvironment.core.datamodel.types.api.ShortTextTD;
import de.rcenvironment.core.datamodel.types.api.SmallTableTD;
import de.rcenvironment.core.toolkitbridge.transitional.ConcurrencyUtils;
/**
* Utility class for handling Excel stuff.
*
* @author Markus Kunde
*/
public final class ExcelUtils {
private ExcelUtils() {}
/**
* Makes relative Eclipse iFile and absolute files into absolute files.
*
* @param pathOfFile path of file
* @return absolute file or null if not existing
*/
public static File getAbsoluteFile(String pathOfFile) {
File file = null;
if (pathOfFile == null || pathOfFile.isEmpty()) {
return file;
}
IPath path = new Path(pathOfFile);
if (path.isAbsolute()) {
file = new File(pathOfFile);
if (!file.exists()) {
file = null;
}
} else {
IFile fileEclipse = ResourcesPlugin.getWorkspace().getRoot().getFile(path);
if (fileEclipse.exists()) {
file = fileEclipse.getRawLocation().toFile();
}
}
return file;
}
/**
* Concats a String array to one single String by separating the Strings with the given separator.
* This was moved from TypedValue class, since it doesn't belong there.
*
* @param table Table to concat
* @param valueSeparator separator to use
* @param lineSeparator separator to use
* @return separated list of array content
*/
public static String smallTableToString(final SmallTableTD table, final String valueSeparator, final String lineSeparator) {
TypedDatum[][] array = table.toArray();
if (array == null) {
return new String();
}
StringBuffer result = new StringBuffer();
for (int row = 0; row < array.length; row++) {
for (int col = 0; col < array[row].length; col++) {
TypedDatum data = array[row][col];
String str;
switch (data.getDataType()) {
case ShortText:
str = ((ShortTextTD) data).getShortTextValue();
break;
case Float:
str = String.valueOf(((FloatTD) data).getFloatValue());
break;
case Integer:
str = String.valueOf(((IntegerTD) data).getIntValue());
break;
case Boolean:
str = String.valueOf(((BooleanTD) data).getBooleanValue());
break;
case DateTime:
str = ((DateTimeTD) data).getDateTime().toString();
break;
case Empty:
str = new String();
break;
default:
str = new String();
break;
}
result.append(str);
if (col != (array[row].length) - 1) {// not last element
result.append(valueSeparator);
}
}
if ((row + 1) < array.length) { //not last element
result.append(lineSeparator);
}
}
return result.toString();
}
/**
* Returns row index of last cell which contains data.
*
* @param dataStore 2d content-array
* @return row index of last cell which contains data
*/
public static int getRowIndexLastCellFilled(final TypedDatum[][] dataStore) {
for (int row = dataStore.length - 1; row >= 0; row--) {
for (int column = dataStore[0].length - 1; column >= 0; column--) {
if (dataStore[row][column] != null && dataStore[row][column].getDataType() != DataType.Empty) {
return row;
}
}
}
return 0;
}
/**
* Returns column index of last cell which contains data.
*
* @param dataStore 2d content-array
* @return column index of last cell which contains data
*/
public static int getColumnIndexLastCellFilled(final TypedDatum[][] dataStore) {
for (int row = dataStore.length - 1; row >= 0; row--) {
for (int column = dataStore[0].length - 1; column >= 0; column--) {
if (dataStore[row][column] != null && dataStore[row][column].getDataType() != DataType.Empty) {
return column;
}
}
}
return 0;
}
/**
* Destroys garbage.
*/
public static void destroyGarbage() {
ConcurrencyUtils.getAsyncTaskService().execute(new GarbageDestroyer());
}
}