Subversion Repositories bacoAlunos

Compare Revisions

Ignore whitespace Rev 1499 → Rev 1500

/branches/v3/impl/conf/WEB-INF/web.xml
163,7 → 163,7
 
<servlet>
<servlet-name>WsJson</servlet-name>
<jsp-file>/jsonapi/jsonapi.jsp</jsp-file>
<servlet-class>pt.estgp.estgweb.web.json.JsonHandler</servlet-class>
</servlet>
 
<!--SOAP Tutorial-->
/branches/v3/impl/src/java/pt/estgp/estgweb/services/courses/CoursesService.java
3,7 → 3,6
import com.owlike.genson.Genson;
import com.owlike.genson.TransformationException;
import com.owlike.genson.reflect.VisibilityFilter;
import jomm.dao.impl.AbstractDao;
import jomm.utils.FilesUtils;
import jomm.utils.StreamsUtils;
import org.apache.log4j.Logger;
30,7 → 29,10
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;
import java.io.*;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.net.URL;
import java.util.*;
 
178,7 → 180,12
}
//Getting Coordinator from proxy
Teacher t = c.getCoordinator();
t.getName();
if(t != null)
t.getName();
else
{
logger.warn("Course does not have coordinator");
}
 
String jsonCourse = getGensonCourse().serialize(c);
c.setJson(jsonCourse);
227,6 → 234,11
private void generateXmlJaxbStudiesPlanVersion(UserSession userSession, Course c,boolean forceFichaCurricularUrlSet,String systemUrl) throws JAXBException, TransformationException
{
CourseStudiesPlan courseStudiesPlan;
if(c.getStudiesPlan() == null || c.getStudiesPlan().trim().length() == 0)
{
logger.warn("Course does not have studies plan XML file stream to use in update");
return;
}
 
if(c.getStudiesPlans() == null || c.getStudiesPlans().size() == 0)
{
364,6 → 376,8
 
.include("name", Course.class)
.include("code", Course.class)
.include("validationRole", Course.class)
 
.include("courseComission", CourseImpl.class)
 
.include("name", GenericUser.class)
444,6 → 458,17
return courseViews;
}
 
 
 
/** JSON API **/
/**
* @SERVICE@
*
* @param school
* @param type
* @return
* @throws JSONException
*/
public JSONObject getActiveCoursesForJsonApi(String school,String type) throws JSONException {
String institutionalCode = null;
String degree = null;
476,6 → 501,17
return coursesResponse;
}
 
/**
*
* * @SERVICE@
*
* @param code
* @return
* @throws JSONException
* @throws IOException
* @throws TransformationException
* @throws JAXBException
*/
public JSONObject getCourseDetailForJsonApi(String code) throws JSONException, IOException, TransformationException, JAXBException {
 
Course course = DaoFactory.getCourseDaoImpl().findCourseByCode(code);
493,7 → 529,7
{
JSONObject courseObj = new JSONObject(course.getJson());
coursesResponse.put("courseInfo",courseObj);
if(course.getStudiesPlans() == null)
if(course.getStudiesPlans() == null || course.getStudiesPlans().size() == 0)
{
logger.info("status JSON NOT EXIST FOR STUDIES PLAN IN THIS COURSE, will generate");
UserSession userSession = DomainObjectFactory.createUserSessionImpl();
520,6 → 556,13
return coursesResponse;
}
 
/**
* @SERVICE@
*
* @param code
* @return
* @throws JSONException
*/
public String getCourseStudiesPlanXml(String code) throws JSONException {
 
Course course = DaoFactory.getCourseDaoImpl().findCourseByCode(code);
532,44 → 575,18
}
 
 
public static void main2(String[] args) throws IOException, JAXBException, TransformationException {
URL urlPlan = new URL("http://www.estgp.pt/repositoryStream/3");
FileInputStream fs = new FileInputStream("/Users/jorgemachado/Documents/workspace/baco/impl/src/xsd/curso_EI.xml");
/**
* @SERVICE@
*
* @param systemUrl
* @param setActive
* @return
* @throws IOException
* @throws JSONException
* @throws TransformationException
* @throws JAXBException
*/
 
JAXBContext jc = JAXBContext.newInstance(Curso.class);
Unmarshaller unmarshaller = jc.createUnmarshaller();
Curso curso = (Curso) unmarshaller.unmarshal( fs);
Marshaller marshaller = jc.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
StringWriter sw = new StringWriter();
marshaller.marshal(curso, sw);
 
String json = getGensonCursoXmlObj().serialize(curso);
 
AbstractDao.getCurrentSession().beginTransaction();
 
CourseImpl c = (CourseImpl) DaoFactory.getCourseDaoImpl().narrow(DaoFactory.getCourseDaoImpl().load(new Long(10)));
 
List<Teacher> courseComissionProxys = DaoFactory.getUserDaoImpl().loadRoleTeachers(c.getValidationRole());
List<Teacher> courseComission = new ArrayList<Teacher>();
for(Teacher t: courseComissionProxys)
{
courseComission.add(DaoFactory.getTeacherDaoImpl().narrow(t));
}
Teacher t = c.getCoordinator();
t.getName();
 
 
c.setCourseComission(courseComission);
String jsonCourse = getGensonCourse().serialize(c);
 
AbstractDao.getCurrentSession().getTransaction().commit();
System.out.println(json);
 
System.out.println(jsonCourse);
 
}
 
public String sincronizeCoursesStudiesPlans(String systemUrl,boolean setActive) throws IOException, JSONException, TransformationException, JAXBException {
 
StringBuilder log = new StringBuilder();
594,48 → 611,134
String msg = "UPDATING - Course " + code + " " + course.getString("name") + " exist in this system";
log.append("<info>" + msg+"</info>");
logger.info(msg);
InputStream stream = new URL(systemUrl + "/wsjson/api?service=getStudiesPlanXml&code=" + code).openStream();
String studiesPlan = StreamsUtils.readString(stream);
int len = studiesPlan.length();
if(studiesPlan == null || studiesPlan.trim().length() == 0 || studiesPlan.contains("<error>"))
 
//#############UPDATING STUDIES PLAN
updateStudiesPlanFromRemoteSystem(systemUrl, setActive, log, course, code, c);
 
//#############UPDATING Course Comission Members
updateCourseComissionMembers(systemUrl, code, c);
}
}
return log.toString();
 
}
 
/**
* Update courseComission Members
* @param systemUrl
* @param code
* @param c
* @throws IOException
* @throws JSONException
*/
private void updateCourseComissionMembers(String systemUrl, String code, Course c) throws IOException, JSONException {
URL urlCourseDetails = new URL(systemUrl + "/wsjson/api?service=getCourse&code=" + code);
InputStream isCourseDetails = urlCourseDetails.openStream();
String strCourseDetails = StreamsUtils.readString(isCourseDetails);
JSONObject objCourseDetails = new JSONObject(strCourseDetails);
String validationRole = objCourseDetails.getJSONObject("courseInfo").getString("validationRole");
 
if(validationRole == null)
{
logger.info("validationRole is not defined");
}
else
{
logger.info("found validationRole: " + validationRole);
c.setValidationRole(validationRole);
 
JSONObject coordinator = objCourseDetails.getJSONObject("courseInfo").getJSONObject("coordinator");
JSONArray courseComission = objCourseDetails.getJSONObject("courseInfo").getJSONArray("courseComission");
 
Teacher coordinatorPersistent = findPersonFromCourseDetails(coordinator);
if(coordinatorPersistent == null)
{
logger.warn("Coordinator does not exist in this system ");
}
else
{
c.setCoordinator(coordinatorPersistent);
}
for(int j = 0 ; j < courseComission.length(); j++)
{
JSONObject memberComission = courseComission.getJSONObject(j);
Teacher memberPersistent = findPersonFromCourseDetails(memberComission);
if(memberPersistent == null)
{
msg = "Course " + code + " " + course.getString("name") + " dont has studies plan";
log.append("<warn>" + msg+"</warn>");
logger.warn(msg);
logger.info("Member does not exist in this system ");
}
else
{
msg = "Found studies plan for " + code + " " + course.getString("name") + " will update ";
log.append("<info>" + msg+"</info>");
logger.info(msg);
if(setActive)
logger.info("Adding role of course comission member");
if(!memberPersistent.hasRole(validationRole))
{
msg = "Setting course to active";
log.append("<info>" + msg+"</info>");
logger.info(msg);
c.setStatus(true);
memberPersistent.addRole(validationRole);
}
//System.out.println(studiesPlan);
msg = "GENERATING COURSE JSON ....";
log.append("<info>" + msg+"</info>");
logger.info(msg);
new CoursesService().generateCourseJson(c);
}
 
msg="GENERATING COURSE STUDIES PLAN JSON ....";
log.append("<info>" + msg+"</info>");
logger.info(msg);
stream.close();
stream = new URL(systemUrl + "/wsjson/api?service=getStudiesPlanXml&code=" + code).openStream();
UserSession userSession = DomainObjectFactory.createUserSessionImpl();
userSession.setUser(DaoFactory.getUserDaoImpl().load(new Long(1)));
new CoursesService().uploadStudiesPlan(stream, "curso_" + code + ".xml", len,"appication/xml", userSession,c,true,"http://www.estgp.pt");
}
}
}
return log.toString();
}
 
private Teacher findPersonFromCourseDetails(JSONObject coordinator) {
int code;
try {
if(coordinator.has("sigesCode"))
{
code = coordinator.getInt("sigesCode");
}
else
{
logger.warn("there is no sigesCode for this person " + coordinator.toString());
return null;
}
} catch (JSONException e){
return null;
} catch (NumberFormatException e){
return null;
}
return DaoFactory.getTeacherDaoImpl().loadBySigesCode(code);
}
 
private void updateStudiesPlanFromRemoteSystem(String systemUrl, boolean setActive, StringBuilder log, JSONObject course, String code, Course c) throws IOException, JSONException, TransformationException, JAXBException {
String msg;
InputStream stream = new URL(systemUrl + "/wsjson/api?service=getStudiesPlanXml&code=" + code).openStream();
String studiesPlan = StreamsUtils.readString(stream);
int len = studiesPlan.length();
if(studiesPlan == null || studiesPlan.trim().length() == 0 || studiesPlan.contains("<error>"))
{
msg = "Course " + code + " " + course.getString("name") + " dont has studies plan";
log.append("<warn>" + msg+"</warn>");
logger.warn(msg);
}
else
{
msg = "Found studies plan for " + code + " " + course.getString("name") + " will update ";
log.append("<info>" + msg+"</info>");
logger.info(msg);
if(setActive)
{
msg = "Setting course to active";
log.append("<info>" + msg+"</info>");
logger.info(msg);
c.setStatus(true);
}
//System.out.println(studiesPlan);
msg = "GENERATING COURSE JSON ....";
log.append("<info>" + msg+"</info>");
logger.info(msg);
new CoursesService().generateCourseJson(c);
 
msg="GENERATING COURSE STUDIES PLAN JSON ....";
log.append("<info>" + msg+"</info>");
logger.info(msg);
stream.close();
stream = new URL(systemUrl + "/wsjson/api?service=getStudiesPlanXml&code=" + code).openStream();
UserSession userSession = DomainObjectFactory.createUserSessionImpl();
userSession.setUser(DaoFactory.getUserDaoImpl().load(new Long(1)));
new CoursesService().uploadStudiesPlan(stream, "curso_" + code + ".xml", len,"appication/xml", userSession,c,true,"http://www.estgp.pt");
}
}
 
 
}
/branches/v3/impl/src/java/pt/estgp/estgweb/web/json/JsonHandler.java
1,24 → 1,42
package pt.estgp.estgweb.web.json;
 
import com.owlike.genson.TransformationException;
import jomm.dao.impl.AbstractDao;
import org.apache.log4j.Logger;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import pt.estgp.estgweb.domain.UserSession;
import pt.estgp.estgweb.services.courses.CoursesService;
import pt.estgp.estgweb.services.courses.xsd.Curso;
import pt.estgp.estgweb.web.UserSessionProxy;
 
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.StringReader;
 
/**
* Created by jorgemachado on 02/02/16.
*/
public class JsonHandler extends HttpServlet
{
private static final Logger logger = Logger.getLogger(JsonHandler.class);
 
/** Handles the HTTP <code>GET</code> method.
* @param request servlet request
* @param response servlet response
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
processRequest(request, response);
throws ServletException, IOException {
processRequestSafe(request, response);
}
 
/** Handles the HTTP <code>POST</code> method.
27,11 → 45,132
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
processRequestSafe(request, response);
}
 
private void processRequest(HttpServletRequest request, HttpServletResponse response) {
 
private void processRequestSafe(HttpServletRequest request, HttpServletResponse response) throws IOException {
response.setContentType("application/json");
try {
processRequest(request, response);
} catch (TransformationException e)
{
response.getWriter().print(e);
response.getWriter().print("See log for details:");
logger.error(e,e);
}
catch (JAXBException e)
{
response.getWriter().print(e);
response.getWriter().print("See log for details:");
logger.error(e,e);
}
catch (JSONException e)
{
response.getWriter().print(e);
response.getWriter().print("See log for details:");
logger.error(e, e);
}
}
 
private void processRequest(HttpServletRequest request, HttpServletResponse response) throws IOException, TransformationException, JAXBException, JSONException {
 
 
String service = request.getParameter("service");
if(service == null)
{
printServices(response.getWriter());
}
else if(service.equals("listCourses"))
{
String school = request.getParameter("school");
String type = request.getParameter("type");
 
AbstractDao.getCurrentSession().beginTransaction();
JSONObject obj = new CoursesService().getActiveCoursesForJsonApi(school,type);
AbstractDao.getCurrentSession().getTransaction().commit();
response.getWriter().write(obj.toString());
}
else if(service.equals("getCourse") && request.getParameter("code") != null)
{
String code = request.getParameter("code");
 
 
AbstractDao.getCurrentSession().beginTransaction();
JSONObject obj = new CoursesService().getCourseDetailForJsonApi(code);
AbstractDao.getCurrentSession().getTransaction().commit();
response.getWriter().write(obj.toString());
}
else if(service.equals("getStudiesPlanXml") && request.getParameter("code") != null)
{
String code = request.getParameter("code");
response.setContentType("application/xml");
response.setCharacterEncoding("UTF-8");
AbstractDao.getCurrentSession().beginTransaction();
String xml = new CoursesService().getCourseStudiesPlanXml(code);
JAXBContext jc = JAXBContext.newInstance(Curso.class);
Unmarshaller unmarshaller = jc.createUnmarshaller();
Curso curso = (Curso) unmarshaller.unmarshal(new StringReader(xml));
Marshaller marshaller = jc.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.marshal(curso, response.getOutputStream());
//SETTING XML in COURSE STUDIES PLAN
AbstractDao.getCurrentSession().getTransaction().commit();
 
}
else if(service.equals("syncSystemPlans") && request.getParameter("systemUrl") != null && request.getParameter("setActive") != null)
{
UserSession sess = UserSessionProxy.loadUserSessionFromRequest(request);
response.setContentType("application/xml");
if(sess.getUser() != null && sess.getUser().isSuperuserOrAdmin())
{
String systemUrl = request.getParameter("systemUrl");
boolean setActive = Boolean.parseBoolean(request.getParameter("setActive"));
response.setContentType("application/xml");
AbstractDao.getCurrentSession().beginTransaction();
String log = new CoursesService().sincronizeCoursesStudiesPlans(systemUrl,setActive);
AbstractDao.getCurrentSession().getTransaction().commit();
response.getWriter().write("<response><status>OK</status><log>" + log + "</log></response>");
}
else
{
response.getWriter().write("<error>Permission Denied</error>");
}
}
else
{
printServices(response.getWriter());
}
}
 
public void printServices(PrintWriter out) throws JSONException, IOException
{
JSONObject obj = new JSONObject();
 
JSONArray availableServices = new JSONArray();
 
JSONObject service2 = new JSONObject();
service2.put("name","getCourse");
service2.put("parameterCode","code");
service2.put("parameterCodeType","integer");
service2.put("exampleCall1","/wsjson/api?service=getCourse&code=9119");
 
JSONObject service = new JSONObject();
service.put("name","listCourses");
service.put("parameterType","type");
service.put("parameterTypeEnumValues","Licenciaturas,Mestrados,PosGraduacoes,CET,CTeSP or none for all");
service.put("parameterSchool","school");
service.put("parameterSchoolEnumValues","ESTG,ESECS,ESS,ESAE or none for all");
service.put("exampleCall1","/wsjson/api?service=listCourses");
service.put("exampleCall2","/wsjson/api?service=listCourses&type=Licenciaturas&school=ESTG");
 
availableServices.put(service);
availableServices.put(service2);
JSONObject response = new JSONObject();
obj.put("response",response);
response.put("status","invalid service");
response.put("availableServices",availableServices);
out.write(obj.toString());
}
 
}
/branches/v3/impl/src/xsd/curso_EI.xml
1,852 → 1,502
<?xml version="1.0" encoding="UTF-8"?>
<curso xmlns="http://www.estgp.pt/xsd/planoestudos/1.0/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.estgp.pt/xsd/planoestudos/1.0/ planoestudos.xsd">
<siges>9119</siges>
<nome>Engenharia Informática</nome>
<dep>EG</dep>
<!--1º semestre de EI - perfil "Programação e Sistemas de Informação"-->
<semestre id="S1">
 
<unidade >
<siges>1123</siges>
<nome>Sistemas Digitais</nome>
<dep>Engenharias</dep>
<totalHoras>205</totalHoras>
<horasContacto>
<TP>60</TP>
</horasContacto>
<ECTS>5</ECTS>
<obs>(a)</obs>
</unidade>
<unidade><siges>111</siges>
<nome>Introdução à Programação</nome>
<dep>Engenharias</dep>
<totalHoras>205</totalHoras>
<horasContacto>
<T>30</T>
<PL>30</PL>
<OT>30</OT>
</horasContacto>
<ECTS>8</ECTS>
<obs>(a)</obs>
</unidade>
<unidade><siges>111</siges>
<nome>Análise Matemática I</nome>
<dep>Engenharias</dep>
<totalHoras>130</totalHoras>
<horasContacto>
<TP>60</TP>
</horasContacto>
<ECTS>5</ECTS>
<obs>(a)</obs>
</unidade>
<unidade><siges>111</siges>
<nome>Álgebra e Geometria</nome>
<dep>Engenharias</dep>
<totalHoras>130</totalHoras>
<horasContacto>
<TP>60</TP>
</horasContacto>
<ECTS>5</ECTS>
<obs>(a)</obs>
</unidade>
<unidade><siges>111</siges>
<nome>Física</nome>
<dep>Engenharias</dep>
<totalHoras>130</totalHoras>
<horasContacto>
<TP>60</TP>
</horasContacto>
<ECTS>5</ECTS>
<obs>(a)</obs>
</unidade>
 
</semestre>
<!--2º semestre de EI- perfil "Programação e Sistemas de Informação"-->
<semestre id="S2">
<unidade><siges>111</siges>
<nome>Análise Matemática II</nome>
<dep>Engenharias</dep>
<totalHoras>130</totalHoras>
<horasContacto>
<TP>60</TP>
</horasContacto>
<ECTS>5</ECTS>
<obs>(a)</obs>
</unidade>
<unidade><siges>111</siges>
<nome>Matemática Discreta</nome>
<dep>Engenharias</dep>
<totalHoras>65</totalHoras>
<horasContacto>
<TP>30</TP>
</horasContacto>
<ECTS>2.5</ECTS>
<obs>(a)</obs>
</unidade>
<unidade><siges>111</siges>
<nome>Algoritmos e Estruturas de Dados</nome>
<dep>Engenharias</dep>
<totalHoras>250</totalHoras>
<horasContacto>
<TP>60</TP>
<PL>30</PL>
</horasContacto>
<ECTS>8.5</ECTS>
<obs>(a)</obs>
</unidade>
<unidade><siges>111</siges>
<nome>Arquitectura de Computadores</nome>
<dep>Engenharias</dep>
<totalHoras>205</totalHoras>
<horasContacto>
<TP>30</TP>
<PL>30</PL>
</horasContacto>
<ECTS>8</ECTS>
<obs>(a)</obs>
</unidade>
<unidade><siges>111</siges>
<nome>Probabilidades e Estatística</nome>
<dep>Engenharias</dep>
<totalHoras>130</totalHoras>
<horasContacto>
<TP>60</TP>
</horasContacto>
<ECTS>5</ECTS>
<obs>(a)</obs>
</unidade>
</semestre>
<!--3º semestre de EI- perfil "Programação e Sistemas de Informação"-->
<semestre id="S3">
<unidade><siges>111</siges>
<nome>Bases de Dados I</nome>
<dep>Engenharias</dep>
<totalHoras>160</totalHoras>
<horasContacto>
<P>25</P>
<TP>10</TP>
<PL>25</PL>
</horasContacto>
<ECTS>6</ECTS>
<obs>(a)</obs>
</unidade>
<unidade><siges>111</siges>
<nome>Programação Orientada a Objectos</nome>
<dep>Engenharias</dep>
<totalHoras>160</totalHoras>
<horasContacto>
<P>30</P>
<TP>15</TP>
<PL>15</PL>
</horasContacto>
<ECTS>6</ECTS>
<obs>(a)</obs>
</unidade>
<unidade><siges>111</siges>
<nome>Computação Gráfica</nome>
<dep>Engenharias</dep>
<totalHoras>160</totalHoras>
<horasContacto>
<T>30</T>
<TP>10</TP>
<PL>20</PL>
</horasContacto>
<ECTS>6</ECTS>
<obs>(a)</obs>
</unidade>
<unidade><siges>111</siges>
<nome>Teoria da Computação</nome>
<dep>Engenharias</dep>
<totalHoras>90</totalHoras>
<horasContacto>
<T>15</T>
<TP>15</TP>
</horasContacto>
<ECTS>4</ECTS>
<obs>(a)</obs>
</unidade>
<unidade><siges>111</siges>
<nome>Sistemas Operativos</nome>
<dep>Engenharias</dep>
<totalHoras>230</totalHoras>
<horasContacto>
<TP>90</TP>
</horasContacto>
<ECTS>8</ECTS>
<obs/>
</unidade>
</semestre>
<!--4º semestre de EI- perfil "Programação e Sistemas de Informação"-->
<semestre id="S4">
<unidade><siges>111</siges>
<nome>Programação Web e Equipamentos Móveis</nome>
<dep>Engenharias</dep>
<totalHoras>160</totalHoras>
<horasContacto>
<TP>30</TP>
<PL>30</PL>
</horasContacto>
<ECTS>6</ECTS>
<obs>(a)</obs>
</unidade>
<unidade><siges>111</siges>
<nome>Inteligência Artificial</nome>
<dep>Engenharias</dep>
<totalHoras>170</totalHoras>
<horasContacto>
<TP>60</TP>
</horasContacto>
<ECTS>6</ECTS>
<obs>(a)</obs>
</unidade>
<unidade><siges>111</siges>
<nome>Multimédia Interactiva</nome>
<dep>Engenharias</dep>
<totalHoras>160</totalHoras>
<horasContacto>
<T>30</T>
<TP>10</TP>
<PL>20</PL>
</horasContacto>
<ECTS>6</ECTS>
<obs>(a)</obs>
</unidade>
<unidade><siges>111</siges>
<nome>Análise de Concepção de Sistemas</nome>
<dep>Engenharias</dep>
<totalHoras>160</totalHoras>
<horasContacto>
<T>30</T>
<TP>30</TP>
</horasContacto>
<ECTS>5</ECTS>
<obs/>
</unidade>
<unidade><siges>111</siges>
<nome>Seminário</nome>
<dep>Engenharias</dep>
<totalHoras>10</totalHoras>
<horasContacto>
<S>10</S>
</horasContacto>
<ECTS>2</ECTS>
<obs>(a)</obs>
</unidade>
</semestre>
<!--Ate aqui esta-->
<!--2º semestre de EC-->
<semestre id="S3">
<unidade><siges>111</siges>
<nome>Análise Matemática III</nome>
<dep>Engenharias</dep>
<totalHoras>65</totalHoras>
<horasContacto>
<T>15</T>
<TP>15</TP>
<OT>15</OT>
</horasContacto>
<ECTS>2.5</ECTS>
<obs/>
</unidade>
<unidade><siges>111</siges>
<nome>Resistência de Materiais I</nome>
<dep>Engenharias</dep>
<totalHoras>130</totalHoras>
<horasContacto>
<T>30</T>
<TP>30</TP>
<OT>30</OT>
</horasContacto>
<ECTS>5</ECTS>
<obs/>
</unidade>
<unidade><siges>111</siges>
<nome>Hidráulica Aplicada</nome>
<dep>Engenharias</dep>
<totalHoras>130</totalHoras>
<horasContacto>
<T>30</T>
<TP>30</TP>
<OT>30</OT>
</horasContacto>
<ECTS>5</ECTS>
<obs/>
</unidade>
<unidade><siges>111</siges>
<nome>Geologia da Engenharia</nome>
<dep>Engenharias</dep>
<totalHoras>130</totalHoras>
<horasContacto>
<T>30</T>
<TP>30</TP>
<OT>30</OT>
</horasContacto>
<ECTS>5</ECTS>
<obs/>
</unidade>
<unidade><siges>111</siges>
<nome>Métodos e Tecnologias da Construção</nome>
<dep>Engenharias</dep>
<totalHoras>130</totalHoras>
<horasContacto>
<T>30</T>
<TP>30</TP>
<OT>30</OT>
</horasContacto>
<ECTS>5</ECTS>
<obs/>
</unidade>
<unidade><siges>111</siges>
<nome>Planeamento Regional e Urbano</nome>
<dep>Engenharias</dep>
<totalHoras>65</totalHoras>
<horasContacto>
<T>15</T>
<TP>15</TP>
<OT>15</OT>
</horasContacto>
<ECTS>2.5</ECTS>
<obs/>
</unidade>
<unidade><siges>111</siges>
<nome>Unidade de Transferência III</nome>
<dep>Engenharias</dep>
<totalHoras>150</totalHoras>
<horasContacto>
<PL>30</PL>
<TC>15</TC>
</horasContacto>
<ECTS>5</ECTS>
<obs/>
</unidade>
</semestre>
<!--\\3º semestre de EC-->
<semestre id="S4">
<perfil nome="Perfil de Estruturas e Construção">
<unidade><siges>111</siges>
<nome>Análise de Estruturas</nome>
<dep>Engenharias</dep>
<totalHoras>130</totalHoras>
<horasContacto>
<T>30</T>
<TP>30</TP>
<OT>30</OT>
</horasContacto>
<ECTS>5</ECTS>
<obs/>
</unidade>
<unidade><siges>111</siges>
<nome>Física das Construções</nome>
<dep>Engenharias</dep>
<totalHoras>65</totalHoras>
<horasContacto>
<T>15</T>
<TP>15</TP>
<OT>15</OT>
</horasContacto>
<ECTS>5</ECTS>
<obs/>
</unidade>
<unidade><siges>111</siges>
<nome>Mecânica de Solos</nome>
<dep>Engenharias</dep>
<totalHoras>130</totalHoras>
<horasContacto>
<T>30</T>
<TP>30</TP>
<OT>30</OT>
</horasContacto>
<ECTS>5</ECTS>
<obs/>
</unidade>
<unidade><siges>111</siges>
<nome>Abastecimento de Água e Saneamento</nome>
<dep>Engenharias</dep>
<totalHoras>130</totalHoras>
<horasContacto>
<T>30</T>
<TP>30</TP>
<OT>30</OT>
</horasContacto>
<ECTS>5</ECTS>
<obs/>
</unidade>
<unidade><siges>111</siges>
<nome>Materiais Construção</nome>
<dep>Engenharias</dep>
<totalHoras>130</totalHoras>
<horasContacto>
<T>30</T>
<TP>30</TP>
<OT>30</OT>
</horasContacto>
<ECTS>5</ECTS>
<obs/>
</unidade>
<unidade><siges>111</siges>
<nome>Resistência de Materiais II</nome>
<dep>Engenharias</dep>
<totalHoras>65</totalHoras>
<horasContacto>
<T>15</T>
<TP>15</TP>
<OT>15</OT>
</horasContacto>
<ECTS>2.5</ECTS>
<obs/>
</unidade>
<unidade><siges>111</siges>
<nome>Unidade de Transferência IV</nome>
<dep>Engenharias</dep>
<totalHoras>150</totalHoras>
<horasContacto>
<PL>30</PL>
<TC>15</TC>
</horasContacto>
<ECTS>5</ECTS>
<obs/>
</unidade>
</perfil>
<perfil nome="Planeamento e Infra-Estruturas">
<unidade><siges>111</siges>
<nome>Análise de Estruturas</nome>
<dep>Engenharias</dep>
<totalHoras>130</totalHoras>
<horasContacto>
<T>30</T>
<TP>30</TP>
<OT>30</OT>
</horasContacto>
<ECTS>5</ECTS>
<obs/>
</unidade>
<unidade><siges>111</siges>
<nome>Física das Construções</nome>
<dep>Engenharias</dep>
<totalHoras>65</totalHoras>
<horasContacto>
<T>15</T>
<TP>15</TP>
<OT>15</OT>
</horasContacto>
<ECTS>5</ECTS>
<obs/>
</unidade>
<unidade><siges>111</siges>
<nome>Mecânica de Solos</nome>
<dep>Engenharias</dep>
<totalHoras>130</totalHoras>
<horasContacto>
<T>30</T>
<TP>30</TP>
<OT>30</OT>
</horasContacto>
<ECTS>5</ECTS>
<obs/>
</unidade>
<unidade><siges>111</siges>
<nome>Abastecimento de Água e Saneamento</nome>
<dep>Engenharias</dep>
<totalHoras>130</totalHoras>
<horasContacto>
<T>30</T>
<TP>30</TP>
<OT>30</OT>
</horasContacto>
<ECTS>5</ECTS>
<obs/>
</unidade>
<unidade><siges>111</siges>
<nome>Materiais Construção</nome>
<dep>Engenharias</dep>
<totalHoras>130</totalHoras>
<horasContacto>
<T>30</T>
<TP>30</TP>
<OT>30</OT>
</horasContacto>
<ECTS>5</ECTS>
<obs/>
</unidade>
<unidade><siges>111</siges>
<nome>Hidrologia e Infra-Estruturas Hidráulicas</nome>
<dep>Engenharias</dep>
<totalHoras>65</totalHoras>
<horasContacto>
<T>15</T>
<TP>15</TP>
<OT>15</OT>
</horasContacto>
<ECTS>2.5</ECTS>
<obs/>
</unidade>
<unidade><siges>111</siges>
<nome>Unidade de Transferência IV</nome>
<dep>Engenharias</dep>
<totalHoras>150</totalHoras>
<horasContacto>
<PL>30</PL>
<TC>15</TC>
</horasContacto>
<ECTS>5</ECTS>
<obs/>
</unidade>
</perfil>
</semestre>
<semestre id="S5">
<perfil nome="Perfil de Estruturas e Construção">
<unidade><siges>111</siges>
<nome>Betão Armado</nome>
<dep>Engenharias</dep>
<totalHoras>130</totalHoras>
<horasContacto>
<T>30</T>
<TP>30</TP>
<OT>30</OT>
</horasContacto>
<ECTS>5</ECTS>
<obs/>
</unidade>
<unidade><siges>111</siges>
<nome>Organização de Obras e Estaleiros</nome>
<dep>Engenharias</dep>
<totalHoras>130</totalHoras>
<horasContacto>
<T>30</T>
<TP>30</TP>
<OT>30</OT>
</horasContacto>
<ECTS>5</ECTS>
<obs/>
</unidade>
<unidade><siges>111</siges>
<nome>Vias de Comunicação I</nome>
<dep>Engenharias</dep>
<totalHoras>65</totalHoras>
<horasContacto>
<T>15</T>
<TP>15</TP>
<OT>15</OT>
</horasContacto>
<ECTS>2.5</ECTS>
<obs/>
</unidade>
<unidade><siges>111</siges>
<nome>Conservação e Reabilitação</nome>
<dep>Engenharias</dep>
<totalHoras>130</totalHoras>
<horasContacto>
<T>30</T>
<TP>30</TP>
<OT>30</OT>
</horasContacto>
<ECTS>5</ECTS>
<obs/>
</unidade>
<unidade><siges>111</siges>
<nome>Estruturas Metálicas</nome>
<dep>Engenharias</dep>
<totalHoras>130</totalHoras>
<horasContacto>
<T>30</T>
<TP>30</TP>
<OT>30</OT>
</horasContacto>
<ECTS>5</ECTS>
<obs/>
</unidade>
<unidade><siges>111</siges>
<nome>Engenharia Sísmica</nome>
<dep>Engenharias</dep>
<totalHoras>65</totalHoras>
<horasContacto>
<T>15</T>
<TP>15</TP>
<OT>15</OT>
</horasContacto>
<ECTS>2.5</ECTS>
<obs/>
</unidade>
<unidade><siges>111</siges>
<nome>Unidade de Transferência V</nome>
<dep>Engenharias</dep>
<totalHoras>150</totalHoras>
<horasContacto>
<PL>30</PL>
<TC>15</TC>
</horasContacto>
<ECTS>5</ECTS>
<obs/>
</unidade>
</perfil>
<perfil nome="Planeamento e Infra-Estruturas">
<unidade><siges>111</siges>
<nome>Betão Armado</nome>
<dep>Engenharias</dep>
<totalHoras>130</totalHoras>
<horasContacto>
<T>30</T>
<TP>30</TP>
<OT>30</OT>
</horasContacto>
<ECTS>5</ECTS>
<obs/>
</unidade>
<unidade><siges>111</siges>
<nome>Organização de Obras e Estaleiros</nome>
<dep>Engenharias</dep>
<totalHoras>130</totalHoras>
<horasContacto>
<T>30</T>
<TP>30</TP>
<OT>30</OT>
</horasContacto>
<ECTS>5</ECTS>
<obs/>
</unidade>
<unidade><siges>111</siges>
<nome>Vias de Comunicação I</nome>
<dep>Engenharias</dep>
<totalHoras>65</totalHoras>
<horasContacto>
<T>15</T>
<TP>15</TP>
<OT>15</OT>
</horasContacto>
<ECTS>2.5</ECTS>
<obs/>
</unidade>
<unidade><siges>111</siges>
<nome>Urbanização e Transportes</nome>
<dep>Engenharias</dep>
<totalHoras>130</totalHoras>
<horasContacto>
<T>30</T>
<TP>30</TP>
<OT>30</OT>
</horasContacto>
<ECTS>5</ECTS>
<obs/>
</unidade>
<unidade><siges>111</siges>
<nome>Sistemas de Informação Geográfica</nome>
<dep>Engenharias</dep>
<totalHoras>130</totalHoras>
<horasContacto>
<T>30</T>
<TP>30</TP>
<OT>30</OT>
</horasContacto>
<ECTS>5</ECTS>
<obs/>
</unidade>
<unidade><siges>111</siges>
<nome>Administração Pública e Gestão Municipal</nome>
<dep>Engenharias</dep>
<totalHoras>65</totalHoras>
<horasContacto>
<T>15</T>
<TP>15</TP>
<OT>15</OT>
</horasContacto>
<ECTS>2.5</ECTS>
<obs/>
</unidade>
<unidade><siges>111</siges>
<nome>Unidade de Transferência V</nome>
<dep>Engenharias</dep>
<totalHoras>150</totalHoras>
<horasContacto>
<PL>30</PL>
<TC>15</TC>
</horasContacto>
<ECTS>5</ECTS>
<obs/>
</unidade>
</perfil>
</semestre>
<semestre id="S6">
<perfil nome="Perfil de Estruturas e Construção">
<unidade><siges>111</siges>
<nome>Qualidade na Construção</nome>
<dep>Engenharias</dep>
<totalHoras>130</totalHoras>
<horasContacto>
<T>30</T>
<TP>30</TP>
<OT>30</OT>
</horasContacto>
<ECTS>5</ECTS>
<obs/>
</unidade>
<unidade><siges>111</siges>
<nome>Qualidade na Construção</nome>
<dep>Engenharias</dep>
<totalHoras>130</totalHoras>
<horasContacto>
<T>30</T>
<TP>30</TP>
<OT>30</OT>
</horasContacto>
<ECTS>5</ECTS>
<obs/>
</unidade>
<unidade><siges>111</siges>
<nome>Fundações e Estruturas de Suporte</nome>
<dep>Engenharias</dep>
<totalHoras>65</totalHoras>
<horasContacto>
<T>15</T>
<TP>15</TP>
<OT>15</OT>
</horasContacto>
<ECTS>2.5</ECTS>
<obs/>
</unidade>
<unidade><siges>111</siges>
<nome>Betão Armado e Pré-Esforçado</nome>
<dep>Engenharias</dep>
<totalHoras>130</totalHoras>
<horasContacto>
<T>30</T>
<TP>30</TP>
<OT>30</OT>
</horasContacto>
<ECTS>5</ECTS>
<obs/>
</unidade>
<unidade><siges>111</siges>
<nome>Direcção de Obras</nome>
<dep>Engenharias</dep>
<totalHoras>130</totalHoras>
<horasContacto>
<T>30</T>
<TP>30</TP>
<OT>30</OT>
</horasContacto>
<ECTS>5</ECTS>
<obs/>
</unidade>
<unidade><siges>111</siges>
<nome>Economia e Gestão de Empreendimentos</nome>
<dep>Engenharias</dep>
<totalHoras>65</totalHoras>
<horasContacto>
<T>15</T>
<TP>15</TP>
<OT>15</OT>
</horasContacto>
<ECTS>2.5</ECTS>
<obs/>
</unidade>
<unidade><siges>111</siges>
<nome>Projecto de Construção</nome>
<dep>Engenharias</dep>
<totalHoras>130</totalHoras>
<horasContacto>
<T>30</T>
<TP>30</TP>
<OT>30</OT>
</horasContacto>
<ECTS>5</ECTS>
<obs/>
</unidade>
<unidade><siges>111</siges>
<nome>Unidade de Transferência VI</nome>
<dep>Engenharias</dep>
<totalHoras>150</totalHoras>
<horasContacto>
<PL>30</PL>
<TC>15</TC>
</horasContacto>
<ECTS>5</ECTS>
<obs/>
</unidade>
</perfil>
<perfil nome="Planeamento e Infra-Estruturas">
<unidade><siges>111</siges>
<nome>Qualidade na Construção</nome>
<dep>Engenharias</dep>
<totalHoras>130</totalHoras>
<horasContacto>
<T>30</T>
<TP>30</TP>
<OT>30</OT>
</horasContacto>
<ECTS>5</ECTS>
<obs/>
</unidade>
<unidade><siges>111</siges>
<nome>Qualidade na Construção</nome>
<dep>Engenharias</dep>
<totalHoras>130</totalHoras>
<horasContacto>
<T>30</T>
<TP>30</TP>
<OT>30</OT>
</horasContacto>
<ECTS>5</ECTS>
<obs/>
</unidade>
<unidade><siges>111</siges>
<nome>Equipamentos Regionais e Urbanos</nome>
<dep>Engenharias</dep>
<totalHoras>65</totalHoras>
<horasContacto>
<T>15</T>
<TP>15</TP>
<OT>15</OT>
</horasContacto>
<ECTS>2.5</ECTS>
<obs/>
</unidade>
<unidade><siges>111</siges>
<nome>Vias de Comunicação II</nome>
<dep>Engenharias</dep>
<totalHoras>130</totalHoras>
<horasContacto>
<T>30</T>
<TP>30</TP>
<OT>30</OT>
</horasContacto>
<ECTS>5</ECTS>
<obs/>
</unidade>
<unidade><siges>111</siges>
<nome>Gestão e Avaliação de Sistemas e Projectos</nome>
<dep>Engenharias</dep>
<totalHoras>130</totalHoras>
<horasContacto>
<T>30</T>
<TP>30</TP>
<OT>30</OT>
</horasContacto>
<ECTS>5</ECTS>
<obs/>
</unidade>
<unidade><siges>111</siges>
<nome>Projecto de Planeamento/Infra-Estruturas</nome>
<dep>Engenharias</dep>
<totalHoras>130</totalHoras>
<horasContacto>
<T>30</T>
<TP>30</TP>
<OT>30</OT>
</horasContacto>
<ECTS>5</ECTS>
<obs/>
</unidade>
<unidade><siges>111</siges>
<nome>Unidade de Transferência VI</nome>
<dep>Engenharias</dep>
<totalHoras>150</totalHoras>
<horasContacto>
<PL>30</PL>
<TC>15</TC>
</horasContacto>
<ECTS>5</ECTS>
<obs/>
</unidade>
</perfil>
</semestre>
</curso>
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<curso xmlns="http://www.estgp.pt/xsd/planoestudos/1.0/">
<nome>Engenharia Informática</nome>
<dep>TD</dep>
<semestre id="S1">
<unidade>
<nome>Sistemas Digitais</nome>
<dep>TD</dep>
<totalHoras>205</totalHoras>
<horasContacto>
<T>30</T>
<TP>15</TP>
<PL>15</PL>
</horasContacto>
<ECTS>7.5</ECTS>
<obs></obs>
</unidade>
<unidade>
<nome>Introdução à Programação</nome>
<dep>TD</dep>
<totalHoras>205</totalHoras>
<horasContacto>
<T>30</T>
<PL>30</PL>
</horasContacto>
<ECTS>7.5</ECTS>
<obs></obs>
</unidade>
<unidade>
<nome>Análise Matemática I</nome>
<dep>TD</dep>
<totalHoras>130</totalHoras>
<horasContacto>
<TP>60</TP>
</horasContacto>
<ECTS>5</ECTS>
<obs></obs>
</unidade>
<unidade>
<nome>Álgebra Linear e Geometria Analítica</nome>
<dep>TD</dep>
<totalHoras>130</totalHoras>
<horasContacto>
<TP>60</TP>
</horasContacto>
<ECTS>5</ECTS>
<obs></obs>
</unidade>
<unidade>
<nome>Física Geral</nome>
<dep>TD</dep>
<totalHoras>130</totalHoras>
<horasContacto>
<T>30</T>
<TP>30</TP>
<PL>15</PL>
</horasContacto>
<ECTS>5</ECTS>
<obs></obs>
</unidade>
</semestre>
<semestre id="S2">
<unidade>
<nome>Análise Matemática II</nome>
<dep>TD</dep>
<totalHoras>130</totalHoras>
<horasContacto>
<TP>60</TP>
</horasContacto>
<ECTS>5</ECTS>
<obs></obs>
</unidade>
<unidade>
<nome>Teoria da Computação</nome>
<dep>TD</dep>
<totalHoras>65</totalHoras>
<horasContacto>
<T>15</T>
<TP>15</TP>
</horasContacto>
<ECTS>5</ECTS>
<obs></obs>
</unidade>
<unidade>
<nome>Algoritmos e Estruturas de Dados</nome>
<dep>TD</dep>
<totalHoras>240</totalHoras>
<horasContacto>
<TP>60</TP>
<PL>30</PL>
</horasContacto>
<ECTS>7.5</ECTS>
<obs></obs>
</unidade>
<unidade>
<nome>Arquitectura de Computadores</nome>
<dep>TD</dep>
<totalHoras>215</totalHoras>
<horasContacto>
<T>30</T>
<TP>30</TP>
</horasContacto>
<ECTS>7.5</ECTS>
<obs></obs>
</unidade>
<unidade>
<nome>Probabilidade e Estatística</nome>
<dep>TD</dep>
<totalHoras>130</totalHoras>
<horasContacto>
<TP>60</TP>
</horasContacto>
<ECTS>5</ECTS>
<obs></obs>
</unidade>
</semestre>
<semestre id="S3">
<unidade>
<nome>Base de Dados I</nome>
<dep>TD</dep>
<totalHoras>200</totalHoras>
<horasContacto>
<T>30</T>
<TP>15</TP>
<PL>15</PL>
</horasContacto>
<ECTS>7.5</ECTS>
<obs></obs>
</unidade>
<unidade>
<nome>Programação Orientada a Objectos</nome>
<dep>TD</dep>
<totalHoras>135</totalHoras>
<horasContacto>
<T>30</T>
<TP>15</TP>
<PL>15</PL>
</horasContacto>
<ECTS>5</ECTS>
<obs></obs>
</unidade>
<unidade>
<nome>Computação Gráfica</nome>
<dep>TD</dep>
<totalHoras>135</totalHoras>
<horasContacto>
<T>30</T>
<TP>15</TP>
<PL>15</PL>
</horasContacto>
<ECTS>5</ECTS>
<obs></obs>
</unidade>
<unidade>
<nome>Sistemas Operativos</nome>
<dep>TD</dep>
<totalHoras>200</totalHoras>
<horasContacto>
<T>30</T>
<TP>30</TP>
<PL>30</PL>
</horasContacto>
<ECTS>7.5</ECTS>
<obs></obs>
</unidade>
<unidade>
<nome>Métodos Numéricos e Optimização</nome>
<dep>TD</dep>
<totalHoras>65</totalHoras>
<horasContacto>
<T>15</T>
<TP>15</TP>
</horasContacto>
<ECTS>2.5</ECTS>
<obs></obs>
</unidade>
<unidade>
<nome>Seminário I</nome>
<dep>TD</dep>
<totalHoras>65</totalHoras>
<horasContacto>
<S>10</S>
</horasContacto>
<ECTS>2.5</ECTS>
<obs></obs>
</unidade>
</semestre>
<semestre id="S4">
<unidade>
<nome>Programação Web com Base de Dados</nome>
<dep>TD</dep>
<totalHoras>135</totalHoras>
<horasContacto>
<TP>30</TP>
<PL>30</PL>
</horasContacto>
<ECTS>5</ECTS>
<obs></obs>
</unidade>
<unidade>
<nome>Inteligência Artificial</nome>
<dep>TD</dep>
<totalHoras>135</totalHoras>
<horasContacto>
<TP>60</TP>
</horasContacto>
<ECTS>5</ECTS>
<obs></obs>
</unidade>
<unidade>
<nome>Base de Dados II</nome>
<dep>TD</dep>
<totalHoras>200</totalHoras>
<horasContacto>
<TP>60</TP>
</horasContacto>
<ECTS>7.5</ECTS>
<obs></obs>
</unidade>
<unidade>
<nome>Redes de Computadores I</nome>
<dep>TD</dep>
<totalHoras>200</totalHoras>
<horasContacto>
<T>20</T>
<TP>20</TP>
<PL>20</PL>
</horasContacto>
<ECTS>7.5</ECTS>
<obs></obs>
</unidade>
<unidade>
<nome>Análise e Concepção de Sistemas</nome>
<dep>TD</dep>
<totalHoras>135</totalHoras>
<horasContacto>
<T>30</T>
<TP>30</TP>
</horasContacto>
<ECTS>5</ECTS>
<obs></obs>
</unidade>
</semestre>
<semestre id="S5">
<perfil nome="Multimédia e Software de Entretenimento">
<unidade>
<nome>Gestão de Projecto</nome>
<dep>TD</dep>
<totalHoras>135</totalHoras>
<horasContacto>
<TP>60</TP>
</horasContacto>
<ECTS>5</ECTS>
<obs></obs>
</unidade>
<unidade>
<nome>Multimédia</nome>
<dep>TD</dep>
<totalHoras>200</totalHoras>
<horasContacto>
<T>30</T>
<TP>15</TP>
<PL>15</PL>
</horasContacto>
<ECTS>7.5</ECTS>
<obs></obs>
</unidade>
<unidade>
<nome>Animação</nome>
<dep>TD</dep>
<totalHoras>135</totalHoras>
<horasContacto>
<TP>30</TP>
<PL>30</PL>
</horasContacto>
<ECTS>5</ECTS>
<obs></obs>
</unidade>
<unidade>
<nome>Concepção de Jogos</nome>
<dep>TD</dep>
<totalHoras>200</totalHoras>
<horasContacto>
<T>15</T>
<TP>15</TP>
<PL>30</PL>
</horasContacto>
<ECTS>7.5</ECTS>
<obs></obs>
</unidade>
<unidade>
<nome>Realidade Virtual</nome>
<dep>TD</dep>
<totalHoras>135</totalHoras>
<horasContacto>
<T>15</T>
<TP>45</TP>
</horasContacto>
<ECTS>5</ECTS>
<obs></obs>
</unidade>
</perfil>
<perfil nome="Programação e Sistemas de Informação">
<unidade>
<nome>Gestão de Projecto</nome>
<dep>TD</dep>
<totalHoras>135</totalHoras>
<horasContacto>
<TP>60</TP>
</horasContacto>
<ECTS>5</ECTS>
<obs></obs>
</unidade>
<unidade>
<nome>Redes de Computadores II</nome>
<dep>TD</dep>
<totalHoras>200</totalHoras>
<horasContacto>
<T>15</T>
<TP>30</TP>
<PL>15</PL>
</horasContacto>
<ECTS>7.5</ECTS>
<obs></obs>
</unidade>
<unidade>
<nome>Administração de Sistemas</nome>
<dep>TD</dep>
<totalHoras>200</totalHoras>
<horasContacto>
<T>15</T>
<TP>15</TP>
<PL>30</PL>
</horasContacto>
<ECTS>7.5</ECTS>
<obs></obs>
</unidade>
<unidade>
<nome>Informática Industrial</nome>
<dep>TD</dep>
<totalHoras>135</totalHoras>
<horasContacto>
<TP>60</TP>
</horasContacto>
<ECTS>5</ECTS>
<obs></obs>
</unidade>
<unidade>
<nome>Arquitecturas Tecnológicas de Sistemas de Informação</nome>
<dep>TD</dep>
<totalHoras>135</totalHoras>
<horasContacto>
<T>15</T>
<TP>15</TP>
<PL>30</PL>
</horasContacto>
<ECTS>5</ECTS>
<obs></obs>
</unidade>
</perfil>
</semestre>
<semestre id="S6">
<perfil nome="Multimédia e Software de Entretenimento">
<unidade>
<nome>Engenharia de Software</nome>
<dep>TD</dep>
<totalHoras>135</totalHoras>
<horasContacto>
<TP>30</TP>
<PL>30</PL>
</horasContacto>
<ECTS>5</ECTS>
<obs></obs>
</unidade>
<unidade>
<nome>Sistemas Distribuídos</nome>
<dep>TD</dep>
<totalHoras>200</totalHoras>
<horasContacto>
<T>30</T>
<TP>30</TP>
<PL>30</PL>
</horasContacto>
<ECTS>7.5</ECTS>
<obs></obs>
</unidade>
<unidade>
<nome>Interface Pessoa - Máquina</nome>
<dep>TD</dep>
<totalHoras>135</totalHoras>
<horasContacto>
<T>30</T>
<TP>15</TP>
<PL>15</PL>
</horasContacto>
<ECTS>5</ECTS>
<obs></obs>
</unidade>
<unidade>
<nome>Projecto</nome>
<dep>TD</dep>
<totalHoras>200</totalHoras>
<horasContacto>
<TP>30</TP>
<OT>30</OT>
</horasContacto>
<ECTS>7.5</ECTS>
<obs></obs>
</unidade>
<unidade>
<nome>Seminário II</nome>
<dep>TD</dep>
<totalHoras>65</totalHoras>
<horasContacto>
<S>10</S>
</horasContacto>
<ECTS>2.5</ECTS>
<obs></obs>
</unidade>
<unidade>
<nome>Visual e Áudio Design</nome>
<dep>TD</dep>
<totalHoras>65</totalHoras>
<horasContacto>
<T>15</T>
<TP>15</TP>
</horasContacto>
<ECTS>2.5</ECTS>
<obs></obs>
</unidade>
</perfil>
<perfil nome="Programação e Sistemas de Informação">
<unidade>
<nome>Engenharia de Software</nome>
<dep>TD</dep>
<totalHoras>135</totalHoras>
<horasContacto>
<TP>30</TP>
<PL>30</PL>
</horasContacto>
<ECTS>5</ECTS>
<obs></obs>
</unidade>
<unidade>
<nome>Sistemas Distribuídos</nome>
<dep>TD</dep>
<totalHoras>200</totalHoras>
<horasContacto>
<T>30</T>
<TP>30</TP>
<PL>30</PL>
</horasContacto>
<ECTS>7.5</ECTS>
<obs></obs>
</unidade>
<unidade>
<nome>Interface Pessoa - Máquina</nome>
<dep>TD</dep>
<totalHoras>135</totalHoras>
<horasContacto>
<T>30</T>
<TP>15</TP>
<PL>15</PL>
</horasContacto>
<ECTS>5</ECTS>
<obs></obs>
</unidade>
<unidade>
<nome>Projecto</nome>
<dep>TD</dep>
<totalHoras>200</totalHoras>
<horasContacto>
<TP>30</TP>
<OT>30</OT>
</horasContacto>
<ECTS>7.5</ECTS>
<obs></obs>
</unidade>
<unidade>
<nome>Seminário II</nome>
<dep>TD</dep>
<totalHoras>65</totalHoras>
<horasContacto>
<S>10</S>
</horasContacto>
<ECTS>2.5</ECTS>
<obs></obs>
</unidade>
<unidade>
<nome>Segurança</nome>
<dep>TD</dep>
<totalHoras>65</totalHoras>
<horasContacto>
<T>15</T>
<TP>15</TP>
</horasContacto>
<ECTS>2.5</ECTS>
<obs></obs>
</unidade>
</perfil>
</semestre>
</curso>