Example usage for org.jdom2.output XMLOutputter XMLOutputter

List of usage examples for org.jdom2.output XMLOutputter XMLOutputter

Introduction

In this page you can find the example usage for org.jdom2.output XMLOutputter XMLOutputter.

Prototype

public XMLOutputter() 

Source Link

Document

This will create an XMLOutputter with a default Format and XMLOutputProcessor .

Usage

From source file:de.openVJJ.basic.ProjectConf.java

License:Open Source License

/**
 * Saves the Project//from  w  ww.  j av  a2  s . c o  m
 * @param fileName the file the Project is saved to
 */
public static void save(String fileName) {
    Element rootElement = new Element(ROOT_ELEMET_NAME);
    //      Element gpuElement = new Element(GPU_ELEMENT_NAME);
    //      gpuElement.setAttribute("activ", String.valueOf(useGPU));
    //      rootElement.addContent(gpuElement);
    Element baseModuleElement = new Element(ELEMET_NAME_BASE_MODULE);
    rootElement.addContent(baseModuleElement);
    baseModule.getConfig(baseModuleElement);
    try {
        FileWriter fileWriter = new FileWriter(fileName);
        new XMLOutputter().output(new Document(rootElement), fileWriter);
    } catch (IOException e) {
        e.printStackTrace();
    }
}

From source file:de.openVJJ.InputComponents.java

License:Open Source License

public static void save(String fileName) {
    Element rootElement = new Element(ROOT_ELEMET_NAME);
    Element gpuElement = new Element(GPU_ELEMENT_NAME);
    gpuElement.setAttribute("activ", String.valueOf(useGPU));
    rootElement.addContent(gpuElement);/*  w  ww.  ja  v a2 s  . c o m*/
    Element compnetsElement = new Element(COMPONENTS_ELEMENT_NAME);
    for (ImagePublisher imagePublisher : imagePublishers) {
        compnetsElement.addContent(componetToXML(imagePublisher));
    }
    rootElement.addContent(compnetsElement);
    try {
        FileWriter fileWriter = new FileWriter(fileName);
        new XMLOutputter().output(new Document(rootElement), fileWriter);
    } catch (IOException e) {
        e.printStackTrace();
    }
}

From source file:de.rallye.api.LandingPage.java

License:Open Source License

@GET
@Produces("image/png")
@Path("timetable/{groupsCode}")
public StreamingOutput getTimeTable(@PathParam("groupsCode") final String groupsCode) {

    StreamingOutput stream = new StreamingOutput() {
        @Override//w  w  w  . j  a  va  2 s.  co m
        public void write(OutputStream os) throws IOException, WebApplicationException {
            try {
                Document doc = new SAXBuilder()
                        .build(StadtRallye.class.getResourceAsStream("timetable/stundenplan.xml"));
                replaceKgRooms(doc, groupsCode);
                Source xmlFile = new JDOMSource(doc);
                final JDOMResult htmlResult = new JDOMResult();
                Transformer transformer = TransformerFactory.newInstance().newTransformer(
                        new StreamSource(StadtRallye.class.getResourceAsStream("timetable/stundenplan.xsl")));
                transformer.transform(xmlFile, htmlResult);

                PipedInputStream svgIn = new PipedInputStream();
                final PipedOutputStream svgOut = new PipedOutputStream(svgIn);

                new Thread(new Runnable() {
                    public void run() {

                        XMLOutputter xmlOutputter = new XMLOutputter();
                        try {
                            xmlOutputter.output(htmlResult.getDocument(), svgOut);
                            svgOut.close();
                        } catch (IOException e) {
                            e.printStackTrace();
                        } catch (Throwable e) {
                            e.printStackTrace();
                        }
                    }
                }).start();

                // Create a PNG transcoder
                PNGTranscoder t = new PNGTranscoder();

                // Create the transcoder input.
                //String svgURI = new File(args[0]).toURL().toString();
                TranscoderInput input = new TranscoderInput(svgIn);

                // Create the transcoder output.
                TranscoderOutput output = new TranscoderOutput(os);

                SVGConverter x;

                // Save the image.
                t.transcode(input, output);
                svgIn.close();

                // Flush and close the stream.
                os.flush();
                os.close();

            } catch (JDOMException e) {
                e.printStackTrace();
            } catch (TransformerConfigurationException e) {
                e.printStackTrace();
            } catch (TransformerException e) {
                e.printStackTrace();
            } catch (TranscoderException e) {
                e.printStackTrace();
            } catch (Throwable e) {
                e.printStackTrace();
            }
        }
    };
    return stream;

    //return StadtRallye.class.getResourceAsStream("timetable/stundenplan.xml");
}

From source file:de.smartics.maven.alias.domain.AliasesProcessor.java

License:Apache License

private String readComment(final Element root) {
    final Element commentElement = root.getChild("comment", nsAlias);
    if (commentElement != null) {
        final XMLOutputter xout = new XMLOutputter();
        final String comment = xout.outputElementContentString(commentElement);
        if (StringUtils.isNotBlank(comment)) {
            return comment;
        }/*from  w  ww. j av a 2 s  .c  o m*/
    }
    return null;
}

From source file:de.smartics.maven.plugin.jboss.modules.domain.ModuleBuilder.java

License:Apache License

private void createModuleXml(final File moduleFolder) throws IOException {
    final ModuleXmlBuilder xml = new ModuleXmlBuilder(context, module, dependencies);
    final XMLOutputter outputter = new XMLOutputter();
    outputter.setFormat(Format.getPrettyFormat());
    final File file = new File(moduleFolder, "module.xml");
    OutputStream out = null;// ww w  .  j av  a2  s.  c o m
    try {
        out = new BufferedOutputStream(new FileOutputStream(file));
        final Document document = xml.build();
        outputter.output(document, out);
    } finally {
        IOUtils.closeQuietly(out);
    }
}

From source file:de.tor.tribes.util.xml.JDomUtils.java

License:Apache License

public static void saveDocument(Document pDoc, String filename) {
    try {/*from   w  w  w .j  av  a 2s  .co m*/
        XMLOutputter xmlOutput = new XMLOutputter();

        // display nice nice
        xmlOutput.setFormat(Format.getPrettyFormat());
        xmlOutput.output(pDoc, new FileWriter(filename));
    } catch (Exception e) {
        logger.warn("Unable to save document", e);
    }
}

From source file:de.tor.tribes.util.xml.JDomUtils.java

License:Apache License

public static String toShortString(Document pDoc) {
    XMLOutputter xmlOutput = new XMLOutputter();

    // display nice nice
    xmlOutput.setFormat(Format.getCompactFormat());
    return xmlOutput.outputString(pDoc);
}

From source file:de.tu_dortmund.ub.api.daia.DaiaEndpoint.java

License:Open Source License

protected void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {

    String ips = request.getHeader("X-Forwarded-For");

    boolean isTUintern = false;
    boolean isUBintern = false;
    boolean is52bIBA = false;

    try {//from  w w  w.  j a v  a  2s .c o m
        if (ips != null) {

            String[] ranges = config.getProperty("service.iprange.tu").split("\\|");
            for (String range : ranges) {

                if (ips.matches(range)) {

                    isTUintern = true;
                    break;
                }
            }

            String[] exceptions = config.getProperty("service.iprange.tu.exceptions").split("\\|");
            if (isTUintern) {

                for (String exception : exceptions) {

                    if (ips.matches(exception)) {

                        isTUintern = false;
                        break;
                    }
                }
            }

            ranges = config.getProperty("service.iprange.ub").split("\\|");
            for (String range : ranges) {

                if (ips.matches(range)) {

                    isUBintern = true;
                    break;
                }
            }
            exceptions = config.getProperty("service.iprange.ub.exceptions").split("\\|");
            if (isUBintern) {

                for (String exception : exceptions) {

                    if (ips.matches(exception)) {

                        isUBintern = false;
                        break;
                    }
                }
            }

            ranges = config.getProperty("service.iprange.ub.52bIBAs").split("\\|");
            exceptions = config.getProperty("service.iprange.ub.52bIBAs.exceptions").split("\\|");
            String tmp[] = ips.split(", ");

            for (int i = 1; i < 3; i++) {

                try {
                    String ip = tmp[tmp.length - i];

                    for (String range : ranges) {

                        if (ip.matches(range)) {

                            is52bIBA = true;
                            break;
                        }
                    }

                    if (exceptions.length > 0) {

                        if (is52bIBA) {

                            for (String exception : exceptions) {

                                if (ip.matches(exception)) {

                                    is52bIBA = false;
                                    break;
                                }
                            }
                        }
                    }
                } catch (Exception e) {

                }
            }
        }
    } catch (Exception e) {

        this.logger.error(e.getMessage(), e.getCause());
    }
    this.logger.info("[" + this.config.getProperty("service.name") + "] " + "Where is it from? "
            + request.getHeader("X-Forwarded-For") + ", " + isTUintern + ", " + isUBintern + ", " + is52bIBA);

    response.setHeader("Access-Control-Allow-Origin", config.getProperty("Access-Control-Allow-Origin"));

    try {
        String format = "html";

        if (request.getParameter("format") != null && !request.getParameter("format").equals("")) {

            format = request.getParameter("format");
        } else {

            Enumeration<String> headerNames = request.getHeaderNames();
            while (headerNames.hasMoreElements()) {
                String headerNameKey = headerNames.nextElement();

                if (headerNameKey.equals("Accept")) {

                    this.logger.debug("headerNameKey = " + request.getHeader(headerNameKey));

                    if (request.getHeader(headerNameKey).contains("text/html")) {
                        format = "html";
                    } else if (request.getHeader(headerNameKey).contains("application/xml")) {
                        format = "xml";
                    } else if (request.getHeader(headerNameKey).contains("application/json")) {
                        format = "json";
                    }
                }
            }
        }

        if (format.equals("")) {

            response.sendError(HttpServletResponse.SC_BAD_REQUEST, "No valid {FORMAT} requested.");
        } else if (request.getParameter("id") == null || request.getParameter("id").equals("")) {

            this.logger.debug("Query: " + request.getQueryString());

            if (format.equals("html")) {

                response.sendRedirect(this.config.getProperty("service.doc"));
            } else {

                response.sendError(HttpServletResponse.SC_BAD_REQUEST,
                        "Usage: http://api.ub-tu-dortmund.de.de/daia/?id={ID}&format={FORMAT}.");
            }
        } else {

            if (request.getParameter("id").contains(":")) {

                String[] tmp = request.getParameter("id").split(":");
                this.logger.debug("id = " + request.getParameter("id") + "' - " + new Date());
                String idtype = tmp[0];
                String localpart = "";
                if (tmp.length > 1) {
                    for (int i = 1; i < tmp.length; i++) {
                        localpart += tmp[i];

                        if (i < tmp.length - 1) {
                            localpart += ":";
                        }
                    }
                }

                if (!(idtype.equals("ilsid") || idtype.equals("isbn") || idtype.equals("issn")
                        || idtype.equals("verbundid") || idtype.equals("eki") || idtype.equals("zdbid"))) {

                    response.sendError(HttpServletResponse.SC_BAD_REQUEST, "No valid {IDTYPE} requested.");
                } else {

                    try {

                        // Wenn via META-INF/services eine Implementierung zum interface "IntegratedLibrarySystem" erfolgt ist, dann frage das System ab.
                        if (Lookup.lookupAll(IntegratedLibrarySystem.class).size() > 0) {

                            IntegratedLibrarySystem integratedLibrarySystem = Lookup
                                    .lookup(IntegratedLibrarySystem.class);
                            // init ILS
                            integratedLibrarySystem.init(this.config);

                            ArrayList<de.tu_dortmund.ub.api.daia.ils.model.Document> documents = null;
                            documents = integratedLibrarySystem.items(idtype, localpart);

                            if (documents != null && documents.size() > 0) {

                                ArrayList<de.tu_dortmund.ub.api.daia.model.Document> daiaDocuments = new ArrayList<de.tu_dortmund.ub.api.daia.model.Document>();

                                ArrayList<Integer> indexToRemove = new ArrayList<Integer>();

                                for (de.tu_dortmund.ub.api.daia.ils.model.Document document : documents) {

                                    if (document == null) {

                                        // Wie kann das sein?
                                        this.logger.error(
                                                "document = null for '" + idtype + ":" + localpart + "'");
                                    } else {

                                        if (document.getItem() == null
                                                || (document.getItem() != null
                                                        && document.getItem().size() == 0)
                                                || (document.getErschform() != null
                                                        && document.getErschform().equals("p")
                                                        && document.getVeroefart() != null
                                                        && !document.getVeroefart().equals("da"))
                                                || (document.getErschform() != null
                                                        && document.getErschform().equals("z"))) {

                                            // TODO 2015-03-06: HttpClient-Aufruf an den OpenURL-DaiaService
                                            if (Lookup.lookupAll(JournalOnlinePrintService.class).size() > 0) {

                                                String issn = null;
                                                if (document.getIssnprint() != null) {
                                                    issn = document.getIssnprint().replaceAll("ISSN ", "");
                                                } else if (document.getIssn() != null) {
                                                    issn = document.getIssn();
                                                } else if (document.getIssnwww() != null) {
                                                    issn = document.getIssnwww().replaceAll("ISSN ", "");
                                                }

                                                this.logger.debug("JOP mit ISSN = " + issn);
                                                this.logger.debug("JOP mit ZDB-ID = " + document.getZdbid());

                                                if (issn != null) {
                                                    JournalOnlinePrintService journalOnlinePrintService = Lookup
                                                            .lookup(JournalOnlinePrintService.class);
                                                    // init JOP
                                                    journalOnlinePrintService.init(this.config);

                                                    // get items
                                                    ArrayList<de.tu_dortmund.ub.api.daia.jop.model.Document> jopDocuments = journalOnlinePrintService
                                                            .items("issn", issn);

                                                    if (jopDocuments != null && jopDocuments.size() > 0) {

                                                        de.tu_dortmund.ub.api.daia.model.Document daiaDocument = new de.tu_dortmund.ub.api.daia.model.Document();

                                                        if (idtype.equals("verbundid")) {

                                                            //daiaDocument.setId(this.config.getProperty("daia.document.baseurl") + localpart);
                                                            //daiaDocument.setHref(this.config.getProperty("daia.document.baseurl") + localpart);
                                                            daiaDocument.setId(document.getId());
                                                            daiaDocument.setHref(document.getHref());
                                                        } else if (idtype.equals("issn")) {

                                                            if (jopDocuments.get(0).getId() != null) {
                                                                daiaDocument.setId(jopDocuments.get(0).getId());
                                                            } else {
                                                                daiaDocument.setId("urn:issn:" + localpart);
                                                            }

                                                            if (jopDocuments.get(0).getHref() != null) {
                                                                daiaDocument
                                                                        .setId(jopDocuments.get(0).getHref());
                                                            }
                                                        } else {

                                                            if (jopDocuments.get(0).getId() != null) {
                                                                daiaDocument.setId(jopDocuments.get(0).getId());
                                                            } else {
                                                                daiaDocument.setId(this.config.getProperty(
                                                                        "daia.document.baseurl") + localpart);
                                                            }

                                                            if (jopDocuments.get(0).getHref() != null) {
                                                                daiaDocument
                                                                        .setId(jopDocuments.get(0).getHref());
                                                            } else {
                                                                daiaDocument.setHref(this.config.getProperty(
                                                                        "daia.document.baseurl") + localpart);
                                                            }
                                                        }

                                                        // print
                                                        if (jopDocuments.get(0).getItem() != null
                                                                && jopDocuments.get(0).getItem().size() > 0) {
                                                            daiaDocument.setItem(jopDocuments.get(0).getItem());
                                                        }

                                                        // digital
                                                        if (jopDocuments.get(0).isExistsDigitalItems() && Lookup
                                                                .lookupAll(LinkResolver.class).size() > 0) {

                                                            String openurl = "";

                                                            if (document.getMediatype() != null
                                                                    && document.getMediatype().equals("g")) {

                                                                this.logger.debug(
                                                                        "document.getMediatype().equals(\"g\")");

                                                                openurl += "&rft.genre=journal&rft.eissn="
                                                                        + issn;

                                                                if (document.getIssnprint() != null) {
                                                                    if (document.getIssnprint()
                                                                            .startsWith("ISSN ")) {
                                                                        openurl += "&rft.issn=" + document
                                                                                .getIssnprint()
                                                                                .replaceAll("ISSN ", "");
                                                                    } else {

                                                                        openurl += "&rft.issn="
                                                                                + document.getIssnprint();
                                                                    }
                                                                }
                                                            } else {

                                                                if (document.getIssnprint() != null) {
                                                                    if (document.getIssnprint()
                                                                            .startsWith("ISSN ")) {
                                                                        openurl += "&rft.genre=journal&rft.issn="
                                                                                + document.getIssnprint()
                                                                                        .replaceAll("ISSN ",
                                                                                                "");
                                                                    } else {

                                                                        openurl += "&rft.genre=journal&rft.issn="
                                                                                + document.getIssnprint();
                                                                    }

                                                                    openurl += "&rft.eissn="
                                                                            + document.getIssn();
                                                                } else if (document.getIssnwww() != null) {
                                                                    if (document.getIssnwww()
                                                                            .startsWith("ISSN ")) {
                                                                        openurl += "&rft.genre=journal&rft.eissn="
                                                                                + document.getIssnwww()
                                                                                        .replaceAll("ISSN ",
                                                                                                "");
                                                                    } else {
                                                                        openurl += "&rft.genre=journal&rft.eissn="
                                                                                + document.getIssnwww();
                                                                    }
                                                                    openurl += "&rft.issn="
                                                                            + document.getIssn();
                                                                } else {
                                                                    openurl += "&rft.genre=journal&&rft.issn="
                                                                            + document.getIssn();
                                                                }

                                                                // TODO reicht das aus?
                                                                //openurl += "&rft.genre=journal&&rft.issn=" + issn;
                                                            }

                                                            LinkResolver linkResolver = Lookup
                                                                    .lookup(LinkResolver.class);
                                                            // init Linkresolver
                                                            linkResolver.init(this.config);

                                                            // get items
                                                            ArrayList<de.tu_dortmund.ub.api.daia.model.Document> linkresolverDocument = linkResolver
                                                                    .items("openurl", openurl);

                                                            if (linkresolverDocument != null
                                                                    && linkresolverDocument.size() > 0) {
                                                                this.logger.debug(linkresolverDocument.get(0)
                                                                        .getItem().size() + ", "
                                                                        + jopDocuments.get(0)
                                                                                .getCountDigitlItems());
                                                            }

                                                            if (linkresolverDocument != null
                                                                    && linkresolverDocument.size() > 0
                                                                    && linkresolverDocument.get(0).getItem()
                                                                            .size() >= jopDocuments.get(0)
                                                                                    .getCountDigitlItems()) {

                                                                if (daiaDocument.getItem() == null
                                                                        || daiaDocument.getItem().size() == 0) {
                                                                    daiaDocument.setItem(linkresolverDocument
                                                                            .get(0).getItem());
                                                                } else {
                                                                    daiaDocument.getItem()
                                                                            .addAll(linkresolverDocument.get(0)
                                                                                    .getItem());
                                                                }
                                                            } else {

                                                                this.logger.debug("Ja, der Fall ist das!");
                                                                openurl = "";

                                                                if (document.getIssnprint() != null) {
                                                                    if (document.getIssnprint()
                                                                            .startsWith("ISSN ")) {
                                                                        openurl += "&rft.genre=journal&&rft.issn="
                                                                                + document.getIssnprint()
                                                                                        .replaceAll("ISSN ",
                                                                                                "");
                                                                    }
                                                                } else if (document.getIssnwww() != null) {
                                                                    if (document.getIssnwww()
                                                                            .startsWith("ISSN ")) {
                                                                        openurl += "&rft.genre=journal&&rft.issn="
                                                                                + document.getIssnwww()
                                                                                        .replaceAll("ISSN ",
                                                                                                "");
                                                                    }
                                                                }

                                                                if (!openurl.equals("")) {
                                                                    // get items
                                                                    linkresolverDocument = linkResolver
                                                                            .items("openurl", openurl);

                                                                    if (linkresolverDocument != null
                                                                            && linkresolverDocument
                                                                                    .size() > 0) {
                                                                        this.logger.debug(linkresolverDocument
                                                                                .get(0).getItem().size() + ", "
                                                                                + jopDocuments.get(0)
                                                                                        .getCountDigitlItems());
                                                                    }

                                                                    if (linkresolverDocument != null
                                                                            && linkresolverDocument.size() > 0
                                                                            && linkresolverDocument.get(0)
                                                                                    .getItem()
                                                                                    .size() >= jopDocuments
                                                                                            .get(0)
                                                                                            .getCountDigitlItems()) {

                                                                        if (daiaDocument.getItem() == null
                                                                                || daiaDocument.getItem()
                                                                                        .size() == 0) {
                                                                            daiaDocument.setItem(
                                                                                    linkresolverDocument.get(0)
                                                                                            .getItem());
                                                                        } else {
                                                                            daiaDocument.getItem()
                                                                                    .addAll(linkresolverDocument
                                                                                            .get(0).getItem());
                                                                        }
                                                                    } else {

                                                                        // TODO Ticket 11679

                                                                        // E-Mail an katalogplus@ub.tu-dortmund.de mit Betreff-Prefix [Content]

                                                                        boolean isNatLic = true;

                                                                        if (isNatLic) {

                                                                            if (!issn.equals("")) {

                                                                                // request JOP again with only ISSN
                                                                                jopDocuments = journalOnlinePrintService
                                                                                        .eonly("issn", issn);

                                                                                if (jopDocuments != null
                                                                                        && jopDocuments
                                                                                                .size() > 0) {

                                                                                    this.logger
                                                                                            .debug("JOP hits: "
                                                                                                    + jopDocuments
                                                                                                            .size());

                                                                                    if (daiaDocument
                                                                                            .getItem() == null
                                                                                            || daiaDocument
                                                                                                    .getItem()
                                                                                                    .size() == 0) {
                                                                                        daiaDocument.setItem(
                                                                                                jopDocuments
                                                                                                        .get(0)
                                                                                                        .getItem());
                                                                                    } else {
                                                                                        daiaDocument.getItem()
                                                                                                .addAll(jopDocuments
                                                                                                        .get(0)
                                                                                                        .getItem());
                                                                                    }

                                                                                }
                                                                            } else {

                                                                                if (daiaDocument
                                                                                        .getItem() == null
                                                                                        || daiaDocument
                                                                                                .getItem()
                                                                                                .size() == 0) {
                                                                                    daiaDocument = null;
                                                                                }
                                                                            }
                                                                        } else {

                                                                            if (daiaDocument.getItem() == null
                                                                                    || daiaDocument.getItem()
                                                                                            .size() == 0) {
                                                                                daiaDocument = null;
                                                                            }
                                                                        }
                                                                    }
                                                                } else {

                                                                    //daiaDocument = null;

                                                                    /* TODO tue nix? */
                                                                    if (daiaDocument.getItem() == null
                                                                            || daiaDocument.getItem()
                                                                                    .size() == 0) {

                                                                        if (daiaDocument.getItem() == null) {
                                                                            daiaDocument.setItem(
                                                                                    new ArrayList<Item>());
                                                                        }
                                                                        daiaDocument
                                                                                .setItem(linkresolverDocument
                                                                                        .get(0).getItem());
                                                                    } else {
                                                                        daiaDocument.getItem()
                                                                                .addAll(linkresolverDocument
                                                                                        .get(0).getItem());
                                                                    }

                                                                }

                                                            }
                                                        }

                                                        if (daiaDocument != null) {

                                                            daiaDocuments.add(daiaDocument);
                                                        }
                                                    }
                                                } else if (document.getZdbid() != null) {

                                                    this.logger.info("Bin drin!");

                                                    JournalOnlinePrintService journalOnlinePrintService = Lookup
                                                            .lookup(JournalOnlinePrintService.class);
                                                    // init JOP
                                                    journalOnlinePrintService.init(this.config);

                                                    // get items
                                                    ArrayList<de.tu_dortmund.ub.api.daia.jop.model.Document> jopDocuments = journalOnlinePrintService
                                                            .items("zdbid", document.getZdbid());

                                                    if (jopDocuments != null) {

                                                        this.logger.info(
                                                                "jopDocuments.size()=" + jopDocuments.size());
                                                    }

                                                    if (jopDocuments != null && jopDocuments.size() > 0) {

                                                        de.tu_dortmund.ub.api.daia.model.Document daiaDocument = new de.tu_dortmund.ub.api.daia.model.Document();

                                                        if (jopDocuments.get(0).getId() != null) {
                                                            daiaDocument.setId(jopDocuments.get(0).getId());
                                                        } else {
                                                            daiaDocument.setId(this.config
                                                                    .getProperty("daia.document.baseurl")
                                                                    + document.getZdbid());
                                                        }

                                                        if (jopDocuments.get(0).getHref() != null) {
                                                            daiaDocument.setHref(jopDocuments.get(0).getHref());
                                                        } else {
                                                            daiaDocument.setHref(this.config
                                                                    .getProperty("daia.document.baseurl")
                                                                    + document.getZdbid());
                                                        }

                                                        // print
                                                        if (jopDocuments.get(0).getItem() != null
                                                                && jopDocuments.get(0).getItem().size() > 0) {
                                                            daiaDocument.setItem(jopDocuments.get(0).getItem());
                                                        }

                                                        // digital - nicht mglich, da ISSN fehlt
                                                        this.logger.info(
                                                                "jopDocuments.get(0).isExistsDigitalItems()="
                                                                        + jopDocuments.get(0)
                                                                                .isExistsDigitalItems());

                                                        if (jopDocuments.get(0).isExistsDigitalItems()) {

                                                            jopDocuments = journalOnlinePrintService
                                                                    .eonly("zdbid", document.getZdbid());

                                                            if (jopDocuments != null
                                                                    && jopDocuments.size() > 0) {

                                                                if (daiaDocument.getItem() == null
                                                                        || daiaDocument.getItem().size() == 0) {
                                                                    daiaDocument.setItem(
                                                                            jopDocuments.get(0).getItem());
                                                                } else {
                                                                    daiaDocument.getItem().addAll(
                                                                            jopDocuments.get(0).getItem());
                                                                }
                                                            }
                                                        }

                                                        daiaDocuments.add(daiaDocument);
                                                    }
                                                } else {
                                                    // evtl. Serienaufnahme
                                                    indexToRemove.add(documents.indexOf(document));
                                                }
                                            }
                                        } else {
                                            de.tu_dortmund.ub.api.daia.model.Document daiaDocument = new de.tu_dortmund.ub.api.daia.model.Document();
                                            daiaDocument.setId(document.getId());
                                            daiaDocument.setHref(document.getHref());

                                            if (document.getErschform() != null
                                                    && document.getErschform().equals("p")
                                                    && document.getVeroefart() != null
                                                    && document.getVeroefart().equals("da")) {

                                                // TODO inhaltlich falsch
                                                if (document.getLokaleurl() != null
                                                        && !document.getLokaleurl().equals("")) {

                                                    //this.logger.info(document.getItem().size() + " Items");
                                                    document.getItem().get(0)
                                                            .setHref(document.getLokaleurl().get(0));
                                                } else if (document.getUrl() != null
                                                        && !document.getUrl().equals("")) {
                                                    document.getItem().get(0).setHref(document.getUrl().get(0));
                                                }
                                            }

                                            daiaDocument.setItem(document.getItem());

                                            String editionStatement = "";
                                            if (document.getAusgabe() != null
                                                    && !document.getAusgabe().equals("")) {
                                                editionStatement += document.getAusgabe() + ". ";
                                            }
                                            if (document.getErschjahr() != null
                                                    && !document.getErschjahr().equals("")) {
                                                editionStatement += document.getErschjahr();
                                            }
                                            if (document.getUmfang() != null
                                                    && !document.getUmfang().equals("")) {
                                                editionStatement += ". - " + document.getUmfang();
                                            }
                                            daiaDocument.setEdition(editionStatement);
                                            daiaDocuments.add(daiaDocument);
                                        }
                                    }
                                }

                                if (indexToRemove.size() > 0) {

                                    for (Integer i : indexToRemove) {

                                        documents.remove(Integer.valueOf(i));
                                    }

                                }

                                if (daiaDocuments.size() > 0) {

                                    Daia daia = new Daia();
                                    daia.setVersion(this.config.getProperty("daia.version"));
                                    daia.setSchema(this.config.getProperty("daia.schema"));

                                    GregorianCalendar gc = new GregorianCalendar();
                                    gc.setTimeInMillis(new java.util.Date().getTime());
                                    try {
                                        DatatypeFactory df = DatatypeFactory.newInstance();

                                        daia.setTimestamp(df.newXMLGregorianCalendar(gc).toString());

                                    } catch (DatatypeConfigurationException dce) {
                                        this.logger.error("ERROR: Service unavailable.");
                                    }

                                    Institution institution = new Institution();
                                    institution.setId(this.config.getProperty("daia.institution.id"));
                                    institution.setHref(this.config.getProperty("daia.institution.href"));
                                    institution.setContent(this.config.getProperty("daia.institution.content"));
                                    daia.setInstitution(institution);

                                    daia.setDocument(daiaDocuments);

                                    // Ausgabe
                                    this.logger.debug("format = " + format);

                                    // HTML-Ausgabe via XSLT
                                    if (format.equals("html")) {

                                        try {

                                            JAXBContext context = JAXBContext.newInstance(Daia.class);
                                            Marshaller m = context.createMarshaller();
                                            m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);

                                            // Write to HttpResponse
                                            StringWriter stringWriter = new StringWriter();
                                            m.marshal(daia, stringWriter);

                                            Document doc = new SAXBuilder()
                                                    .build(new StringReader(stringWriter.toString()));

                                            HashMap<String, String> parameters = new HashMap<String, String>();
                                            parameters.put("lang", "de");
                                            parameters.put("isTUintern", Boolean.toString(isTUintern));
                                            parameters.put("isUBintern", Boolean.toString(isUBintern));
                                            parameters.put("is52bIBA", Boolean.toString(is52bIBA));

                                            this.logger.debug("idtype = " + idtype);
                                            parameters.put("id", idtype + ":" + localpart);

                                            ObjectMapper mapper = new ObjectMapper();
                                            StringWriter json = new StringWriter();
                                            mapper.writeValue(json, daia);
                                            parameters.put("json", json.toString());

                                            String html = htmlOutputter(doc,
                                                    this.config.getProperty("linkresolver.html.xslt"),
                                                    parameters);

                                            response.setContentType("text/html;charset=UTF-8");
                                            response.setStatus(HttpServletResponse.SC_OK);
                                            response.getWriter().println(html);
                                        } catch (PropertyException e) {
                                            this.logger.error(e.getMessage(), e.getCause());
                                            response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR,
                                                    "Internal Server Error: Error while rendering the results.");
                                        } catch (JAXBException e) {
                                            this.logger.error(e.getMessage(), e.getCause());
                                            response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR,
                                                    "Internal Server Error: Error while rendering the results.");
                                        } catch (JDOMException e) {
                                            this.logger.error(e.getMessage(), e.getCause());
                                            response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR,
                                                    "Internal Server Error: Error while rendering the results.");
                                        }
                                    }

                                    // XML-Ausgabe mit JAXB
                                    if (format.equals("xml")) {

                                        try {

                                            JAXBContext context = JAXBContext.newInstance(Daia.class);
                                            Marshaller m = context.createMarshaller();
                                            m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);

                                            // Write to HttpResponse
                                            response.setContentType("application/xml;charset=UTF-8");
                                            response.setStatus(HttpServletResponse.SC_OK);
                                            m.marshal(daia, response.getWriter());
                                        } catch (PropertyException e) {
                                            this.logger.error(e.getMessage(), e.getCause());
                                            response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR,
                                                    "Internal Server Error: Error while rendering the results.");
                                        } catch (JAXBException e) {
                                            this.logger.error(e.getMessage(), e.getCause());
                                            response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR,
                                                    "Internal Server Error: Error while rendering the results.");
                                        }
                                    }

                                    // JSON-Ausgabe mit Jackson
                                    if (format.equals("json")) {

                                        ObjectMapper mapper = new ObjectMapper();

                                        response.setContentType("application/json;charset=UTF-8");
                                        response.setStatus(HttpServletResponse.SC_OK);
                                        mapper.writeValue(response.getWriter(), daia);
                                    }

                                    // RDF-Ausgabe mit XSLT auf XML-Ausgabe
                                    if (format.equals("rdf")) {

                                        try {
                                            JAXBContext context = JAXBContext.newInstance(Daia.class);
                                            Marshaller m = context.createMarshaller();
                                            m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);

                                            // Write to HttpResponse
                                            response.setContentType("application/xml;charset=UTF-8");
                                            response.setStatus(HttpServletResponse.SC_OK);

                                            StringWriter xml = new StringWriter();
                                            m.marshal(daia, xml);

                                            XMLOutputter out = new XMLOutputter();
                                            out.output(
                                                    new SAXBuilder().build(new StringReader(xmlOutputter(
                                                            new SAXBuilder()
                                                                    .build(new StringReader(xml.toString())),
                                                            config.getProperty("xslt_xml2rdf"), null))),
                                                    response.getWriter());

                                        } catch (JDOMException e) {
                                            this.logger.error(e.getMessage(), e.getCause());
                                            response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR,
                                                    "Internal Server Error: Error while rendering the results.");
                                        } catch (PropertyException e) {
                                            this.logger.error(e.getMessage(), e.getCause());
                                            response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR,
                                                    "Internal Server Error: Error while rendering the results.");
                                        } catch (JAXBException e) {
                                            this.logger.error(e.getMessage(), e.getCause());
                                            response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR,
                                                    "Internal Server Error: Error while rendering the results.");
                                        }
                                    }
                                } else {

                                    // Document not found
                                    if (format.equals("html")) {

                                        try {

                                            JAXBContext context = JAXBContext.newInstance(Daia.class);
                                            Marshaller m = context.createMarshaller();
                                            m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);

                                            // Write to HttpResponse
                                            Document doc = new Document();
                                            doc.setRootElement(new Element("daia"));

                                            HashMap<String, String> parameters = new HashMap<String, String>();
                                            parameters.put("lang", "de");
                                            parameters.put("isTUintern", Boolean.toString(isTUintern));
                                            parameters.put("isUBintern", Boolean.toString(isUBintern));
                                            parameters.put("is52bIBA", Boolean.toString(is52bIBA));

                                            parameters.put("id", idtype + ":" + localpart);

                                            String html = htmlOutputter(doc,
                                                    this.config.getProperty("linkresolver.html.xslt"),
                                                    parameters);

                                            response.setContentType("text/html;charset=UTF-8");
                                            response.setStatus(HttpServletResponse.SC_OK);
                                            response.getWriter().println(html);
                                        } catch (PropertyException e) {
                                            this.logger.error(e.getMessage(), e.getCause());
                                            response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR,
                                                    "Internal Server Error: Error while rendering a HTML message. Message is 'Document not found'.");
                                        } catch (JAXBException e) {
                                            this.logger.error(e.getMessage(), e.getCause());
                                            response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR,
                                                    "Internal Server Error: Error while rendering a HTML message. Message is 'Document not found'.");
                                        }
                                    } else {
                                        response.sendError(HttpServletResponse.SC_NOT_FOUND,
                                                "Document not found.");
                                    }
                                }
                            } else {

                                // Document not found
                                if (format.equals("html")) {

                                    try {

                                        JAXBContext context = JAXBContext.newInstance(Daia.class);
                                        Marshaller m = context.createMarshaller();
                                        m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);

                                        // Write to HttpResponse
                                        Document doc = new Document();
                                        doc.setRootElement(new Element("daia"));

                                        HashMap<String, String> parameters = new HashMap<String, String>();
                                        parameters.put("lang", "de");
                                        parameters.put("isTUintern", Boolean.toString(isTUintern));
                                        parameters.put("isUBintern", Boolean.toString(isUBintern));
                                        parameters.put("is52bIBA", Boolean.toString(is52bIBA));

                                        parameters.put("id", idtype + ":" + localpart);

                                        String html = htmlOutputter(doc,
                                                this.config.getProperty("linkresolver.html.xslt"), parameters);

                                        response.setContentType("text/html;charset=UTF-8");
                                        response.setStatus(HttpServletResponse.SC_OK);
                                        response.getWriter().println(html);
                                    } catch (PropertyException e) {
                                        this.logger.error(e.getMessage(), e.getCause());
                                        response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR,
                                                "Internal Server Error: Error while rendering a HTML message. Message is 'Document not found'.");
                                    } catch (JAXBException e) {
                                        this.logger.error(e.getMessage(), e.getCause());
                                        response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR,
                                                "Internal Server Error: Error while rendering a HTML message. Message is 'Document not found'.");
                                    }
                                } else {
                                    response.sendError(HttpServletResponse.SC_NOT_FOUND, "Document not found.");
                                }
                            }
                        } else {
                            response.sendError(HttpServletResponse.SC_SERVICE_UNAVAILABLE,
                                    "Service unavailable (ILS): No ILS configured!");
                        }
                    } catch (ILSException e) {
                        e.printStackTrace();
                        response.sendError(HttpServletResponse.SC_SERVICE_UNAVAILABLE,
                                "Service unavailable (ILS).");
                    } catch (LinkResolverException e) {
                        response.sendError(HttpServletResponse.SC_SERVICE_UNAVAILABLE,
                                "Service unavailable (LinkResolver).");
                    } catch (JOPException e) {
                        response.sendError(HttpServletResponse.SC_SERVICE_UNAVAILABLE,
                                "Service unavailable (JOP).");
                    }
                }
            }
        }
    } catch (Exception e) {

        e.printStackTrace();

        this.logger.error(new Date() + "[DAIA] Exception: " + HttpServletResponse.SC_SERVICE_UNAVAILABLE
                + " Service unavailable.");
        this.logger.error(e.getMessage(), e.getCause());
        for (StackTraceElement stackTraceElement : e.getStackTrace()) {
            this.logger.error("\t" + stackTraceElement.toString());
        }

        Mailer mailer = new Mailer(this.config.getProperty("service.mailer.conf"));

        try {

            String referer = "'none'";
            if (request.getHeader("referer") != null) {

                referer = request.getHeader("referer");
            }
            mailer.postMail(
                    "[DAIA] Exception: " + HttpServletResponse.SC_SERVICE_UNAVAILABLE + " Service unavailable.",
                    e.getMessage() + "\n" + request.getRequestURL() + "\n" + ips + "\n" + referer + "\n" + "\n"
                            + e.getCause().toString());

        } catch (MessagingException e1) {

            this.logger.error(e1.getMessage(), e1.getCause());
        }

        response.sendError(HttpServletResponse.SC_SERVICE_UNAVAILABLE, "Service unavailable.");
    }
}

From source file:de.tu_dortmund.ub.api.daia.DaiaOpenUrlEndpoint.java

License:Open Source License

private void provideService(HttpServletRequest request, HttpServletResponse response, String format,
        HashMap<String, String> latinParameters, boolean isTUintern, boolean isUBintern, boolean is52bIBA)
        throws IOException {

    String openurl = "";

    try {/*from w  w w  .ja  va 2  s.c om*/

        // build openurl
        for (String k : latinParameters.keySet()) {

            // repeat input-openurl
            if (!k.equals("format") && !k.equals("system") && !latinParameters.get(k).equals("")) {

                if (latinParameters.get(k).contains("/>")) {
                    latinParameters.put(k, latinParameters.get(k).replaceAll("/>", ""));
                }
                if (latinParameters.get(k).contains(">")) {
                    latinParameters.put(k, latinParameters.get(k).replaceAll(">", ""));
                }

                String prefix = "";
                if (!k.startsWith("rft")) {
                    prefix = "rft.";
                }

                String value = "";

                if (k.contains("title") || k.contains("au")) {
                    value = latinParameters.get(k);
                } else if (k.contains("issn") && !latinParameters.get(k).equals("")) {

                    if (latinParameters.get(k).contains("-")) {
                        value = latinParameters.get(k);
                    } else {
                        value = latinParameters.get(k).subSequence(0, 4) + "-"
                                + latinParameters.get(k).subSequence(4, 8);
                    }
                } else {
                    value = latinParameters.get(k);
                }

                openurl += "&" + prefix + k + "=" + URLEncoder.encode(value, "UTF-8");
            }
        }
        this.logger.debug("\n" + "\tOpenURL-Parameter = " + this.config.getProperty("linkresolver.baseurl")
                + this.config.getProperty("linkresolver.parameters") + openurl);

        ArrayList<Document> daiaDocuments = new ArrayList<Document>();

        // falls OpenURL contains isbn: Anfrage an "normalen DaiaService Endpoint
        String isbn = "";
        if (latinParameters.get("rft.isbn") != null && !latinParameters.get("rft.isbn").equals("")) {
            isbn = latinParameters.get("rft.isbn");
        } else if (latinParameters.get("isbn") != null && !latinParameters.get("isbn").equals("")) {
            isbn = latinParameters.get("isbn");
        } else if (latinParameters.get("id") != null && latinParameters.get("id").contains("isbn:")) {
            isbn = latinParameters.get("id").split(":")[1];
        }
        this.logger.debug("ISBN = " + isbn);

        if (!isbn.equals("")) {

            if (Lookup.lookupAll(IntegratedLibrarySystem.class).size() > 0) {
                // erst DAIA isbn fragen
                if (isbn.contains("; ")) {
                    isbn = isbn.replaceAll("; ", ",");
                }
                String daiaUrl = "http://" + request.getServerName() + ":" + request.getServerPort()
                        + "/daia/?id=isbn:" + isbn;
                this.logger.debug("daiaUrl = " + daiaUrl);
                CloseableHttpClient httpclient = HttpClients.createDefault();
                HttpGet httpGet = new HttpGet(daiaUrl);
                httpGet.addHeader("Accept", "application/xml");

                CloseableHttpResponse httpResponse = httpclient.execute(httpGet);

                try {

                    int statusCode = httpResponse.getStatusLine().getStatusCode();
                    HttpEntity httpEntity = httpResponse.getEntity();

                    switch (statusCode) {

                    case 200: {

                        JAXBContext jaxbContext = JAXBContext.newInstance(Daia.class);
                        Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
                        Daia daia = (Daia) unmarshaller.unmarshal(httpEntity.getContent());

                        if (daia.getDocument() != null) {

                            daiaDocuments.addAll(daia.getDocument());
                        }

                        break;
                    }
                    default: {

                        // TODO Evaluieren: Das mssten die Flle sein, in denen E-Books in der Knowledgebase eingetragen sind
                        if (Lookup.lookupAll(LinkResolver.class).size() > 0) {

                            Document daiaDocument = null;

                            LinkResolver linkResolver = Lookup.lookup(LinkResolver.class);
                            // init Linkresolver
                            linkResolver.init(this.config);

                            // get items
                            ArrayList<Document> linkresolverDocument = linkResolver.items("openurl", openurl);

                            if (linkresolverDocument != null && linkresolverDocument.size() > 0) {

                                daiaDocument = new Document();

                                daiaDocument.setId("urn:isbn:" + isbn);

                                if (daiaDocument.getItem() == null || daiaDocument.getItem().size() == 0) {

                                    daiaDocument.setItem(linkresolverDocument.get(0).getItem());
                                } else {
                                    daiaDocument.getItem().addAll(linkresolverDocument.get(0).getItem());
                                }

                                if (daiaDocument != null) {

                                    daiaDocuments.add(daiaDocument);
                                }
                            }
                        }
                    }
                    }

                    EntityUtils.consume(httpEntity);
                } finally {
                    httpResponse.close();
                }
            }
        } else {

            // Wenn JOP registriert ist
            if (Lookup.lookupAll(JournalOnlinePrintService.class).size() > 0) {

                // build OpenURL for JOP
                String issn = "";
                if (latinParameters.get("rft.issn") != null && !latinParameters.get("rft.issn").equals("")) {
                    issn = latinParameters.get("rft.issn");
                } else if (latinParameters.get("issn") != null && !latinParameters.get("issn").equals("")) {
                    issn = latinParameters.get("issn");
                }
                if (latinParameters.get("rft.eissn") != null && !latinParameters.get("rft.eissn").equals("")) {
                    issn = latinParameters.get("rft.eissn");
                } else if (latinParameters.get("eissn") != null && !latinParameters.get("eissn").equals("")) {
                    issn = latinParameters.get("eissn");
                } else if (latinParameters.get("id") != null && latinParameters.get("id").contains("issn:")) {
                    issn = latinParameters.get("id").split(":")[1];
                }
                this.logger.debug("ISSN = " + issn);

                String jop_openurl = "";

                for (String k : latinParameters.keySet()) {

                    // mit rft
                    if ((latinParameters.keySet().contains("rft.atitle")
                            || latinParameters.keySet().contains("atitle")) && k.equals("rft.date")
                            && !latinParameters.get(k).equals("")) {
                        jop_openurl += "&date=" + latinParameters.get(k);
                    }
                    if (k.equals("rft.volume") && !latinParameters.get(k).equals("")) {
                        jop_openurl += "&volume=" + latinParameters.get(k);
                    }
                    if (k.equals("rft.issue") && !latinParameters.get(k).equals("")) {
                        jop_openurl += "&issue=" + latinParameters.get(k);
                    }

                    // ohne rft
                    if ((latinParameters.keySet().contains("rft.atitle")
                            || latinParameters.keySet().contains("atitle")) && k.equals("date")
                            && !latinParameters.get(k).equals("")) {
                        jop_openurl += "&date=" + latinParameters.get(k);
                    }
                    if (k.equals("volume") && !latinParameters.get(k).equals("")) {
                        jop_openurl += "&volume=" + latinParameters.get(k);
                    }
                    if (k.equals("issue") && !latinParameters.get(k).equals("")) {
                        jop_openurl += "&issue=" + latinParameters.get(k);
                    }
                }

                if (!issn.equals("")) {

                    if (issn.contains("-")) {
                        jop_openurl += "&issn=" + issn;
                    } else {
                        jop_openurl += "&issn=" + issn.subSequence(0, 4) + "-" + issn.subSequence(4, 8);
                    }
                }

                if (latinParameters.keySet().contains("rft.atitle")
                        || latinParameters.keySet().contains("atitle")) {
                    jop_openurl += "&genre=article";
                } else {
                    jop_openurl += "&genre=journal";
                }

                this.logger.debug("\n" + jop_openurl + "\tOpenURL-Parameter (JOP) = "
                        + this.config.getProperty("jop.url.openurl") + jop_openurl);

                if (!jop_openurl.equals("&genre=journal")
                        && (jop_openurl.contains("&title=") || jop_openurl.contains("&issn="))) {

                    // get data
                    try {

                        JournalOnlinePrintService journalOnlinePrintService = Lookup
                                .lookup(JournalOnlinePrintService.class);
                        // init JOP
                        journalOnlinePrintService.init(this.config);

                        // get items
                        ArrayList<de.tu_dortmund.ub.api.daia.jop.model.Document> jopDocuments = journalOnlinePrintService
                                .items("openurl", jop_openurl);

                        if (jopDocuments != null && jopDocuments.size() > 0) {

                            Document daiaDocument = new Document();

                            this.logger.debug("JOP hits: " + jopDocuments.size());

                            if (jopDocuments.get(0).getId() != null && jopDocuments.get(0).getHref() != null) {
                                daiaDocument.setId(jopDocuments.get(0).getId());
                                daiaDocument.setHref(jopDocuments.get(0).getHref());
                            } else {
                                daiaDocument.setId("urn:issn:" + issn);
                            }

                            // print
                            if (jopDocuments.get(0).getItem() != null
                                    && jopDocuments.get(0).getItem().size() > 0) {
                                daiaDocument.setItem(jopDocuments.get(0).getItem());
                            }

                            // digital
                            if (jopDocuments.get(0).isExistsDigitalItems()
                                    && Lookup.lookupAll(LinkResolver.class).size() > 0) {

                                // TODO define a boolean variable for executing a linkresolver request
                                // TODO auslagern!
                                LinkResolver linkResolver = Lookup.lookup(LinkResolver.class);
                                // init Linkresolver
                                linkResolver.init(this.config);

                                // get items
                                ArrayList<Document> linkresolverDocument = linkResolver.items("openurl",
                                        openurl);

                                if (linkresolverDocument != null && linkresolverDocument.size() > 0
                                        && linkresolverDocument.get(0).getItem().size() >= jopDocuments.get(0)
                                                .getCountDigitlItems()) {

                                    if (daiaDocument.getItem() == null || daiaDocument.getItem().size() == 0) {
                                        daiaDocument.setItem(linkresolverDocument.get(0).getItem());
                                    } else {
                                        daiaDocument.getItem().addAll(linkresolverDocument.get(0).getItem());
                                    }
                                } else {

                                    // TODO Ticket 11679

                                    // E-Mail an katalogplus@ub.tu-dortmund.de mit Betreff-Prefix [Content]

                                    boolean isNatLic = true;

                                    if (isNatLic) {

                                        if (!issn.equals("")) {

                                            // request JOP again with only ISSN
                                            jopDocuments = journalOnlinePrintService.eonly("issn", issn);

                                            if (jopDocuments != null && jopDocuments.size() > 0) {

                                                this.logger.debug("JOP hits: " + jopDocuments.size());

                                                if (daiaDocument.getItem() == null
                                                        || daiaDocument.getItem().size() == 0) {
                                                    daiaDocument.setItem(jopDocuments.get(0).getItem());
                                                } else {
                                                    if (jopDocuments.get(0).getItem() != null) {
                                                        daiaDocument.getItem()
                                                                .addAll(jopDocuments.get(0).getItem());
                                                    } else {

                                                        // Error-E-Mail "JOP<>LinkResolver: Not an NatLic"
                                                        Mailer mailer = new Mailer(
                                                                this.config.getProperty("service.mailer.conf"));

                                                        try {

                                                            int cnt = 0;
                                                            if (linkresolverDocument != null) {
                                                                cnt = linkresolverDocument.get(0).getItem()
                                                                        .size();
                                                            }

                                                            mailer.postMail(
                                                                    "[DAIAopenurl] JOP-Document ohne Items ",
                                                                    "JOP-Link "
                                                                            + jopDocuments.get(0)
                                                                                    .getCountDigitlItems()
                                                                            + ": "
                                                                            + this.config.getProperty(
                                                                                    "jop.url.openurl")
                                                                            + jop_openurl + ".\n");

                                                        } catch (MessagingException e) {

                                                            this.logger.error(e.getMessage(), e.getCause());
                                                            this.logger.debug("[DAIAopenurl] CONTENT-ERROR");
                                                            this.logger.debug("OpenUrl: " + openurl
                                                                    + "\n\n\tJOP-URL: " + jop_openurl);
                                                        }

                                                        if (daiaDocument.getItem() == null
                                                                || daiaDocument.getItem().size() == 0) {
                                                            daiaDocument = null;
                                                        }
                                                    }
                                                }

                                            }
                                        } else {

                                            // Error-E-Mail "JOP<>LinkResolver: Not an NatLic"
                                            Mailer mailer = new Mailer(
                                                    this.config.getProperty("service.mailer.conf"));

                                            try {

                                                int cnt = 0;
                                                if (linkresolverDocument != null) {
                                                    cnt = linkresolverDocument.get(0).getItem().size();
                                                }

                                                mailer.postMail(
                                                        "[DAIAopenurl] JOP<>LinkResolver: NatLic without ISSN ",
                                                        "Laut ZDB/EZB gibt es "
                                                                + jopDocuments.get(0).getCountDigitlItems()
                                                                + "-mal elektronischen Bestand (vgl. "
                                                                + this.config.getProperty("jop.url.openurl")
                                                                + jop_openurl + ").\n" + "Laut 360 Link aber "
                                                                + cnt + "-mal (vgl. "
                                                                + this.config
                                                                        .getProperty("linkresolver.baseurl")
                                                                + this.config
                                                                        .getProperty("linkresolver.parameters")
                                                                + openurl + ").");

                                            } catch (MessagingException e) {

                                                this.logger.error(e.getMessage(), e.getCause());
                                                this.logger.debug("[DAIAopenurl] CONTENT-ERROR");
                                                this.logger.debug("OpenUrl: " + openurl + "\n\n\tJOP-URL: "
                                                        + jop_openurl);
                                            }

                                            if (daiaDocument.getItem() == null
                                                    || daiaDocument.getItem().size() == 0) {
                                                daiaDocument = null;
                                            }
                                        }
                                    } else {
                                        // Hier kann man nix machen!
                                    }
                                }
                            }

                            if (daiaDocument != null) {

                                daiaDocuments.add(daiaDocument);
                            }
                        }

                    } catch (LinkResolverException e) {

                        // daiaDocuments bleibt leer
                        this.logger.error("[DaiaService OpenUrl Endpoint] Exception: "
                                + HttpServletResponse.SC_SERVICE_UNAVAILABLE
                                + " Service unavailable (LinkResolver).");
                        this.logger.error(e.getMessage(), e.getCause());
                        for (StackTraceElement stackTraceElement : e.getStackTrace()) {
                            this.logger.error("\t" + stackTraceElement.toString());
                        }

                        Mailer mailer = new Mailer(this.config.getProperty("service.mailer.conf"));

                        try {
                            mailer.postMail(
                                    "[DaiaService OpenUrl Endpoint] Exception: "
                                            + HttpServletResponse.SC_SERVICE_UNAVAILABLE
                                            + " Service unavailable (LinkResolver).",
                                    e.getMessage() + "\n" + this.config.getProperty("linkresolver.baseurl")
                                            + this.config.getProperty("linkresolver.parameters") + openurl);

                        } catch (MessagingException e1) {

                            this.logger.error(e1.getMessage(), e1.getCause());
                        }

                    } catch (JOPException e) {

                        // daiaDocuments bleibt leer
                        this.logger.error("[DaiaService OpenUrl Endpoint] Exception: "
                                + HttpServletResponse.SC_SERVICE_UNAVAILABLE
                                + " Service unavailable (Journals Online & Print).");
                        this.logger.error(e.getMessage(), e.getCause());
                        for (StackTraceElement stackTraceElement : e.getStackTrace()) {
                            this.logger.error("\t" + stackTraceElement.toString());
                        }

                        Mailer mailer = new Mailer(this.config.getProperty("service.mailer.conf"));

                        try {
                            mailer.postMail(
                                    "[DaiaService OpenUrl Endpoint] Exception: "
                                            + HttpServletResponse.SC_SERVICE_UNAVAILABLE
                                            + " Service unavailable (Journals Online & Print).",
                                    e.getMessage() + "\n" + this.config.getProperty("jop.url.openurl")
                                            + jop_openurl);

                        } catch (MessagingException e1) {

                            this.logger.error(e1.getMessage(), e1.getCause());
                        }
                    }
                } else {

                    // tue nix: daiaDocuments bleibt leer
                }
            }
        }

        // Abschlusskorrektur fr ACM, IEEE und LNCS vor dem response
        // LNCS
        if (Lookup.lookupAll(LncsResolver.class).size() > 0
                && Boolean.parseBoolean(this.config.getProperty("licenced.lncs"))) {

            if (daiaDocuments.size() > 0) {

                for (Document daiaDocument : daiaDocuments) {

                    if (daiaDocument != null && daiaDocument.getId() != null
                            && daiaDocument.getId().contains("urn:issn:03029743")
                            && ((latinParameters.keySet().contains("id")
                                    && latinParameters.get("id").startsWith("doi:10.1007"))
                                    || (latinParameters.keySet().contains("rft.id")
                                            && latinParameters.get("rft.id").startsWith("doi:10.1145")))) {

                        daiaDocument.setItem(null);

                        LncsResolver lncsResolver = Lookup.lookup(LncsResolver.class);
                        lncsResolver.init(this.config);

                        Document lncsDocument = lncsResolver.items(latinParameters);

                        daiaDocument.setId(lncsDocument.getId());
                        daiaDocument.setHref(lncsDocument.getHref());
                        daiaDocument.setItem(lncsDocument.getItem());
                    }
                }
            }
        }

        // ACM
        if (Lookup.lookupAll(AcmResolver.class).size() > 0
                && Boolean.parseBoolean(this.config.getProperty("licenced.acm"))) {

            if ((latinParameters.keySet().contains("id") && latinParameters.get("id").contains("10.1145"))
                    || (latinParameters.keySet().contains("rft.id")
                            && latinParameters.get("rft.id").contains("10.1145"))) {

                if (daiaDocuments.size() > 0) {

                    for (Document daiaDocument : daiaDocuments) {

                        daiaDocument.setItem(null);

                        AcmResolver acmResolver = Lookup.lookup(AcmResolver.class);
                        acmResolver.init(this.config);

                        Document acmDocument = acmResolver.items(latinParameters);

                        daiaDocument.setId(acmDocument.getId());
                        daiaDocument.setHref(acmDocument.getHref());

                        if (daiaDocument.getItem() == null) {
                            daiaDocument.setItem(acmDocument.getItem());
                        } else {
                            daiaDocument.getItem().addAll(acmDocument.getItem());
                        }
                    }
                } else {

                    Document daiaDocument = new Document();

                    AcmResolver acmResolver = Lookup.lookup(AcmResolver.class);
                    acmResolver.init(this.config);

                    Document acmDocument = acmResolver.items(latinParameters);

                    daiaDocument.setId(acmDocument.getId());
                    daiaDocument.setHref(acmDocument.getHref());

                    if (daiaDocument.getItem() == null) {
                        daiaDocument.setItem(acmDocument.getItem());
                    } else {
                        daiaDocument.getItem().addAll(acmDocument.getItem());
                    }

                    daiaDocuments.add(daiaDocument);
                }
            }
        }

        // IEEE
        if (Lookup.lookupAll(IeeeResolver.class).size() > 0
                && Boolean.parseBoolean(this.config.getProperty("licenced.ieee"))) {

            if ((latinParameters.keySet().contains("id") && latinParameters.get("id").contains("10.1109"))
                    || (latinParameters.keySet().contains("rft.id")
                            && latinParameters.get("rft.id").contains("10.1109"))) {

                if (daiaDocuments.size() > 0) {

                    for (Document daiaDocument : daiaDocuments) {

                        daiaDocument.setItem(null);

                        IeeeResolver ieeeResolver = Lookup.lookup(IeeeResolver.class);
                        ieeeResolver.init(this.config);

                        Document ieeeDocument = ieeeResolver.items(latinParameters);

                        daiaDocument.setId(ieeeDocument.getId());
                        daiaDocument.setHref(ieeeDocument.getHref());

                        if (daiaDocument.getItem() == null) {
                            daiaDocument.setItem(ieeeDocument.getItem());
                        } else {
                            daiaDocument.getItem().addAll(ieeeDocument.getItem());
                        }
                    }
                } else {

                    Document daiaDocument = new Document();

                    IeeeResolver ieeeResolver = Lookup.lookup(IeeeResolver.class);
                    ieeeResolver.init(this.config);

                    Document ieeeDocument = ieeeResolver.items(latinParameters);

                    daiaDocument.setId(ieeeDocument.getId());
                    daiaDocument.setHref(ieeeDocument.getHref());

                    if (daiaDocument.getItem() == null) {
                        daiaDocument.setItem(ieeeDocument.getItem());
                    } else {
                        daiaDocument.getItem().addAll(ieeeDocument.getItem());
                    }

                    daiaDocuments.add(daiaDocument);
                }
            }
        }

        if (daiaDocuments.size() > 0) {

            this.logger.debug("200 Document Found");

            // TODO query footnotes from ils if configured

            // Ausgabe
            Daia daia = new Daia();
            daia.setVersion(this.config.getProperty("daia.version"));
            daia.setSchema(this.config.getProperty("daia.schema"));

            GregorianCalendar gc = new GregorianCalendar();
            gc.setTimeInMillis(new Date().getTime());
            try {
                DatatypeFactory df = DatatypeFactory.newInstance();

                daia.setTimestamp(df.newXMLGregorianCalendar(gc).toString());

            } catch (DatatypeConfigurationException dce) {
                this.logger.error("ERROR: Service unavailable.", dce.getCause());
            }

            Institution institution = new Institution();
            institution.setId(this.config.getProperty("daia.institution.id"));
            institution.setHref(this.config.getProperty("daia.institution.href"));
            institution.setContent(this.config.getProperty("daia.institution.content"));
            daia.setInstitution(institution);

            daia.setDocument(daiaDocuments);

            // Ausgabe
            if (daia.getDocument() == null || daia.getDocument().size() == 0) {

                // HTML-Ausgabe via XSLT
                if (format.equals("html")) {

                    try {

                        JAXBContext context = JAXBContext.newInstance(Daia.class);
                        Marshaller m = context.createMarshaller();
                        m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);

                        // Write to HttpResponse
                        StringWriter stringWriter = new StringWriter();
                        m.marshal(daia, stringWriter);

                        org.jdom2.Document doc = new org.jdom2.Document();
                        doc.setRootElement(new Element("daia"));

                        HashMap<String, String> parameters = new HashMap<String, String>();
                        parameters.put("lang", "de");
                        parameters.put("isTUintern", Boolean.toString(isTUintern));
                        parameters.put("isUBintern", Boolean.toString(isUBintern));
                        parameters.put("is52bIBA", Boolean.toString(is52bIBA));

                        parameters.put("id", "openurl:" + URLDecoder.decode(openurl, "UTF-8"));

                        ObjectMapper mapper = new ObjectMapper();
                        StringWriter json = new StringWriter();
                        mapper.writeValue(json, daia);
                        parameters.put("json", json.toString());

                        String html = htmlOutputter(doc, this.config.getProperty("linkresolver.html.xslt"),
                                parameters);

                        response.setContentType("text/html;charset=UTF-8");
                        response.setStatus(HttpServletResponse.SC_OK);
                        response.getWriter().println(html);
                    } catch (PropertyException e) {
                        this.logger.error(e.getMessage(), e.getCause());
                        response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR,
                                "Internal Server Error: Error while rendering a HTML message. Message is 'Document not found'.");
                    } catch (JAXBException e) {
                        this.logger.error(e.getMessage(), e.getCause());
                        response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR,
                                "Internal Server Error: Error while rendering a HTML message. Message is 'Document not found'.");
                    }
                } else {

                    response.sendError(HttpServletResponse.SC_NOT_FOUND, "Document not found.");
                }
            } else {

                this.logger.debug("format = " + format);

                // HTML-Ausgabe via XSLT
                if (format.equals("html")) {

                    try {

                        JAXBContext context = JAXBContext.newInstance(Daia.class);
                        Marshaller m = context.createMarshaller();
                        m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);

                        // Write to HttpResponse
                        StringWriter stringWriter = new StringWriter();
                        m.marshal(daia, stringWriter);

                        org.jdom2.Document doc = new SAXBuilder()
                                .build(new StringReader(this.cleanup(stringWriter.toString())));

                        HashMap<String, String> parameters = new HashMap<String, String>();
                        parameters.put("lang", "de");
                        parameters.put("isTUintern", Boolean.toString(isTUintern));
                        parameters.put("isUBintern", Boolean.toString(isUBintern));
                        parameters.put("is52bIBA", Boolean.toString(is52bIBA));

                        parameters.put("id", "openurl:" + URLDecoder.decode(openurl, "UTF-8"));

                        ObjectMapper mapper = new ObjectMapper();
                        StringWriter json = new StringWriter();
                        mapper.writeValue(json, daia);
                        parameters.put("json", json.toString());

                        String html = htmlOutputter(doc, this.config.getProperty("linkresolver.html.xslt"),
                                parameters);

                        response.setContentType("text/html;charset=UTF-8");
                        response.setStatus(HttpServletResponse.SC_OK);
                        response.getWriter().println(html);
                    } catch (PropertyException e) {
                        this.logger.error(e.getMessage(), e.getCause());
                        response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR,
                                "Internal Server Error: Error while rendering the results.");
                    } catch (JAXBException e) {
                        this.logger.error(e.getMessage(), e.getCause());
                        response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR,
                                "Internal Server Error: Error while rendering the results.");
                    } catch (JDOMException e) {
                        this.logger.error(e.getMessage(), e.getCause());
                        response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR,
                                "Internal Server Error: Error while rendering the results.");
                    } catch (IOException e) {
                        this.logger.error(e.getMessage(), e.getCause());
                        response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR,
                                "Internal Server Error: Error while rendering the results.");
                    }
                }

                // XML-Ausgabe mit JAXB
                if (format.equals("xml")) {

                    try {

                        JAXBContext context = JAXBContext.newInstance(Daia.class);
                        Marshaller m = context.createMarshaller();
                        m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);

                        // Write to HttpResponse
                        response.setContentType("application/xml;charset=UTF-8");
                        response.setStatus(HttpServletResponse.SC_OK);
                        m.marshal(daia, response.getWriter());
                    } catch (PropertyException e) {
                        this.logger.error(e.getMessage(), e.getCause());
                        response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR,
                                "Internal Server Error: Error while rendering the results.");
                    } catch (JAXBException e) {
                        this.logger.error(e.getMessage(), e.getCause());
                        response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR,
                                "Internal Server Error: Error while rendering the results.");
                    }
                }

                // JSON-Ausgabe mit Jackson
                if (format.equals("json")) {

                    ObjectMapper mapper = new ObjectMapper();

                    response.setContentType("application/json;charset=UTF-8");
                    response.setStatus(HttpServletResponse.SC_OK);

                    mapper.writeValue(response.getWriter(), daia);
                }

                // RDF-Ausgabe mit XSLT auf XML-Ausgabe
                if (format.equals("rdf")) {

                    try {
                        JAXBContext context = JAXBContext.newInstance(Daia.class);
                        Marshaller m = context.createMarshaller();
                        m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);

                        // Write to HttpResponse
                        response.setContentType("application/xml;charset=UTF-8");
                        response.setStatus(HttpServletResponse.SC_OK);

                        StringWriter xml = new StringWriter();
                        m.marshal(daia, xml);

                        XMLOutputter out = new XMLOutputter();
                        out.output(
                                new SAXBuilder().build(new StringReader(
                                        xmlOutputter(new SAXBuilder().build(new StringReader(xml.toString())),
                                                config.getProperty("xslt_xml2rdf"), null))),
                                response.getWriter());

                    } catch (JDOMException e) {
                        this.logger.error(e.getMessage(), e.getCause());
                        response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR,
                                "Internal Server Error: Error while rendering the results.");
                    } catch (PropertyException e) {
                        this.logger.error(e.getMessage(), e.getCause());
                        response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR,
                                "Internal Server Error: Error while rendering the results.");
                    } catch (JAXBException e) {
                        this.logger.error(e.getMessage(), e.getCause());
                        response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR,
                                "Internal Server Error: Error while rendering the results.");
                    }
                }
            }
        } else {

            this.logger.debug("404 Document Not Found + (format=" + format + ")");

            if (format.equals("html")) {

                try {

                    JAXBContext context = JAXBContext.newInstance(Daia.class);
                    Marshaller m = context.createMarshaller();
                    m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);

                    // Write to HttpResponse
                    org.jdom2.Document doc = new org.jdom2.Document();
                    doc.setRootElement(new Element("daia"));

                    HashMap<String, String> parameters = new HashMap<String, String>();
                    parameters.put("lang", "de");
                    parameters.put("isTUintern", Boolean.toString(isTUintern));
                    parameters.put("isUBintern", Boolean.toString(isUBintern));
                    parameters.put("is52bIBA", Boolean.toString(is52bIBA));

                    parameters.put("id", "openurl:" + URLDecoder.decode(openurl, "UTF-8"));

                    String html = htmlOutputter(doc, this.config.getProperty("linkresolver.html.xslt"),
                            parameters);

                    response.setContentType("text/html;charset=UTF-8");
                    response.setStatus(HttpServletResponse.SC_OK);
                    response.getWriter().println(html);
                } catch (PropertyException e) {
                    this.logger.error(e.getMessage(), e.getCause());
                    response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR,
                            "Internal Server Error: Error while rendering a HTML message. Message is 'Document not found'.");
                } catch (JAXBException e) {
                    this.logger.error(e.getMessage(), e.getCause());
                    response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR,
                            "Internal Server Error: Error while rendering a HTML message. Message is 'Document not found'.");
                }
            } else {
                response.sendError(HttpServletResponse.SC_NOT_FOUND, "Document not found.");
            }
        }
    } catch (Exception e) {

        this.logger.error("[DaiaService OpenUrl Endpoint] Exception: "
                + HttpServletResponse.SC_SERVICE_UNAVAILABLE + " Service unavailable.");
        this.logger.error(e.getMessage(), e.getCause());
        for (StackTraceElement stackTraceElement : e.getStackTrace()) {
            this.logger.error("\t" + stackTraceElement.toString());
        }

        Mailer mailer = new Mailer(this.config.getProperty("service.mailer.conf"));

        try {
            mailer.postMail("[DaiaService OpenUrl Endpoint] Exception: "
                    + HttpServletResponse.SC_SERVICE_UNAVAILABLE + " Service unavailable.",
                    e.getMessage() + "\n" + request.getRequestURL());

        } catch (MessagingException e1) {

            this.logger.error(e1.getMessage(), e1.getCause());
        }

        response.sendError(HttpServletResponse.SC_SERVICE_UNAVAILABLE, "Service unavailable.");
    }
}

From source file:de.tu_dortmund.ub.hb_ng.SolRDF.java

License:Open Source License

@Override
public String getResource(String graph, String uri, String format, boolean isAuthorized)
        throws LinkedDataStorageException {

    this.logger.info("getResource: " + graph);
    this.logger.info("getResource: " + uri);
    this.logger.info("getResource: " + format);
    this.logger.info("getResource: " + isAuthorized);

    String resource = null;//  w  ww.ja v  a2  s.c o m

    String queryResult = this.doResourceRequest(graph, uri, format, isAuthorized);

    if (queryResult != null && !queryResult.equals("")) {

        try {

            switch (format) {

            case "html": {

                Document document = new SAXBuilder().build(new StringReader(queryResult));

                StringWriter stringWriter = new StringWriter();
                stringWriter.write(htmlOutputter(document, this.config.getProperty("xslt.resource"), null));
                resource = stringWriter.toString();

                break;
            }
            case "rdf.xml": {

                Document document = new SAXBuilder().build(new StringReader(queryResult));

                StringWriter stringWriter = new StringWriter();
                XMLOutputter xmlOutputter = new XMLOutputter();
                xmlOutputter.output(document, stringWriter);
                resource = stringWriter.toString();

                break;
            }
            case "rdf.ttl": {

                resource = queryResult;

                break;
            }
            case "json": {

                resource = queryResult;

                break;
            }
            case "nquads": {

                resource = queryResult;

                break;
            }
            }
        } catch (JDOMException | IOException e) {

            throw new LinkedDataStorageException(e.getMessage(), e.getCause());
        }
    }

    return resource;
}