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