/* * Copyright (c) 2017 OBiBa. All rights reserved. * * This program and the accompanying materials * are made available under the terms of the GNU Public License v3.0. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package org.obiba.magma.datasource.csv.support; import java.util.ArrayList; import java.util.Collection; import java.util.List; import org.obiba.magma.Attribute; import org.obiba.magma.Category; import org.obiba.magma.ValueTable; import org.obiba.magma.Variable; import org.obiba.magma.datasource.csv.converter.VariableConverter; public class CsvUtil { private CsvUtil() {} public static String[] getCsvVariableHeader(ValueTable table) { List<String> headers = new ArrayList<>(); addVariableHeaders(headers); addCategoriesHeaders(table, headers); addVariableAttributesHeaders(table, headers); String[] headersArray = new String[headers.size()]; headers.toArray(headersArray); return headersArray; } private static void addVariableHeaders(Collection<String> headers) { headers.add(VariableConverter.NAME); headers.add(VariableConverter.VALUE_TYPE); headers.add(VariableConverter.ENTITY_TYPE); headers.add(VariableConverter.MIME_TYPE); headers.add(VariableConverter.UNIT); headers.add(VariableConverter.OCCURRENCE_GROUP); headers.add(VariableConverter.REPEATABLE); } private static void addCategoriesHeaders(ValueTable table, List<String> headers) { for(Variable variable : table.getVariables()) { for(Category category : variable.getCategories()) { for(Attribute attribute : category.getAttributes()) { if(attribute.getName().equals(VariableConverter.LABEL) && attribute.isLocalised()) { String header = VariableConverter.CATEGORIES + ":" + attribute.getLocale(); if(!headers.contains(header)) { headers.add(header); } } } } } if(!headers.get(headers.size() - 1).startsWith(VariableConverter.CATEGORIES)) { headers.add(VariableConverter.CATEGORIES); } } private static void addVariableAttributesHeaders(ValueTable table, Collection<String> headers) { for(Variable variable : table.getVariables()) { for(Attribute attribute : variable.getAttributes()) { //noinspection NonConstantStringShouldBeStringBuffer String header = (attribute.hasNamespace() ? attribute.getNamespace() + "::" : "") + attribute.getName(); if(attribute.isLocalised()) { header += ":" + attribute.getLocale(); } if(!headers.contains(header)) { headers.add(header); } } } } }