Subversion Repositories bacoAlunos

Rev

Rev 1306 | Rev 1814 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

package pt.estgp.estgweb.services.courseunits;

import org.apache.fop.apps.FOPException;
import org.apache.log4j.Logger;
import org.dom4j.Document;
import org.dom4j.DocumentFactory;
import org.dom4j.Element;
import org.json.JSONArray;
import org.json.JSONObject;
import org.json.XML;
import pt.estgp.estgweb.domain.*;
import pt.estgp.estgweb.utils.Dom4jUtil;
import pt.estgp.estgweb.web.utils.DatesUtils;

import javax.xml.transform.TransformerException;
import java.io.File;
import java.io.IOException;

/**
 * @author Jorge Machado
 * @date 23/Out/2008
 * @see pt.estgp.estgweb.services.data
 */

public class CreateCourseUnitXML
{
    private static final 1.5.0/docs/api/java/util/logging/Logger.html">Logger logger = 1.5.0/docs/api/java/util/logging/Logger.html">Logger.getLogger(CreateCourseUnitXML.class);

    public void run(1.5.0/docs/api/java/lang/String.html">String toFile, CourseUnit courseUnit, UserSession userSession)
    {
        5+0%2Fdocs%2Fapi+Document">Document dom = run(courseUnit,userSession);
        try
        {
            new 1.5.0/docs/api/java/io/File.html">File(toFile).getParentFile().mkdirs();
            Dom4jUtil.write(dom,toFile);
        }
        catch (1.5.0/docs/api/java/io/IOException.html">IOException e)
        {
            logger.error(e,e);
        }
    }

    public 5+0%2Fdocs%2Fapi+Document">Document run(CourseUnit courseUnit, UserSession userSession)
    {
        org.dom4j.5+0%2Fdocs%2Fapi+Document">Document dom = DocumentFactory.getInstance().createDocument();
        5+0%2Fdocs%2Fapi+Element">Element rootElement = DocumentFactory.getInstance().createElement("courseUnit");
        dom.setRootElement(rootElement);
        rootElement.addAttribute("id", "" + courseUnit.getId());
        rootElement.addAttribute("importYear", "" + pt.estgp.estgweb.utils.DatesUtils.getImportYearIntranet(courseUnit.getImportYear()));
        rootElement.addAttribute("institutionCode", "" + courseUnit.getInstitutionCode());

        5+0%2Fdocs%2Fapi+Element">Element saveDate = DocumentFactory.getInstance().createElement("saveDate");
        saveDate.setText(""+ DatesUtils.getStringFromDateForFilename(courseUnit.getSaveDate()));

        5+0%2Fdocs%2Fapi+Element">Element updateDate = DocumentFactory.getInstance().createElement("updateDate");
        updateDate.setText(""+ DatesUtils.getStringFromDateForFilename(courseUnit.getUpdateDate()));

        5+0%2Fdocs%2Fapi+Element">Element name = DocumentFactory.getInstance().createElement("name");
        name.setText("" + courseUnit.getName());

        5+0%2Fdocs%2Fapi+Element">Element courseName = DocumentFactory.getInstance().createElement("courseName");
        courseName.setText("" + courseUnit.getCourseName());

        5+0%2Fdocs%2Fapi+Element">Element courseCode = DocumentFactory.getInstance().createElement("courseCode");
        courseCode.setText("" + courseUnit.getCourseCode());

        5+0%2Fdocs%2Fapi+Element">Element courseUnitCode = DocumentFactory.getInstance().createElement("courseUnitCode");

        courseUnitCode.setText("" + courseUnit.getCode());

        if(courseUnit.getResponsableTeacher()!=null)
        {
            Teacher s = courseUnit.getResponsableTeacher();
            5+0%2Fdocs%2Fapi+Element">Element responsavel = DocumentFactory.getInstance().createElement("responsavel");
            responsavel.addAttribute("code",""+s.getSigesCode());
            responsavel.addAttribute("name",""+s.getName());
            responsavel.addAttribute("email",""+s.getEmail());
            rootElement.add(responsavel);
        }

        rootElement.add(saveDate);
        rootElement.add(name);
        rootElement.add(courseUnitCode);
        rootElement.add(courseName);
        rootElement.add(courseCode);

        if(courseUnit.getObjectives() != null)
        {
            5+0%2Fdocs%2Fapi+Element">Element objectives = DocumentFactory.getInstance().createElement("objectives");
            objectives.setText(courseUnit.getObjectives());
            rootElement.add(objectives);
        }

       /* use json now
       if(courseUnit.getSummaries() != null)
        {
            Element summaries = DocumentFactory.getInstance().createElement("summaries");
            summaries.addAttribute("number",""+courseUnit.getSummaries().size());
            rootElement.add(summaries);
            for(CourseUnitSummary a: courseUnit.getSummaries())
            {
                Element summary = DocumentFactory.getInstance().createElement("summary");
                summaries.add(summary);
                summary.addAttribute("id",""+a.getId());
                summary.addAttribute("number",""+a.getNumeroAula());
                summary.addAttribute("dateAula",""+a.getDataAula());
                summary.addAttribute("studentsPresences",""+a.getAlunosPresentes());
                if(a.getDescricao() != null)
                {
                    Element text = DocumentFactory.getInstance().createElement("description");
                    text.setText(a.getDescricao());
                    summary.add(text);
                }
                if(a.getTitulo() != null)
                {
                    Element titulo = DocumentFactory.getInstance().createElement("title");
                    titulo.setText(a.getTitulo());
                    summary.add(titulo);
                }
            }
        }*/

        if(courseUnit.getSummariesJson() != null)
        {
            //Element summaries = DocumentFactory.getInstance().createElement("summaries");
            try {
                JSONObject obj = new JSONObject(courseUnit.getSummariesJson());
                int number = ((JSONArray)obj.get("summary")).length();
                1.5.0/docs/api/java/lang/String.html">String xml = XML.toString(obj);
                //SAXReader reader = new SAXReader();
                //Document domSumsJson = reader.read(new InputSource(new StringReader(xml)));

                //org.w3c.dom.Element summaries = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(new InputSource(new StringReader(xml))).getDocumentElement();
                5+0%2Fdocs%2Fapi+Element">Element summaries = Dom4jUtil.parse("<summaries>" + xml + "</summaries>").getRootElement();
                summaries.addAttribute("number",""+number);
                //domSumsJson.getRootElement();
                rootElement.add(summaries);
            } catch (1.5.0/docs/api/java/lang/Throwable.html">Throwable e) {
                e.printStackTrace();
            }

/*            rootElement.add(summaries);
            for(CourseUnitSummary a: courseUnit.getSummaries())
            {
                Element summary = DocumentFactory.getInstance().createElement("summary");
                summaries.add(summary);
                summary.addAttribute("id",""+a.getId());
                summary.addAttribute("number",""+a.getNumeroAula());
                summary.addAttribute("dateAula",""+a.getDataAula());
                summary.addAttribute("studentsPresences",""+a.getAlunosPresentes());
                if(a.getDescricao() != null)
                {
                    Element text = DocumentFactory.getInstance().createElement("description");
                    text.setText(a.getDescricao());
                    summary.add(text);
                }
                if(a.getTitulo() != null)
                {
                    Element titulo = DocumentFactory.getInstance().createElement("title");
                    titulo.setText(a.getTitulo());
                    summary.add(titulo);
                }
            }*/

        }

        if(courseUnit.getTeachers() != null)
        {
            5+0%2Fdocs%2Fapi+Element">Element teachers = DocumentFactory.getInstance().createElement("teachers");
            teachers.addAttribute("number",""+courseUnit.getTeachers().size());
            rootElement.add(teachers);
            for(Teacher s: courseUnit.getTeachers())
            {
                5+0%2Fdocs%2Fapi+Element">Element teacher = DocumentFactory.getInstance().createElement("teacher");
                teacher.addAttribute("code",""+s.getSigesCode());
                teacher.addAttribute("name",""+s.getName());
                teacher.addAttribute("email",""+s.getEmail());
                if(userSession != null && (userSession.getUser().isSuperuserOrAdmin() || userSession.getUser() instanceof Teacher))
                {
                    teacher.addAttribute("oemail",""+s.getOutEmail());
                    teacher.addAttribute("phone",""+s.getPhonenumber());
                    teacher.addAttribute("gmail",""+s.getGmail());
                    teacher.addAttribute("msn",""+s.getMsn());
                    teacher.addAttribute("skype",""+s.getSkype());
                }
                teachers.add(teacher);
            }
        }

        if(userSession != null && ( userSession.getUser().isSuperuserOrAdmin() || userSession.getUser() instanceof Teacher))
        {
            if(courseUnit.getStudents() != null)
            {
                5+0%2Fdocs%2Fapi+Element">Element students = DocumentFactory.getInstance().createElement("students");
                students.addAttribute("number",""+courseUnit.getStudents().size());
                rootElement.add(students);
                for(Student s: courseUnit.getStudents())
                {
                    5+0%2Fdocs%2Fapi+Element">Element student = DocumentFactory.getInstance().createElement("student");
                    student.addAttribute("code",""+s.getSigesCode());
                    student.addAttribute("name",""+s.getName());
                    student.addAttribute("email",""+s.getEmail());
                    student.addAttribute("oemail",""+s.getOutEmail());
                    student.addAttribute("phone",""+s.getPhonenumber());
                    student.addAttribute("gmail",""+s.getGmail());
                    student.addAttribute("msn",""+s.getMsn());
                    student.addAttribute("skype",""+s.getSkype());
                    students.add(student);
                }
            }
        }
        if(userSession != null && ( userSession.getUser().isSuperuserOrAdmin() || userSession.getUser() instanceof Teacher))
        {
            if(courseUnit.getAnnouncements() != null)
            {
                5+0%2Fdocs%2Fapi+Element">Element announcements = DocumentFactory.getInstance().createElement("announcements");
                announcements.addAttribute("number",""+courseUnit.getAnnouncements().size());
                rootElement.add(announcements);
                for(Announcement a: courseUnit.getAnnouncements())
                {
                    5+0%2Fdocs%2Fapi+Element">Element announcement = DocumentFactory.getInstance().createElement("announcement");
                    announcements.add(announcement);
                    announcement.addAttribute("id",""+a.getId());
                    announcement.addAttribute("title",""+a.getTitle());
                    announcement.addAttribute("date",""+a.getSaveDate());
                    if(a.getText() != null)
                    {
                        5+0%2Fdocs%2Fapi+Element">Element text = DocumentFactory.getInstance().createElement("text");
                        text.setText(a.getText());
                        announcement.add(text);
                    }
                    if(a.getUrl() != null)
                    {
                        5+0%2Fdocs%2Fapi+Element">Element url = DocumentFactory.getInstance().createElement("url");
                        url.setText(a.getUrl());
                        announcement.add(url);
                    }
                }
            }
        }

        if(userSession != null && ( userSession.getUser().isSuperuserOrAdmin() || userSession.getUser() instanceof Teacher))
        {
            if(courseUnit.getBlogs() != null)
            {
                5+0%2Fdocs%2Fapi+Element">Element blogs = DocumentFactory.getInstance().createElement("blogs");
                blogs.addAttribute("number",""+courseUnit.getBlogs().size());
                rootElement.add(blogs);
                for(Blog b: courseUnit.getBlogs())
                {
                    5+0%2Fdocs%2Fapi+Element">Element blog = DocumentFactory.getInstance().createElement("blog");
                    blogs.add(blog);
                    blog.addAttribute("id",""+b.getId());
                    blog.addAttribute("title",""+b.getTitle());
                    if(b.getDescription() !=  null)
                    {
                        5+0%2Fdocs%2Fapi+Element">Element desc = DocumentFactory.getInstance().createElement("description");
                        desc.setText(b.getDescription());
                        blog.add(desc);
                    }
                    5+0%2Fdocs%2Fapi+Element">Element posts = DocumentFactory.getInstance().createElement("posts");
                    posts.addAttribute("number",""+b.getPosts().size());
                    blog.add(posts);
                    if(b.getPosts() != null)
                    {
                        for(BlogPost bp: b.getPosts())
                        {
                            5+0%2Fdocs%2Fapi+Element">Element post = DocumentFactory.getInstance().createElement("post");
                            posts.add(post);
                            post.addAttribute("id",""+bp.getId());
                            post.addAttribute("saveDate",""+bp.getId());
                            blog.addAttribute("title",""+bp.getTitle());
                            blog.addAttribute("from",""+bp.getOwner().getName());
                            if(bp.getText() != null)
                            {
                                5+0%2Fdocs%2Fapi+Element">Element descP = DocumentFactory.getInstance().createElement("description");
                                descP.setText(bp.getText());
                                post.add(descP);
                            }
                        }
                    }
                }
            }
        }
        return dom;
    }

    public static void main(1.5.0/docs/api/java/lang/String.html">String[] args) throws 1.5.0/docs/api/java/io/IOException.html">IOException, 1.5.0/docs/api/javax/xml/transform/TransformerException.html">TransformerException, FOPException {
        /*AbstractDao.getCurrentSession().beginTransaction();

        CourseUnit c = CourseUnitDao.getInstance().load(new Long(4136));


        String path = generatePdf(c);
        AbstractDao.getCurrentSession().getTransaction().commit();
        sendPdfFtpIonline(c,new ArrayList<String>(),null,path,null);
*/



    }

    /*
    public static String generatePdf(CourseUnit c) throws IOException, TransformerException, FOPException {
        Document dom = new CreateCourseUnitXML().run(c,null);
        org.w3c.dom.Document dd = Dom4jUtil.toW3c(dom);
        String path = Globals.TMP_DIR + File.separator + c.getCode() + "-" + c.getNormalizedName() + "-sumarios.pdf";
        FileOutputStream out = new FileOutputStream(path);
        Map<String,Object> params = new HashMap<String,Object>();
        params.put("site", Globals.SITE_URL);
        PdfUtils.createPdfFromXml(new DOMSource(dd), "pt/estgp/estgweb/services/courseunits/courseunitsummaries.fo.xsl", out, params);
        out.flush();
        out.close();
        return path;
    }

    private static void sendPdfFtpIonline(CourseUnit cu, List<String> errors, UserSession u,String pdfPath,FTPClient client) throws IOException, TransformerException, FOPException {

        FtpServer server = null;
        if(client == null)
        {
            server = FtpServer.getNewServer(Globals.FTP_IONLINE_URL,Globals.FTP_IONLINE_USER,Globals.FTP_IONLINE_PASS);
            client = server.getClient();
        }
        client.setFileType(FTP.BINARY_FILE_TYPE);

        String pastaFichaCurricular = Globals.FTP_IONLINE_START_PATH + cu.getPathIntranet() + "/" + Globals.INTRANET_DTP + "/" + Globals.INTRANET_DTP_Sumarios;
        if(!client.changeWorkingDirectory(pastaFichaCurricular))
        {
            logger.error("FTP CANT CHANGE TO PATH: " + pastaFichaCurricular);
        }
        else
        {
            client.storeFile(cu.getCode() + "_" + cu.getNormalizedName() + "_sumarios.pdf",new FileInputStream(pdfPath));

            if(server != null)
            {
                client.quit();
                client.disconnect();
            }
        }
        //
    }*/

}