Package com.enioka.jqm.tools

Source Code of com.enioka.jqm.tools.QueueXmlExporter

package com.enioka.jqm.tools;

import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.NoResultException;
import javax.persistence.NonUniqueResultException;

import org.apache.log4j.Logger;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.output.Format;
import org.jdom.output.XMLOutputter;

import com.enioka.jqm.jpamodel.JobDef;
import com.enioka.jqm.jpamodel.Queue;

class QueueXmlExporter
{
    private static Logger jqmlogger = Logger.getLogger(QueueXmlExporter.class);
    private EntityManager em = Helpers.getNewEm();

    QueueXmlExporter()
    {

    }

    void export(String path, String queueName)
    {
        Queue q = null;
        Element root = new Element("jqm");
        Document document = new Document(root);

        Element queues = new Element("queues");
        root.addContent(queues);

        try
        {
            q = em.createQuery("SELECT q FROM Queue q WHERE q.name = :n", Queue.class).setParameter("n", queueName).getSingleResult();
        }
        catch (NonUniqueResultException s)
        {
            jqmlogger.error("Queue " + queueName + " is non unique. The admin must change the queue configurations");
            return;
        }
        catch (NoResultException ss)
        {
            jqmlogger.error("This queue doesn't exist");
            return;
        }

        Element queue = new Element("queue");
        queues.addContent(queue);

        Element name = new Element("name");
        name.setText(q.getName());
        Element description = new Element("description");
        description.setText(q.getDescription());
        Element timeToLive = new Element("timeToLive");
        timeToLive.setText(q.getTimeToLive() + "");

        queue.addContent(name);
        queue.addContent(description);
        queue.addContent(timeToLive);

        Element jobs = new Element("jobs");
        queue.addContent(jobs);

        ArrayList<JobDef> jds = (ArrayList<JobDef>) em.createQuery("SELECT j FROM JobDef j WHERE j.queue = :q", JobDef.class)
                .setParameter("q", q).getResultList();

        for (JobDef j : jds)
        {
            Element job = new Element("applicationName");
            job.setText(j.getApplicationName());
            jobs.addContent(job);
        }

        jds.clear();

        save(path, document);
    }

    void exportSeveral(String path, List<String> queueNames)
    {
        Queue q = null;
        Element root = new Element("jqm");
        Document document = new Document(root);

        Element queues = new Element("queues");
        root.addContent(queues);

        for (String queueName : queueNames)
        {
            try
            {
                q = em.createQuery("SELECT q FROM Queue q WHERE q.name = :n", Queue.class).setParameter("n", queueName).getSingleResult();
            }
            catch (NonUniqueResultException s)
            {
                jqmlogger.warn("Queue " + queueName + " is non unique. The admin must change the queue configuration");
            }
            catch (NoResultException ss)
            {
                jqmlogger.debug("This queue doesn't exist");
            }
            Element queue = new Element("queue");
            queues.addContent(queue);

            Element name = new Element("name");
            name.setText(q.getName());
            Element description = new Element("description");
            description.setText(q.getDescription());
            Element timeToLive = new Element("timeToLive");
            timeToLive.setText(q.getTimeToLive() + "");

            queue.addContent(name);
            queue.addContent(description);
            queue.addContent(timeToLive);

            Element jobs = new Element("jobs");
            queue.addContent(jobs);

            ArrayList<JobDef> jds = (ArrayList<JobDef>) em.createQuery("SELECT j FROM JobDef j WHERE j.queue = :q", JobDef.class)
                    .setParameter("q", q).getResultList();

            for (JobDef j : jds)
            {
                Element job = new Element("applicationName");
                job.setText(j.getApplicationName());
                jobs.addContent(job);
            }

            jds.clear();
        }

        save(path, document);
    }

    void exportAll(String path)
    {
        ArrayList<Queue> qs = null;
        Element root = new Element("jqm");
        Document document = new Document(root);

        Element queues = new Element("queues");
        root.addContent(queues);

        qs = (ArrayList<Queue>) em.createQuery("SELECT q FROM Queue q", Queue.class).getResultList();

        if (qs.isEmpty())
        {
            jqmlogger.warn("No queue");
        }

        for (Queue q : qs)
        {
            Element queue = new Element("queue");
            queues.addContent(queue);

            Element name = new Element("name");
            name.setText(q.getName());
            Element description = new Element("description");
            description.setText(q.getDescription());
            Element timeToLive = new Element("timeToLive");
            timeToLive.setText(q.getTimeToLive() + "");

            queue.addContent(name);
            queue.addContent(description);
            queue.addContent(timeToLive);

            Element jobs = new Element("jobs");
            queue.addContent(jobs);

            ArrayList<JobDef> jds = (ArrayList<JobDef>) em.createQuery("SELECT j FROM JobDef j WHERE j.queue = :q", JobDef.class)
                    .setParameter("q", q).getResultList();

            for (JobDef j : jds)
            {
                Element job = new Element("applicationName");
                job.setText(j.getApplicationName());
                jobs.addContent(job);
            }

            jds.clear();
        }

        save(path, document);
    }

    void save(String filePath, Document doc)
    {
        try
        {
            XMLOutputter out = new XMLOutputter(Format.getPrettyFormat());
            out.output(doc, new FileOutputStream(filePath));
        }
        catch (java.io.IOException e)
        {
            jqmlogger.error("could not create file", e);
        }
    }
}
TOP

Related Classes of com.enioka.jqm.tools.QueueXmlExporter

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.