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();
}
}
//
}*/
}