All Downloads are FREE. Search and download functionalities are using the official Maven repository.

cz.datalite.service.ares.impl.AresServiceImpl Maven / Gradle / Ivy

The newest version!
/*
 * Copyright 2009 (c) DataLite, spol. s r.o. All rights reserved.
 * Web: http://www.datalite.cz    Mail: [email protected]
 */

package cz.datalite.service.ares.impl;

import cz.datalite.helpers.StringHelper;
import cz.datalite.service.ares.AresDotaz;
import cz.datalite.service.ares.AresService;
import cz.datalite.service.ares.AresSubjekt;
import cz.datalite.service.ares.exception.AresException;
import cz.datalite.stereotype.Service;
import org.apache.log4j.Logger;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.Namespace;
import org.jdom.input.SAXBuilder;

import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLEncoder;
import java.util.LinkedList;
import java.util.List;

/**
 * Přístup do ARES přes metodu GET.
 *
 * @author Jiri Bubnik
 */
@Service
@SuppressWarnings("unchecked")
public class AresServiceImpl implements AresService
{
    private static final String ARES_URL = "http://wwwinfo.mfcr.cz/cgi-bin/ares/darv_std.cgi?jazyk=cz&czk=utf&max_pocet=200&";
    private static final String ARES_BASIC_URL = "http://wwwinfo.mfcr.cz/cgi-bin/ares/darv_bas.cgi?ico=";

    static Logger logger = Logger.getLogger(AresServiceImpl.class);


    public String getAresDic(String ico) throws AresException {
        assert ico != null : "Ares musi byt volan s vyplnenym ICO.";

        Document doc = getDocumentFromURL(ARES_BASIC_URL + ico);
        String dic;

        // parse
        Element root = doc.getRootElement();

        Element odpoved = root.getChild("Odpoved", root.getNamespace());
        if (odpoved == null)
            throw new AresException("Chyba při zpracování odpovědi od registru ARES: XML neobsauje element 'Odpoved'.");

        // z prvniho ditete namespace
        Namespace dNamespace = ((Element)odpoved.getChildren().get(0)).getNamespace();

        Element vbas = odpoved.getChild("VBAS", dNamespace);
        if (odpoved == null)
            throw new AresException("Chyba při zpracování odpovědi od registru ARES: XML neobsauje element 'VBAS'.");

        dic = vbas.getChildText("DIC", dNamespace);
        
        if (StringHelper.isNull(dic)){
            dic=null;
        }
        return dic;
    }

    public String getAresZapisVOR(String ico) throws AresException {
        assert ico != null : "Ares musi byt volan s vyplnenym ICO.";

        Document doc = getDocumentFromURL(ARES_BASIC_URL + ico);
        String zapis = null;
        String soud;
        String spisovaZnacka;

        // parse
        Element root = doc.getRootElement();

        Element odpoved = root.getChild("Odpoved", root.getNamespace());
        if (odpoved == null)
            throw new AresException("Chyba při zpracování odpovědi od registru ARES: XML neobsauje element 'Odpoved'.");

        // z prvniho ditete namespace
        Namespace dNamespace = ((Element)odpoved.getChildren().get(0)).getNamespace();

        Element vbas = odpoved.getChild("VBAS", dNamespace);
        if (vbas == null)
            throw new AresException("Chyba při zpracování odpovědi od registru ARES: XML neobsauje element 'VBAS'.");

        Element ror = vbas.getChild("ROR", dNamespace); // obchodni rejstrik
        Element rrz = vbas.getChild("RRZ", dNamespace); // registr zivnostenskeho podnikani
        if (ror != null) {
            Element sz = ror.getChild("SZ", dNamespace);
            if (sz == null)
                throw new AresException("Chyba při zpracování odpovědi od registru ARES: XML neobsauje element 'SZ'.");

            Element sd = sz.getChild("SD", dNamespace);
            if (sd == null)
                throw new AresException("Chyba při zpracování odpovědi od registru ARES: XML neobsauje element 'SD'.");

            soud = sd.getChildText("T", dNamespace);
            if (!StringHelper.isNull(soud)) {
                zapis = "Zápis v OR, " + soud;
                spisovaZnacka = sz.getChildText("OV", dNamespace);
                if (!StringHelper.isNull(spisovaZnacka))
                    zapis+=", spisová značka: " + spisovaZnacka;
            }
         }
        else if (rrz != null) {
            Element zu = rrz.getChild("ZU", dNamespace);
            if (zu == null)
                throw new AresException("Chyba při zpracování odpovědi od registru ARES: XML neobsauje element 'ZU'.");

            String zivnostUrad = zu.getChildText("NZU", dNamespace);
            if (!StringHelper.isNull(zivnostUrad)) {
                zapis = "Zápsán u ŽU, " + zivnostUrad;
                String zivnostUradCislo = zu.getChildText("KZU", dNamespace);
                if (!StringHelper.isNull(zivnostUradCislo))
                    zapis+=", č.ú.: " + zivnostUradCislo;
            }
        }   
        else
            zapis = "Subjekt není zapsán v Obchod. rejstříku ani v Registru živnostenského podnikání.";

        return zapis;
    }

    public List getAresEkonomickeSubjekty(AresDotaz dotaz) throws AresException
    {
        assert dotaz != null : "Ares musi byt volan s vyplnenym objektem dotaz.";

        StringBuffer params = new StringBuffer();
        appendParameter(params, "ico", dotaz.getIco());
        appendParameter(params, "obchodni_firma", dotaz.getObchodniJmeno());
        appendParameter(params, "nazev_obce", dotaz.getObec());

        // vlastni volani
        Document doc = getDocumentFromURL(ARES_URL + params.toString());

        // parse
        Element root = doc.getRootElement();
        Element odpoved = root.getChild("Odpoved", root.getNamespace());
        if (odpoved == null)
            throw new AresException("Chyba při zpracování odpovědi od registru ARES: XML neobsauje element 'Odpoved'.");

        List listResponse = new LinkedList();

        for (Element zaznam : (List) odpoved.getChildren("Zaznam", root.getNamespace()))
        {
            AresSubjekt subjekt = new AresSubjekt();

            subjekt.setNazev(zaznam.getChildText("Obchodni_firma", root.getNamespace()));
            subjekt.setIco(zaznam.getChildText("ICO", root.getNamespace()));
            
            Element pravniForma = zaznam.getChild("Pravni_forma", root.getNamespace());
            if (pravniForma != null && !pravniForma.getChildren().isEmpty())
            {
                subjekt.setKodPravniForma(((Element) pravniForma.getChildren().get(0)).getText());
            }

            Element adresa = zaznam.getChild("Identifikace", root.getNamespace()) != null ?
                    zaznam.getChild("Identifikace", root.getNamespace()).getChild("Adresa_ARES", root.getNamespace()) : null;

            if (adresa != null)
            {
                // namespace vezmu z prvniho ditete
                Namespace dttNamespace = ((Element)adresa.getChildren().get(0)).getNamespace();

                subjekt.setMesto(adresa.getChildText("Nazev_obce", dttNamespace));
                subjekt.setUlice(adresa.getChildText("Nazev_ulice", dttNamespace));
                subjekt.setCpop(adresa.getChildText("Cislo_domovni", dttNamespace));
                subjekt.setCor(adresa.getChildText("Cislo_orientacni", dttNamespace));
                subjekt.setPsc(adresa.getChildText("PSC", dttNamespace));
            }
            else
            {
                logger.warn("Nenalezena adresa.");
            }

            listResponse.add(subjekt);
        }

       return listResponse;

    }

    // vyzvedne XML na urcene adrese a vysledek vraci jako parsovany JDOM dokument.
    private Document getDocumentFromURL(String address) throws AresException {
        Document doc = null;

        if (address.endsWith("&"))
            address = address.substring(0, address.length()-1);

        try {
            URL url = new URL(address);
            URLConnection conn = url.openConnection();
            conn.addRequestProperty("Accept-Language", "cs");
            SAXBuilder builder = new SAXBuilder(false);
            doc = builder.build(conn.getInputStream());

            return doc;
        } catch (JDOMException ex) {
            throw new AresException("Odpověď vrácená z registru ARES má nesprávný formát.", ex);
        } catch (MalformedURLException ex) {
            throw new AresException("Chyba při komunikaci s registrem ARES - adresa má nesprávný formát.", ex);
        } catch (IOException ex) {
            throw new AresException("Chyba při komunikaci s registrem ARES.", ex);
        }
    }

    // prida parametr pokud neni parametr null
    private void appendParameter(StringBuffer url, String paramName, String value)
    {
        if (!StringHelper.isNull(value))
        {
            url.append(paramName);
            url.append('=');
            try {
                url.append(URLEncoder.encode(value, "UTF-8"));
            } catch (UnsupportedEncodingException ex) {
                throw new AssertionError(ex);
            }
            url.append('&');
        }
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy