package cz.abclinuxu.datoveschranky.common.entities; import java.util.Arrays; import java.util.List; /** * Pomocná třída pro validaci * * @author Vaclav Rosecky <xrosecky 'at' gmail 'dot' com> */ public class Validator { private static List<String> enabledMetaTypes = Arrays.asList("main", "enclosure", "signature", "meta"); private Validator() { } static public void assertNotNull(Object obj) { if (obj == null) { throw new NullPointerException(); } } static public void assertValidMessageID(String id) { } static public void assertValidDataBoxID(String id) { } static public void assertValidMessageAnnotation(String annotation) { if (annotation!= null && annotation.length() > 255) { throw new IllegalArgumentException("Předmět zprávy smí obsahovat nejvýše 255 znaků."); } } /** * Zvaliduje odesílanou zprávu proti pravidlům definovaným v dokumentaci k * ISDS. Jelikož přijaté zprávy mohou tato pravidla porušovat, o validaci * se stará tento kód při odesílání zprávy a ne jednotlivé gettery a * settery u příslušných tříd. * * Tato metoda sice může odmítnout zprávy, které by rozhrání ISDS přijalo bez * problémů, ale držíme se striktně dokumentace k ISDS. Příkladem je např. * druh písemnosti (meta type), který může nabývat jakékoliv hodnoty a ISDS * jej přijme, ačkoliv v dokumentaci jsou povoleny pouze typy main, enclosure, * signature a meta. * * @param message zpráva k validaci * @throws IllegalArgumentException pokud zpráva tato pravidla nerespektuje * */ static public void assertValidMessageForSending(Message message) { MessageEnvelope env = message.getEnvelope(); if (env.getRecipient() == null) { throw new IllegalArgumentException("Zprava nema prijemce."); } if (env.getRecipient().getdataBoxID() == null) { throw new IllegalArgumentException("ID prijemce zpravy je null."); } List<Attachment> attachments = message.getAttachments(); if (attachments == null || attachments.size() == 0) { throw new IllegalArgumentException("Zprava musi obsahovat alespon jednu prilohu."); } // Check legal title (if present) LegalTitle legalTitle = message.getEnvelope().getLegalTitle(); if (legalTitle != null) { // Check law if (legalTitle.getLaw() != null) { try { Long.parseLong(legalTitle.getLaw()); } catch(Exception e) { throw new IllegalArgumentException("Cislo paragrafu zmocneni neni prirozene cislo"); } } // Check year if (legalTitle.getYear() != null) { try { Long.parseLong(legalTitle.getYear()); } catch(Exception e) { throw new IllegalArgumentException("Rok zmocneni neni prirozene cislo"); } } } Attachment first = attachments.get(0); if (!first.getMetaType().equals("main")) { throw new IllegalArgumentException(String.format("Druh (metatype) prvni pisemnosti " +" v prilohach musí být main, tady je %s.", first.getMetaType())); } for (Attachment attach : attachments) { if (!enabledMetaTypes.contains(attach.getMetaType())) { throw new IllegalArgumentException(String.format("%s není povoleny " + "druh pisemnosti (metatype). Povolen jsou: %s.", attach.getMetaType(), enabledMetaTypes.toString())); } if (attach.getDescription() == null) { throw new IllegalArgumentException("Popis přílohy je null"); } if (attach.getMimeType() == null) { throw new IllegalArgumentException("Příloha nemá vyplněný MIME type."); } } } }