/*
* @(#)EconomicActivityClassificationGroup.java
*
* Copyright 2012 Instituto Superior Tecnico
* Founding Authors: Luis Cruz, Susana Fernandes
*
* https://fenix-ashes.ist.utl.pt/
*
* This file is part of the JodaFinance library.
*
* The JodaFinance library is free software: you can
* redistribute it and/or modify it under the terms of the GNU Lesser General
* Public License as published by the Free Software Foundation, either version
* 3 of the License, or (at your option) any later version.
*
* JodaFinance is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with JodaFinance. If not, see <http://www.gnu.org/licenses/>.
*
*/
package pt.ist.jpdafinance.pt;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.SortedSet;
import java.util.TreeSet;
import pt.ist.jpdafinance.util.FileUtil;
/**
*
* @author Luis Cruz
* @author Susana Fernandes
*
*/
public class EconomicActivityClassificationGroup extends EconomicActivityClassification {
private static final String RESOURCE_PATH = "/pt/ist/jpdafinance/pt/";
static SortedSet<EconomicActivityClassificationGroup> classificationGroups =
new TreeSet<EconomicActivityClassificationGroup>();
static {
try {
final String[] content = FileUtil.readResource(RESOURCE_PATH + "EconomicActivityClassifications.csv");
for (int i = 0; i < content.length; i++) {
final String line = content[i];
final String[] parts = line.split("\t");
final String groupCode = parts[0].trim();
final String description = parts[1].trim();
final EconomicActivityClassificationGroup group = new EconomicActivityClassificationGroup(groupCode, description);
final Collection<EconomicActivityClassification> EconomicActivityClassifications =
constructClassifications(content, i, group);
i += EconomicActivityClassifications.size();
classificationGroups.add(group);
}
} catch (Throwable t) {
throw new Error(t);
}
}
final SortedSet<EconomicActivityClassification> classifications = new TreeSet<EconomicActivityClassification>();
public EconomicActivityClassificationGroup(final String code, final String description) {
super(code, description);
}
private static Collection<EconomicActivityClassification> constructClassifications(final String[] content, final int i,
final EconomicActivityClassificationGroup group) {
final Collection<EconomicActivityClassification> set = new ArrayList<EconomicActivityClassification>();
for (int j = i + 1; j < content.length; j++) {
final String line = content[j];
final String[] parts = line.split("\t");
final String groupCode = parts[0].trim();
if (!groupCode.isEmpty()) {
return set;
}
final String code = parts[1];
final String description = parts[2];
set.add(new EconomicActivityClassificationLeaf(code, description, group));
}
return set;
}
public static SortedSet<EconomicActivityClassificationGroup> getCassificationGroups() {
return Collections.unmodifiableSortedSet(classificationGroups);
}
public SortedSet<EconomicActivityClassification> getClassifications() {
return Collections.unmodifiableSortedSet(classifications);
}
public static EconomicActivityClassificationLeaf importFromString(final String string) {
if (string != null && !string.isEmpty()) {
final String[] parts = string.split(":");
for (final EconomicActivityClassificationGroup group : classificationGroups) {
if (group.code.equals(parts[0])) {
for (final EconomicActivityClassification classification : group.classifications) {
if (classification.code.equals(parts[1])) {
return (EconomicActivityClassificationLeaf) classification;
}
}
}
}
}
return null;
}
}