<commit_before>/*
 * Copyright (c) 2012, <NAME> - Ministerie van Economische Zaken
 * 
 * Gepubliceerd onder de BSD 2-clause licentie, 
 * zie https://github.com/MinELenI/CBSviewer/blob/master/LICENSE.md voor de volledige licentie.
 */
package nl.mineleni.cbsviewer.util;

import java.io.File;
import java.util.List;

import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBElement;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Unmarshaller;

import nl.mineleni.cbsviewer.util.xml.LayerDescriptor;
import nl.mineleni.cbsviewer.util.xml.LayersList;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import flexjson.JSONSerializer;

/**
 * AvailableLayersBean maakt de beschikbare kaarten bekend in de applicatie op
 * basis van het xml configuratie bestand {@code AvailableLayers.xml}.
 * 
 * @author mprins
 * @since 1.6
 */
public class AvailableLayersBean {

	/** The Constant LOGGER. */
	private static final Logger LOGGER = LoggerFactory
			.getLogger(AvailableLayersBean.class);

	/**
	 * lijst met beschikbare layers.
	 */
	private List<LayerDescriptor> layers = null;

	/**
	 * default constructor.
	 */
	public AvailableLayersBean() {
		try {
			final JAXBContext jc = JAXBContext
					.newInstance("nl.mineleni.cbsviewer.util.xml");
			final Unmarshaller u = jc.createUnmarshaller();
			final File f = new File(this.getClass().getClassLoader()
					.getResource("AvailableLayers.xml").getFile());
			@SuppressWarnings("unchecked")
			final JAXBElement<LayersList> element = (JAXBElement<LayersList>) u
					.unmarshal(f);
			final LayersList layerslist = element.getValue();
			this.layers = layerslist.getLayerdescriptor();
		} catch (final JAXBException e) {
			LOGGER.error(
					"Er is een fout opgetreden bij het inlezen van de layers.",
					e);
		}
	}

	/**
	 * Geeft de kaarten als javascript variabele.
	 * 
	 * @return layers als json object
	 * @see #asJSON(boolean)
	 */
	public String asJSON() {
		return this.asJSON(true);
	}

	/**
	 * Geeft de kaarten als json object ({@code asVar == false}) of javascript
	 * variabele, ingepakt in een CDATA sectie. Het object is een array met
	 * LayerDescriptors.
	 * 
	 * @param asVar
	 *            {@code true} als er een javascript variabele moet worden
	 *            gegeven.
	 * @return layers als json object
	 * 
	 * @see #asJSON()
	 */
	public String asJSON(final boolean asVar) {
		final JSONSerializer serializer = new JSONSerializer();
		final String json = serializer.exclude("class")
				.prettyPrint(LOGGER.isDebugEnabled()).serialize(this.layers);
		if (asVar) {
			return "/* <![CDATA[ */var _layers=" + json + ";/* ]]> */";
		}
		return json;
	}

	/**
	 * geeft de eerste layerdescriptor met de gevraagde id.
	 * 
	 * @param name<commit_msg>tijdens serialisatie niet meer naar de browser sturen dan nodig<commit_after>/*
 * Copyright (c) 2012, <NAME> - Ministerie van Economische Zaken
 * 
 * Gepubliceerd onder de BSD 2-clause licentie, 
 * zie https://github.com/MinELenI/CBSviewer/blob/master/LICENSE.md voor de volledige licentie.
 */
package nl.mineleni.cbsviewer.util;

import java.io.File;
import java.util.List;

import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBElement;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Unmarshaller;

import nl.mineleni.cbsviewer.util.xml.LayerDescriptor;
import nl.mineleni.cbsviewer.util.xml.LayersList;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import flexjson.JSONSerializer;

/**
 * AvailableLayersBean maakt de beschikbare kaarten bekend in de applicatie op
 * basis van het xml configuratie bestand {@code AvailableLayers.xml}.
 * 
 * @author mprins
 * @since 1.6
 */
public class AvailableLayersBean {

	/** The Constant LOGGER. */
	private static final Logger LOGGER = LoggerFactory
			.getLogger(AvailableLayersBean.class);

	/**
	 * lijst met beschikbare layers.
	 */
	private List<LayerDescriptor> layers = null;

	/**
	 * default constructor.
	 */
	public AvailableLayersBean() {
		try {
			final JAXBContext jc = JAXBContext
					.newInstance("nl.mineleni.cbsviewer.util.xml");
			final Unmarshaller u = jc.createUnmarshaller();
			final File f = new File(this.getClass().getClassLoader()
					.getResource("AvailableLayers.xml").getFile());
			@SuppressWarnings("unchecked")
			final JAXBElement<LayersList> element = (JAXBElement<LayersList>) u
					.unmarshal(f);
			final LayersList layerslist = element.getValue();
			this.layers = layerslist.getLayerdescriptor();
		} catch (final JAXBException e) {
			LOGGER.error(
					"Er is een fout opgetreden bij het inlezen van de layers.",
					e);
		}
	}

	/**
	 * Geeft de kaarten als javascript variabele.
	 * 
	 * @return layers als json object
	 * @see #asJSON(boolean)
	 */
	public String asJSON() {
		return this.asJSON(true);
	}

	/**
	 * Geeft de kaarten als json object ({@code asVar == false}) of javascript
	 * variabele, ingepakt in een CDATA sectie. Het object is een array met
	 * LayerDescriptors.
	 * 
	 * @param asVar
	 *            {@code true} als er een javascript variabele moet worden
	 *            gegeven.
	 * @return layers als json object
	 * 
	 * @see #asJSON()
	 */
	public String asJSON(final boolean asVar) {
		final JSONSerializer serializer = new JSONSerializer();
		final String json = serializer.exclude("class","aliases","attributes")
				.prettyPrint(LOGGER.isDebugEnabled()).serialize(this.layers);
		if (asVar) {
			return "/* <![CDATA[ */var _layers=" + json + ";/* ]]> */";
		}
		return json;
	}

	/**
	 * geeft de eerste layerdescriptor met de gevraagde id.
	 * 
	 * @param name
{'fraction_non_alphanumeric': 0.1177103893773551, 'fraction_numerical': 0.0032298582451103534, 'mean_word_length': 3.645, 'pattern_counts': {'":': 0, '<': 13, '<?xml version=': 0, '>': 13, 'https://': 2, 'lorem ipsum': 0, 'www.': 0, 'xml': 20}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '4669918', 'n_tokens_mistral': 2023, 'n_tokens_neox': 1834, 'n_words': 474}