eu.esdihumboldt.hale.common.align.model.functions.ClassificationMappingUtil.java Source code

Java tutorial

Introduction

Here is the source code for eu.esdihumboldt.hale.common.align.model.functions.ClassificationMappingUtil.java

Source

/*
 * Copyright (c) 2013 Data Harmonisation Panel
 * 
 * All rights reserved. This program and the accompanying materials are made
 * available 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.
 * 
 * You should have received a copy of the GNU Lesser General Public License
 * along with this distribution. If not, see <http://www.gnu.org/licenses/>.
 * 
 * Contributors:
 *     Data Harmonisation Panel <http://www.dhpanel.eu>
 */

package eu.esdihumboldt.hale.common.align.model.functions;

import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;

import com.google.common.collect.Multimap;

import de.fhg.igd.slf4jplus.ALogger;
import de.fhg.igd.slf4jplus.ALoggerFactory;
import eu.esdihumboldt.hale.common.core.io.Value;
import eu.esdihumboldt.hale.common.core.service.ServiceProvider;
import eu.esdihumboldt.hale.common.lookup.LookupService;
import eu.esdihumboldt.hale.common.lookup.LookupTable;
import eu.esdihumboldt.hale.common.lookup.LookupTableInfo;
import eu.esdihumboldt.hale.common.lookup.impl.LookupTableImpl;

/**
 * Common utility methods for dealing with the classification mapping function.
 * 
 * @author Simon Templer
 */
public class ClassificationMappingUtil implements ClassificationMappingFunction {

    private static final ALogger log = ALoggerFactory.getLogger(ClassificationMappingUtil.class);

    /**
     * Get the classification lookup table from the transformation parameters.
     * 
     * @param parameters the transformation parameters
     * @param serviceProvider service provider in case a lookup table has to be
     *            retrieved through a service
     * @return the classification lookup table
     */
    public static LookupTable getClassificationLookup(Multimap<String, ? extends Value> parameters,
            ServiceProvider serviceProvider) {

        try {
            if (!(parameters.get(PARAMETER_LOOKUPTABLE).isEmpty())) {
                Collection<? extends Value> tmpMap = parameters.get(PARAMETER_LOOKUPTABLE);
                return tmpMap.iterator().next().as(LookupTable.class);
            }
            if (!(parameters.get(PARAMETER_LOOKUPTABLE_ID).isEmpty())) {
                LookupService lookupServiceImpl = serviceProvider.getService(LookupService.class);
                Collection<? extends Value> tmpMap = parameters.get(PARAMETER_LOOKUPTABLE_ID);
                LookupTableInfo lookupTableInfo = lookupServiceImpl
                        .getTable(tmpMap.iterator().next().as(String.class));
                return lookupTableInfo.getTable();
            }
        } catch (NullPointerException e) {
            log.error("Service provider not accessible for retrieving lookup table", e);
        }

        // For reason of compatibility we need the following code
        // lookup table in strangely encoded string parameter
        Collection<? extends Value> mappings = parameters.get(PARAMETER_CLASSIFICATIONS);
        try {
            Map<Value, Value> lookupMap = new HashMap<Value, Value>();
            for (Value mapping : mappings) {
                String[] parts = mapping.as(String.class).split(" ");
                if (parts.length > 0) {
                    Value target = Value.of(URLDecoder.decode(parts[0], "UTF-8"));
                    for (int i = 1; i < parts.length; i++) {
                        lookupMap.put(Value.of(URLDecoder.decode(parts[i], "UTF-8")), target);
                    }
                }
            }
            return new LookupTableImpl(lookupMap);
        } catch (UnsupportedEncodingException e) {
            throw new IllegalStateException("Failed to decode classification mapping.");
        }
    }
}