Subversion Repositories bacoAlunos

Rev

Rev 1860 | Go to most recent revision | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 1860 Rev 1876
1
package pt.estgp.estgweb.services.courses;
1
package pt.estgp.estgweb.services.courses;
2
 
2
 
3
import com.owlike.genson.Genson;
3
import com.owlike.genson.Genson;
4
import com.owlike.genson.GensonBuilder;
4
import com.owlike.genson.GensonBuilder;
5
import com.owlike.genson.reflect.VisibilityFilter;
5
import com.owlike.genson.reflect.VisibilityFilter;
6
import jomm.dao.impl.AbstractDao;
6
import jomm.dao.impl.AbstractDao;
7
import jomm.utils.BytesUtils;
7
import jomm.utils.BytesUtils;
8
import jomm.utils.FilesUtils;
8
import jomm.utils.FilesUtils;
9
import jomm.utils.StreamsUtils;
9
import jomm.utils.StreamsUtils;
10
import org.apache.log4j.Logger;
10
import org.apache.log4j.Logger;
11
import org.dom4j.Document;
11
import org.dom4j.Document;
-
 
12
import org.hibernate.Query;
12
import org.json.JSONArray;
13
import org.json.JSONArray;
13
import org.json.JSONException;
14
import org.json.JSONException;
14
import org.json.JSONObject;
15
import org.json.JSONObject;
15
import pt.estgp.estgweb.utils.Globals;
-
 
16
import pt.estgp.estgweb.domain.*;
16
import pt.estgp.estgweb.domain.*;
17
import pt.estgp.estgweb.domain.dao.DaoFactory;
17
import pt.estgp.estgweb.domain.dao.DaoFactory;
18
import pt.estgp.estgweb.domain.views.CourseView;
18
import pt.estgp.estgweb.domain.views.CourseView;
19
import pt.estgp.estgweb.filters.chains.ResourceAccessControlEnum;
19
import pt.estgp.estgweb.filters.chains.ResourceAccessControlEnum;
20
import pt.estgp.estgweb.filters.exceptions.AccessDeniedException;
20
import pt.estgp.estgweb.filters.exceptions.AccessDeniedException;
21
import pt.estgp.estgweb.services.courses.xsd.*;
21
import pt.estgp.estgweb.services.courses.xsd.*;
22
import pt.estgp.estgweb.services.data.IRepositoryFile;
22
import pt.estgp.estgweb.services.data.IRepositoryFile;
23
import pt.estgp.estgweb.services.data.RepositoryService;
23
import pt.estgp.estgweb.services.data.RepositoryService;
24
import pt.estgp.estgweb.services.expceptions.AlreadyExistsException;
24
import pt.estgp.estgweb.services.expceptions.AlreadyExistsException;
25
import pt.estgp.estgweb.services.expceptions.ServiceException;
25
import pt.estgp.estgweb.services.expceptions.ServiceException;
26
import pt.estgp.estgweb.services.users.ReplaceRoleResult;
26
import pt.estgp.estgweb.services.users.ReplaceRoleResult;
27
import pt.estgp.estgweb.services.users.UserRoleConfigService;
27
import pt.estgp.estgweb.services.users.UserRoleConfigService;
28
import pt.estgp.estgweb.utils.ConfigProperties;
28
import pt.estgp.estgweb.utils.ConfigProperties;
29
import pt.estgp.estgweb.utils.Dom4jUtil;
29
import pt.estgp.estgweb.utils.Dom4jUtil;
-
 
30
import pt.estgp.estgweb.utils.Globals;
30
import pt.estgp.estgweb.utils.StringsUtils;
31
import pt.estgp.estgweb.utils.StringsUtils;
31
import pt.utl.ist.berserk.logic.serviceManager.IService;
32
import pt.utl.ist.berserk.logic.serviceManager.IService;
32
 
33
 
33
import javax.xml.bind.JAXBContext;
34
import javax.xml.bind.JAXBContext;
34
import javax.xml.bind.JAXBException;
35
import javax.xml.bind.JAXBException;
35
import javax.xml.bind.Marshaller;
36
import javax.xml.bind.Marshaller;
36
import javax.xml.bind.Unmarshaller;
37
import javax.xml.bind.Unmarshaller;
37
import java.io.*;
38
import java.io.*;
38
import java.net.URL;
39
import java.net.URL;
39
import java.util.*;
40
import java.util.*;
40
 
41
 
41
/*
42
/*
42
 * @author Goncalo Luiz gedl [AT] rnl [DOT] ist [DOT] utl [DOT] pt
43
 * @author Goncalo Luiz gedl [AT] rnl [DOT] ist [DOT] utl [DOT] pt
43
 *
44
 *
44
 *
45
 *
45
 * Created at 17/Out/2003 , 23:45:24
46
 * Created at 17/Out/2003 , 23:45:24
46
 *
47
 *
47
 */
48
 */
48
/**
49
/**
49
 * @author Jorge Machado
50
 * @author Jorge Machado
50
 *
51
 *
51
 *
52
 *
52
 * Created at 17/Out/2003 , 23:45:24
53
 * Created at 17/Out/2003 , 23:45:24
53
 *
54
 *
54
 */
55
 */
55
public class CoursesService implements IService
56
public class CoursesService implements IService
56
{
57
{
57
    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(CoursesService.class);
58
    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(CoursesService.class);
58
 
59
 
59
    RepositoryService repositoryService = new RepositoryService();
60
    RepositoryService repositoryService = new RepositoryService();
60
 
61
 
61
 
62
 
62
 
63
 
63
    /**
64
    /**
64
     * Servico e subservico para termos acesso as variaveis de controlo
65
     * Servico e subservico para termos acesso as variaveis de controlo
65
     * @param id
66
     * @param id
66
     * @param initUnits
67
     * @param initUnits
67
     * @return
68
     * @return
68
     * @throws ServiceException
69
     * @throws ServiceException
69
     */
70
     */
70
    public CourseView loadCourse(long id, boolean initUnits)
71
    public CourseView loadCourse(long id, boolean initUnits)
71
            throws ServiceException
72
            throws ServiceException
72
    {
73
    {
73
        return loadCourse(id,initUnits,false);
74
        return loadCourse(id,initUnits,false);
74
    }
75
    }
75
    public CourseView loadCourseAndStudiesPlans(long id, boolean initUnits)
76
    public CourseView loadCourseAndStudiesPlans(long id, boolean initUnits)
76
            throws ServiceException
77
            throws ServiceException
77
    {
78
    {
78
        return loadCourse(id,initUnits,true);
79
        return loadCourse(id,initUnits,true);
79
    }
80
    }
80
 
81
 
81
 
82
 
82
    private CourseView loadCourse(long id, boolean initUnits,boolean loadStudiesPlans) throws ServiceException
83
    private CourseView loadCourse(long id, boolean initUnits,boolean loadStudiesPlans) throws ServiceException
83
    {
84
    {
84
        Course c = DaoFactory.getCourseDaoImpl().get(id);
85
        Course c = DaoFactory.getCourseDaoImpl().get(id);
85
 
86
 
86
        if(c != null)
87
        if(c != null)
87
        {
88
        {
88
            return getCourseView(initUnits, c,loadStudiesPlans);
89
            return getCourseView(initUnits, c,loadStudiesPlans);
89
        }
90
        }
90
        return null;
91
        return null;
91
    }
92
    }
92
 
93
 
93
    /**
94
    /**
94
     * Servico e subservico para termos acesso as variaveis de controlo
95
     * Servico e subservico para termos acesso as variaveis de controlo
95
     * @param code
96
     * @param code
96
     * @param initUnits
97
     * @param initUnits
97
     * @return
98
     * @return
98
     * @throws ServiceException
99
     * @throws ServiceException
99
     */
100
     */
100
 
101
 
101
    public CourseView loadCourseByCode(1.5.0/docs/api/java/lang/String.html">String code, boolean initUnits) throws ServiceException
102
    public CourseView loadCourseByCode(1.5.0/docs/api/java/lang/String.html">String code, boolean initUnits) throws ServiceException
102
    {
103
    {
103
        return loadCourseByCode(code,initUnits,false);
104
        return loadCourseByCode(code,initUnits,false);
104
    }
105
    }
105
    public CourseView loadCourseByCodeAndStudiesPlans(1.5.0/docs/api/java/lang/String.html">String code, boolean initUnits) throws ServiceException
106
    public CourseView loadCourseByCodeAndStudiesPlans(1.5.0/docs/api/java/lang/String.html">String code, boolean initUnits) throws ServiceException
106
    {
107
    {
107
        return loadCourseByCode(code,initUnits,true);
108
        return loadCourseByCode(code,initUnits,true);
108
    }
109
    }
109
 
110
 
110
 
111
 
111
    private CourseView loadCourseByCode(1.5.0/docs/api/java/lang/String.html">String code, boolean initUnits,boolean loadStudiesPlans) throws ServiceException
112
    private CourseView loadCourseByCode(1.5.0/docs/api/java/lang/String.html">String code, boolean initUnits,boolean loadStudiesPlans) throws ServiceException
112
    {
113
    {
113
        try{
114
        try{
114
            Course c = DaoFactory.getCourseDaoImpl().findCourseByCode(code);
115
            Course c = DaoFactory.getCourseDaoImpl().findCourseByCode(code);
115
            if(c != null)
116
            if(c != null)
116
            {
117
            {
117
                return getCourseView(initUnits, c, loadStudiesPlans);
118
                return getCourseView(initUnits, c, loadStudiesPlans);
118
            }
119
            }
119
        }
120
        }
120
        catch(1.5.0/docs/api/java/lang/Throwable.html">Throwable e)
121
        catch(1.5.0/docs/api/java/lang/Throwable.html">Throwable e)
121
        {
122
        {
122
            logger.error(e + " loading code:" + code,e);
123
            logger.error(e + " loading code:" + code,e);
123
            throw new ServiceException("loading code: " + code  + " - " + e.toString(),e);
124
            throw new ServiceException("loading code: " + code  + " - " + e.toString(),e);
124
        }
125
        }
125
        return null;
126
        return null;
126
    }
127
    }
127
 
128
 
128
    /**
129
    /**
129
     * Carrega efetivamente o curso nos servicos load e load by code
130
     * Carrega efetivamente o curso nos servicos load e load by code
130
     * @param initUnits
131
     * @param initUnits
131
     * @param c
132
     * @param c
132
     * @return
133
     * @return
133
     */
134
     */
134
 
135
 
135
    private CourseView getCourseView(boolean initUnits, Course c,boolean loadStudiesPlans) {
136
    private CourseView getCourseView(boolean initUnits, Course c,boolean loadStudiesPlans) {
136
        CourseView cV = new CourseView(c,initUnits);
137
        CourseView cV = new CourseView(c,initUnits);
137
            /*
138
            /*
138
            * todo Parte antig antigo XML do plano de estudos para remover futuramente*/
139
            * todo Parte antig antigo XML do plano de estudos para remover futuramente*/
139
        if(c.getStudiesPlan() != null)
140
        if(c.getStudiesPlan() != null)
140
        {
141
        {
141
            RepositoryFileImpl repositoryFile = repositoryService.loadView(c.getStudiesPlan());
142
            RepositoryFileImpl repositoryFile = repositoryService.loadView(c.getStudiesPlan());
142
            cV.setStudiesPlan(repositoryFile);
143
            cV.setStudiesPlan(repositoryFile);
143
        }
144
        }
144
        if(loadStudiesPlans && c.getStudiesPlans() != null && c.getStudiesPlans().size() > 0)
145
        if(loadStudiesPlans && c.getStudiesPlans() != null && c.getStudiesPlans().size() > 0)
145
        {
146
        {
146
            for(CourseStudiesPlan sp : c.getStudiesPlans())
147
            for(CourseStudiesPlan sp : c.getStudiesPlans())
147
            {
148
            {
148
                sp.getVersion();
149
                sp.getVersion();
149
                cV.getCourseStudiesPlans().add(sp);
150
                cV.getCourseStudiesPlans().add(sp);
150
            }
151
            }
151
        }
152
        }
152
 
153
 
153
        return cV;
154
        return cV;
154
    }
155
    }
155
 
156
 
156
    public List<String> loadImportYears(UserSession userSession) throws ServiceException
157
    public List<String> loadImportYears(UserSession userSession) throws ServiceException
157
    {
158
    {
158
        List<String> importYears = DaoFactory.getCourseDaoImpl().loadImportYears();
159
        List<String> importYears = DaoFactory.getCourseDaoImpl().loadImportYears();
159
        List<String> imStrings = new ArrayList<String>();
160
        List<String> imStrings = new ArrayList<String>();
160
        for(1.5.0/docs/api/java/lang/String.html">String importYear: importYears)
161
        for(1.5.0/docs/api/java/lang/String.html">String importYear: importYears)
161
        {
162
        {
162
            imStrings.add(importYear);
163
            imStrings.add(importYear);
163
        }
164
        }
164
        return imStrings;
165
        return imStrings;
165
    }
166
    }
166
 
167
 
167
 
168
 
168
 
169
 
169
    public CourseView submitCourse(CourseView courseView,
170
    public CourseView submitCourse(CourseView courseView,
170
                                   5+0%2Fdocs%2Fapi+InputStream">InputStream stream,
171
                                   5+0%2Fdocs%2Fapi+InputStream">InputStream stream,
171
                                   1.5.0/docs/api/java/lang/String.html">String name,
172
                                   1.5.0/docs/api/java/lang/String.html">String name,
172
                                   int size,
173
                                   int size,
173
                                   1.5.0/docs/api/java/lang/String.html">String contentType,
174
                                   1.5.0/docs/api/java/lang/String.html">String contentType,
174
                                   UserSession userSession) throws ServiceException, JAXBException, 1.5.0/docs/api/java/io/IOException.html">IOException {
175
                                   UserSession userSession) throws ServiceException, JAXBException, 1.5.0/docs/api/java/io/IOException.html">IOException {
175
        Course c;
176
        Course c;
176
        if(courseView.getId() > 0)
177
        if(courseView.getId() > 0)
177
        {
178
        {
178
            c = DaoFactory.getCourseDaoImpl().get(courseView.getId());
179
            c = DaoFactory.getCourseDaoImpl().get(courseView.getId());
179
        }
180
        }
180
        else
181
        else
181
        {
182
        {
182
            c = DaoFactory.getCourseDaoImpl().findCourseByCodeAndYear(courseView.getCode(),courseView.getImportYear());
183
            c = DaoFactory.getCourseDaoImpl().findCourseByCodeAndYear(courseView.getCode(),courseView.getImportYear());
183
            if(c != null)
184
            if(c != null)
184
                throw new AlreadyExistsException(AlreadyExistsException.ALREADY_EXISTS_COURSE);      
185
                throw new AlreadyExistsException(AlreadyExistsException.ALREADY_EXISTS_COURSE);
185
            c = DomainObjectFactory.createCourseImpl();
186
            c = DomainObjectFactory.createCourseImpl();
186
            DaoFactory.getCourseDaoImpl().save(c);
187
            DaoFactory.getCourseDaoImpl().save(c);
187
        }
188
        }
188
 
189
 
189
        1.5.0/docs/api/java/lang/String.html">String htmlTrasformationResult = null;
190
        1.5.0/docs/api/java/lang/String.html">String htmlTrasformationResult = null;
190
 
191
 
191
        //Stream que pode vir do upload da UIde Admin de Cursos
192
        //Stream que pode vir do upload da UIde Admin de Cursos
192
        htmlTrasformationResult = uploadStudiesPlan(stream, name, size, contentType, userSession, c,false,null);
193
        htmlTrasformationResult = uploadStudiesPlan(stream, name, size, contentType, userSession, c,false,null);
193
        courseView.persistViewInObject(c);
194
        courseView.persistViewInObject(c);
194
        CourseView cv = loadCourse(c.getId(),false);
195
        CourseView cv = loadCourse(c.getId(),false);
195
        cv.setHtmlResult(htmlTrasformationResult);
196
        cv.setHtmlResult(htmlTrasformationResult);
196
 
197
 
197
        /**
198
        /**
198
         * New## generating course json
199
         * New## generating course json
199
         */
200
         */
200
        generateCourseJson(c);
201
        generateCourseJson(c);
201
 
202
 
202
        return cv;
203
        return cv;
203
    }
204
    }
204
 
205
 
205
    private 1.5.0/docs/api/java/lang/String.html">String uploadStudiesPlan(5+0%2Fdocs%2Fapi+InputStream">InputStream stream, 1.5.0/docs/api/java/lang/String.html">String name, int size, 1.5.0/docs/api/java/lang/String.html">String contentType, UserSession userSession, Course c,boolean forceUrlFichas, 1.5.0/docs/api/java/lang/String.html">String systemUrl) throws JAXBException {
206
    private 1.5.0/docs/api/java/lang/String.html">String uploadStudiesPlan(5+0%2Fdocs%2Fapi+InputStream">InputStream stream, 1.5.0/docs/api/java/lang/String.html">String name, int size, 1.5.0/docs/api/java/lang/String.html">String contentType, UserSession userSession, Course c,boolean forceUrlFichas, 1.5.0/docs/api/java/lang/String.html">String systemUrl) throws JAXBException {
206
        1.5.0/docs/api/java/lang/String.html">String htmlTrasformationResult = null;
207
        1.5.0/docs/api/java/lang/String.html">String htmlTrasformationResult = null;
207
        //APENAS NO CASO DO AMDIN FAZER UPLOAD DE UM XML
208
        //APENAS NO CASO DO AMDIN FAZER UPLOAD DE UM XML
208
        if(stream != null && size > 0)
209
        if(stream != null && size > 0)
209
        {
210
        {
210
            1.5.0/docs/api/java/lang/String.html">String extension = FilesUtils.getExtension(name);
211
            1.5.0/docs/api/java/lang/String.html">String extension = FilesUtils.getExtension(name);
211
            if(c.getStudiesPlan() == null)
212
            if(c.getStudiesPlan() == null)
212
            {
213
            {
213
                1.5.0/docs/api/java/lang/String.html">String identifier = repositoryService.storeRepositoryFile(stream, contentType, extension, size, name, "course.studies.plan " + c.getName(), ResourceAccessControlEnum.publicDomain, null, userSession);
214
                1.5.0/docs/api/java/lang/String.html">String identifier = repositoryService.storeRepositoryFile(stream, contentType, extension, size, name, "course.studies.plan " + c.getName(), ResourceAccessControlEnum.publicDomain, null, userSession);
214
                c.setStudiesPlan(identifier);
215
                c.setStudiesPlan(identifier);
215
            }
216
            }
216
            else
217
            else
217
            {
218
            {
218
                repositoryService.updateRepositoryFile(c.getStudiesPlan(), stream, contentType, extension, size, name, "course.studies.plan " + c.getName(), ResourceAccessControlEnum.publicDomain);
219
                repositoryService.updateRepositoryFile(c.getStudiesPlan(), stream, contentType, extension, size, name, "course.studies.plan " + c.getName(), ResourceAccessControlEnum.publicDomain);
219
            }
220
            }
220
            htmlTrasformationResult = generateHtmlCache(userSession, c);
221
            htmlTrasformationResult = generateHtmlCache(userSession, c);
221
            //####New#### Generating XML with JaxB
222
            //####New#### Generating XML with JaxB
222
            //ISTO SO É CHAMADO NO CASO DE SE FAZER UPLOAD DE UM NOVO PLANO PELO MECANISMO ANTIGO
223
            //ISTO SO É CHAMADO NO CASO DE SE FAZER UPLOAD DE UM NOVO PLANO PELO MECANISMO ANTIGO
223
            generateXmlJaxbStudiesPlanVersionFromRepositoryOldPlanStream(userSession, c, forceUrlFichas, systemUrl);
224
            generateXmlJaxbStudiesPlanVersionFromRepositoryOldPlanStream(userSession, c, forceUrlFichas, systemUrl);
224
        }
225
        }
225
        return htmlTrasformationResult;
226
        return htmlTrasformationResult;
226
    }
227
    }
227
 
228
 
228
 
229
 
229
 
230
 
230
    private void generateCourseJson(Course cAux) throws 1.5.0/docs/api/java/io/IOException.html">IOException {
231
    private void generateCourseJson(Course cAux) throws 1.5.0/docs/api/java/io/IOException.html">IOException {
231
        CourseImpl c = (CourseImpl) DaoFactory.getCourseDaoImpl().narrow(cAux);
232
        CourseImpl c = (CourseImpl) DaoFactory.getCourseDaoImpl().narrow(cAux);
232
 
233
 
233
        if(c.getValidationRole() != null && c.getValidationRole().trim().length() > 0)
234
        if(c.getValidationRole() != null && c.getValidationRole().trim().length() > 0)
234
        {
235
        {
235
            List<Teacher> courseComissionProxys = DaoFactory.getUserDaoImpl().loadRoleTeachers(c.getValidationRole());
236
            List<Teacher> courseComissionProxys = DaoFactory.getUserDaoImpl().loadRoleTeachers(c.getValidationRole());
236
            List<Teacher> courseComission = new ArrayList<Teacher>();
237
            List<Teacher> courseComission = new ArrayList<Teacher>();
237
            for(Teacher t: courseComissionProxys)
238
            for(Teacher t: courseComissionProxys)
238
            {
239
            {
239
                courseComission.add(DaoFactory.getTeacherDaoImpl().narrow(t));
240
                courseComission.add(DaoFactory.getTeacherDaoImpl().narrow(t));
240
            }
241
            }
241
            c.setCourseComission(courseComission);
242
            c.setCourseComission(courseComission);
242
        }
243
        }
243
        //Getting Coordinator from proxy
244
        //Getting Coordinator from proxy
244
        Teacher t = c.getCoordinator();
245
        Teacher t = c.getCoordinator();
245
        if(t != null)
246
        if(t != null)
246
            t.getName();
247
            t.getName();
247
        else
248
        else
248
        {
249
        {
249
            logger.warn("Course does not have coordinator");
250
            logger.warn("Course does not have coordinator");
250
        }
251
        }
251
 
252
 
252
        1.5.0/docs/api/java/lang/String.html">String jsonCourse = getGensonCourse().serialize(c);
253
        1.5.0/docs/api/java/lang/String.html">String jsonCourse = getGensonCourse().serialize(c);
253
        c.setJson(jsonCourse);
254
        c.setJson(jsonCourse);
254
    }
255
    }
255
 
256
 
256
    private 1.5.0/docs/api/java/lang/String.html">String generateHtmlCache(UserSession userSession, Course c) {
257
    private 1.5.0/docs/api/java/lang/String.html">String generateHtmlCache(UserSession userSession, Course c) {
257
        1.5.0/docs/api/java/lang/String.html">String htmlTrasformationResult = null;
258
        1.5.0/docs/api/java/lang/String.html">String htmlTrasformationResult = null;
258
        5+0%2Fdocs%2Fapi+InputStream">InputStream stream;IRepositoryFile repositoryFile = repositoryService.load(c.getStudiesPlan(),userSession);
259
        5+0%2Fdocs%2Fapi+InputStream">InputStream stream;IRepositoryFile repositoryFile = repositoryService.load(c.getStudiesPlan(),userSession);
259
        stream = repositoryFile.getInput();
260
        stream = repositoryFile.getInput();
260
        try
261
        try
261
        {
262
        {
262
            5+0%2Fdocs%2Fapi+Document">Document dom = Dom4jUtil.parse(stream);
263
            5+0%2Fdocs%2Fapi+Document">Document dom = Dom4jUtil.parse(stream);
263
            Map<String,Object> parameters = new HashMap<String,Object>();
264
            Map<String,Object> parameters = new HashMap<String,Object>();
264
            parameters.put("COURSE_SIGES_CODE",c.getCode());
265
            parameters.put("COURSE_SIGES_CODE",c.getCode());
265
            1.5.0/docs/api/java/lang/String.html">String html = Dom4jUtil.styleDocument(dom, Globals.TEMPLATE_COURSE_XSL_PATH,parameters);
266
            1.5.0/docs/api/java/lang/String.html">String html = Dom4jUtil.styleDocument(dom, Globals.TEMPLATE_COURSE_XSL_PATH,parameters);
266
            c.setCacheWebDocument(html);
267
            c.setCacheWebDocument(html);
267
        }
268
        }
268
        catch (1.5.0/docs/api/java/lang/Exception.html">Exception e)
269
        catch (1.5.0/docs/api/java/lang/Exception.html">Exception e)
269
        {
270
        {
270
            1.5.0/docs/api/java/io/StringWriter.html">StringWriter writer = new 1.5.0/docs/api/java/io/StringWriter.html">StringWriter();
271
            1.5.0/docs/api/java/io/StringWriter.html">StringWriter writer = new 1.5.0/docs/api/java/io/StringWriter.html">StringWriter();
271
            1.5.0/docs/api/java/io/PrintWriter.html">PrintWriter printWriter = new 1.5.0/docs/api/java/io/PrintWriter.html">PrintWriter(writer);
272
            1.5.0/docs/api/java/io/PrintWriter.html">PrintWriter printWriter = new 1.5.0/docs/api/java/io/PrintWriter.html">PrintWriter(writer);
272
            e.printStackTrace(printWriter);
273
            e.printStackTrace(printWriter);
273
            htmlTrasformationResult = "<div class=\"error\"><pre>" + e.toString() + "\n" + printWriter.toString() + "</pre></div>";
274
            htmlTrasformationResult = "<div class=\"error\"><pre>" + e.toString() + "\n" + printWriter.toString() + "</pre></div>";
274
            printWriter.close();
275
            printWriter.close();
275
        }
276
        }
276
        try
277
        try
277
        {
278
        {
278
            stream.close();
279
            stream.close();
279
        }
280
        }
280
        catch (1.5.0/docs/api/java/io/IOException.html">IOException e)
281
        catch (1.5.0/docs/api/java/io/IOException.html">IOException e)
281
        {
282
        {
282
            logger.error(e,e);
283
            logger.error(e,e);
283
        }
284
        }
284
        return htmlTrasformationResult;
285
        return htmlTrasformationResult;
285
    }
286
    }
286
 
287
 
287
    /**
288
    /**
288
     * ##NEW METHOD###
289
     * ##NEW METHOD###
289
     * Gera o XML normalizado para o JAXB a partir do XML importado do XML do plano XML quese usou no upload
290
     * Gera o XML normalizado para o JAXB a partir do XML importado do XML do plano XML quese usou no upload
290
     * para garantir que está bem formado
291
     * para garantir que está bem formado
291
     * @param userSession
292
     * @param userSession
292
     * @param c
293
     * @param c
293
     * @return
294
     * @return
294
     * @throws JAXBException if XML is not weel formed
295
     * @throws JAXBException if XML is not weel formed
295
     */
296
     */
296
    private void generateXmlJaxbStudiesPlanVersionFromRepositoryOldPlanStream(UserSession userSession, Course c, boolean forceFichaCurricularUrlSet, 1.5.0/docs/api/java/lang/String.html">String systemUrlForUnitPrograms) throws JAXBException
297
    private void generateXmlJaxbStudiesPlanVersionFromRepositoryOldPlanStream(UserSession userSession, Course c, boolean forceFichaCurricularUrlSet, 1.5.0/docs/api/java/lang/String.html">String systemUrlForUnitPrograms) throws JAXBException
297
    {
298
    {
298
        CourseStudiesPlan courseStudiesPlan;
299
        CourseStudiesPlan courseStudiesPlan;
299
        if(c.getStudiesPlan() == null || c.getStudiesPlan().trim().length() == 0)
300
        if(c.getStudiesPlan() == null || c.getStudiesPlan().trim().length() == 0)
300
        {
301
        {
301
            //ESTE É O STREAM DO PLANO DE UPLOAD
302
            //ESTE É O STREAM DO PLANO DE UPLOAD
302
            logger.warn("Course does not have studies plan XML file stream to use in update");
303
            logger.warn("Course does not have studies plan XML file stream to use in update");
303
            return;
304
            return;
304
        }
305
        }
305
 
306
 
306
        if(c.getStudiesPlans() == null || c.getStudiesPlans().size() == 0)
307
        if(c.getStudiesPlans() == null || c.getStudiesPlans().size() == 0)
307
        {
308
        {
308
            logger.info("Generating first study plan");
309
            logger.info("Generating first study plan");
309
            courseStudiesPlan = DomainObjectFactory.createCourseStudiesPlanImpl();
310
            courseStudiesPlan = DomainObjectFactory.createCourseStudiesPlanImpl();
310
            courseStudiesPlan.setVersion(1);
311
            courseStudiesPlan.setVersion(1);
311
            courseStudiesPlan.setVersionDescription("Auto gerado durante a importação de um XML com o plano de estudos a " + new 5+0%2Fdocs%2Fapi+Date">Date().toString());
312
            courseStudiesPlan.setVersionDescription("Auto gerado durante a importação de um XML com o plano de estudos a " + new 5+0%2Fdocs%2Fapi+Date">Date().toString());
312
            courseStudiesPlan.setCourse(c);
313
            courseStudiesPlan.setCourse(c);
313
            if(c.getStudiesPlans() == null)
314
            if(c.getStudiesPlans() == null)
314
                c.setStudiesPlans(new HashSet<CourseStudiesPlan>());
315
                c.setStudiesPlans(new HashSet<CourseStudiesPlan>());
315
            c.getStudiesPlans().add(courseStudiesPlan);
316
            c.getStudiesPlans().add(courseStudiesPlan);
316
            DaoFactory.getCourseStudiesPlanDaoImpl().save(courseStudiesPlan);
317
            DaoFactory.getCourseStudiesPlanDaoImpl().save(courseStudiesPlan);
317
        }
318
        }
318
        else
319
        else
319
        {
320
        {
320
            courseStudiesPlan = c.getStudiesPlans().iterator().next();
321
            courseStudiesPlan = c.getStudiesPlans().iterator().next();
321
            logger.info("Updating Study Plan version " + courseStudiesPlan.getVersion());
322
            logger.info("Updating Study Plan version " + courseStudiesPlan.getVersion());
322
        }
323
        }
323
 
324
 
324
        5+0%2Fdocs%2Fapi+InputStream">InputStream stream;
325
        5+0%2Fdocs%2Fapi+InputStream">InputStream stream;
325
        IRepositoryFile repositoryFile = repositoryService.load(c.getStudiesPlan(),userSession);
326
        IRepositoryFile repositoryFile = repositoryService.load(c.getStudiesPlan(),userSession);
326
        long lastVersion = repositoryService.loadView(c.getStudiesPlan()).getLastVersion().getId();
327
        long lastVersion = repositoryService.loadView(c.getStudiesPlan()).getLastVersion().getId();
327
        //stream = repositoryFile.getInput();
328
        //stream = repositoryFile.getInput();
328
        //TODO TIRAR
329
        //TODO TIRAR
329
        //JUST FOR DEBUG
330
        //JUST FOR DEBUG
330
       /* try {
331
       /* try {
331
            System.out.println(StreamsUtils.readString(stream));
332
            System.out.println(StreamsUtils.readString(stream));
332
            stream.close();
333
            stream.close();
333
        } catch (IOException e) {
334
        } catch (IOException e) {
334
            e.printStackTrace();
335
            e.printStackTrace();
335
        }*/
336
        }*/
336
        repositoryFile = repositoryService.load(c.getStudiesPlan(),userSession);
337
        repositoryFile = repositoryService.load(c.getStudiesPlan(),userSession);
337
        stream = repositoryFile.getInput();
338
        stream = repositoryFile.getInput();
338
 
339
 
339
        try {
340
        try {
340
            JAXBContext jc = JAXBContext.newInstance(Curso.class);
341
            JAXBContext jc = JAXBContext.newInstance(Curso.class);
341
            Unmarshaller unmarshaller = jc.createUnmarshaller();
342
            Unmarshaller unmarshaller = jc.createUnmarshaller();
342
            //Just in case lets update SigesCode
343
            //Just in case lets update SigesCode
343
            Curso curso = (Curso) unmarshaller.unmarshal(stream);
344
            Curso curso = (Curso) unmarshaller.unmarshal(stream);
344
            curso.setSiges(c.getCode());
345
            curso.setSiges(c.getCode());
345
            curso.setNome(c.getName());
346
            curso.setNome(c.getName());
346
            curso.setDep(c.getArea());
347
            curso.setDep(c.getArea());
347
 
348
 
348
            //##NOVO PARA GERAR LINK SE NAO EXISTIR
349
            //##NOVO PARA GERAR LINK SE NAO EXISTIR
349
            generateAutoUrlFichasCurriculares(curso,systemUrlForUnitPrograms,forceFichaCurricularUrlSet);
350
            generateAutoUrlFichasCurriculares(curso,systemUrlForUnitPrograms,forceFichaCurricularUrlSet);
350
 
351
 
351
            Marshaller marshaller = jc.createMarshaller();
352
            Marshaller marshaller = jc.createMarshaller();
352
            marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
353
            marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
353
            1.5.0/docs/api/java/io/StringWriter.html">StringWriter sw = new 1.5.0/docs/api/java/io/StringWriter.html">StringWriter();
354
            1.5.0/docs/api/java/io/StringWriter.html">StringWriter sw = new 1.5.0/docs/api/java/io/StringWriter.html">StringWriter();
354
            marshaller.marshal(curso, sw);
355
            marshaller.marshal(curso, sw);
355
            //SETTING XML in COURSE STUDIES PLAN
356
            //SETTING XML in COURSE STUDIES PLAN
356
            courseStudiesPlan.setXml(sw.toString());
357
            courseStudiesPlan.setXml(sw.toString());
357
 
358
 
358
 
359
 
359
            1.5.0/docs/api/java/lang/String.html">String json = CursoImpl.getGensonPlanoEstudosParaApiJsonWS().serialize(curso);
360
            1.5.0/docs/api/java/lang/String.html">String json = CursoImpl.getGensonPlanoEstudosParaApiJsonWS().serialize(curso);
360
            //SETTING JSON in COURSE STUDIES PLAN
361
            //SETTING JSON in COURSE STUDIES PLAN
361
            courseStudiesPlan.setJson(json);
362
            courseStudiesPlan.setJson(json);
362
 
363
 
363
        } catch (JAXBException e) {
364
        } catch (JAXBException e) {
364
            logger.error(e,e);
365
            logger.error(e,e);
365
            1.5.0/docs/api/java/lang/System.html">System.out.print("check XML for possible errors for repositoryStream:" + c.getStudiesPlan() + " file version: " + lastVersion);
366
            1.5.0/docs/api/java/lang/System.html">System.out.print("check XML for possible errors for repositoryStream:" + c.getStudiesPlan() + " file version: " + lastVersion);
366
            throw e;
367
            throw e;
367
        }
368
        }
368
        try
369
        try
369
        {
370
        {
370
            stream.close();
371
            stream.close();
371
        }
372
        }
372
        catch (1.5.0/docs/api/java/io/IOException.html">IOException e)
373
        catch (1.5.0/docs/api/java/io/IOException.html">IOException e)
373
        {
374
        {
374
            logger.error(e,e);
375
            logger.error(e,e);
375
        }
376
        }
376
    }
377
    }
377
 
378
 
378
 
379
 
379
    /**
380
    /**
380
     * Apenas é chamado quando se tenta injectar um programa a partir de um upload que foi feito
381
     * Apenas é chamado quando se tenta injectar um programa a partir de um upload que foi feito
381
     * pelo user ou pela sincronização remota
382
     * pelo user ou pela sincronização remota
382
     * @param curso
383
     * @param curso
383
     * @param systemUrl
384
     * @param systemUrl
384
     * @param force
385
     * @param force
385
     */
386
     */
386
    private void generateAutoUrlFichasCurriculares(Curso curso,1.5.0/docs/api/java/lang/String.html">String systemUrl,boolean force)
387
    private void generateAutoUrlFichasCurriculares(Curso curso,1.5.0/docs/api/java/lang/String.html">String systemUrl,boolean force)
387
    {
388
    {
388
        for(Curso.Semestre s :curso.getSemestre())
389
        for(Curso.Semestre s :curso.getSemestre())
389
        {
390
        {
390
            for(Curso.Semestre.Perfil p :s.getPerfil())
391
            for(Curso.Semestre.Perfil p :s.getPerfil())
391
            {
392
            {
392
                for(UnidadeType unidadeType : p.getUnidade())
393
                for(UnidadeType unidadeType : p.getUnidade())
393
                {
394
                {
394
                    generateAutoUrlUnidade(unidadeType,systemUrl,curso,s,force);
395
                    generateAutoUrlUnidade(unidadeType,systemUrl,curso,s,force);
395
                }
396
                }
396
            }
397
            }
397
            for(UnidadeType unidadeType : s.getUnidade())
398
            for(UnidadeType unidadeType : s.getUnidade())
398
            {
399
            {
399
                generateAutoUrlUnidade(unidadeType,systemUrl,curso,s,force);
400
                generateAutoUrlUnidade(unidadeType,systemUrl,curso,s,force);
400
            }
401
            }
401
        }
402
        }
402
    }
403
    }
403
 
404
 
404
    private void generateAutoUrlUnidade(UnidadeType unidadeType,1.5.0/docs/api/java/lang/String.html">String systemUrl,Curso curso,Curso.Semestre semestre,boolean force)
405
    private void generateAutoUrlUnidade(UnidadeType unidadeType,1.5.0/docs/api/java/lang/String.html">String systemUrl,Curso curso,Curso.Semestre semestre,boolean force)
405
    {
406
    {
406
        if(force || unidadeType.getUrlFichaCurricular() == null || unidadeType.getUrlFichaCurricular().trim().length()==0)
407
        if(force || unidadeType.getUrlFichaCurricular() == null || unidadeType.getUrlFichaCurricular().trim().length()==0)
407
        {
408
        {
408
            logger.info("GENERATING FICHA CURRICULAR URL For " + unidadeType.getNome());
409
            logger.info("GENERATING FICHA CURRICULAR URL For " + unidadeType.getNome());
409
            1.5.0/docs/api/java/lang/String.html">String url = systemUrl != null ? systemUrl : "";
410
            1.5.0/docs/api/java/lang/String.html">String url = systemUrl != null ? systemUrl : "";
410
            if(!url.endsWith("/"))
411
            if(!url.endsWith("/"))
411
                url = url + "/";
412
                url = url + "/";
412
 
413
 
413
            //Nao fornece o ano pois o servico irá assumir o ultimo
414
            //Nao fornece o ano pois o servico irá assumir o ultimo
414
            unidadeType.setUrlFichaCurricular(url + "startLoadCourseUnitProgramSiges.do?unitCode=" + unidadeType.getSiges() + "&courseCode=" + curso.getSiges() + "&semestre=" + semestre.getId());
415
            unidadeType.setUrlFichaCurricular(url + "startLoadCourseUnitProgramSiges.do?unitCode=" + unidadeType.getSiges() + "&courseCode=" + curso.getSiges() + "&semestre=" + semestre.getId());
415
            unidadeType.setUrlUnidadeCurricular(url + "startLoadCourseUnitSiges.do?unitCode=" + unidadeType.getSiges() + "&courseCode=" + curso.getSiges() + "&semestre=" + semestre.getId());
416
            unidadeType.setUrlUnidadeCurricular(url + "startLoadCourseUnitSiges.do?unitCode=" + unidadeType.getSiges() + "&courseCode=" + curso.getSiges() + "&semestre=" + semestre.getId());
416
        }
417
        }
417
    }
418
    }
418
 
419
 
419
 
420
 
420
    private static Genson getGensonCourse(){
421
    private static Genson getGensonCourse(){
421
        Genson genson = new GensonBuilder()
422
        Genson genson = new GensonBuilder()
422
                .exclude(5+0%2Fdocs%2Fapi+Object">Object.class)
423
                .exclude(5+0%2Fdocs%2Fapi+Object">Object.class)
423
                .useFields(false)
424
                .useFields(false)
424
                .useMethods(true)
425
                .useMethods(true)
425
                .setMethodFilter(VisibilityFilter.PACKAGE_PUBLIC)
426
                .setMethodFilter(VisibilityFilter.PACKAGE_PUBLIC)
426
                .exclude("admin")
427
                .exclude("admin")
427
                .exclude("autoBlock")
428
                .exclude("autoBlock")
428
                .exclude("autoBlockMode")
429
                .exclude("autoBlockMode")
429
                .exclude("manualBlock")
430
                .exclude("manualBlock")
430
                .exclude("newUser")
431
                .exclude("newUser")
431
                .exclude("student")
432
                .exclude("student")
432
                .exclude("superuser")
433
                .exclude("superuser")
433
                .exclude("superuserOrAdmin")
434
                .exclude("superuserOrAdmin")
434
                .exclude("teacher")
435
                .exclude("teacher")
435
                .exclude("unitCheck")
436
                .exclude("unitCheck")
436
                .exclude("id")
437
                .exclude("id")
437
 
438
 
438
/*              .exclude(Course.class)
439
/*              .exclude(Course.class)
439
                .exclude(CourseImpl.class)
440
                .exclude(CourseImpl.class)
440
                .exclude(GenericUser.class)
441
                .exclude(GenericUser.class)
441
                .exclude(User.class)
442
                .exclude(User.class)
442
                .exclude(UserImpl.class)
443
                .exclude(UserImpl.class)
443
                .exclude(Teacher.class)
444
                .exclude(Teacher.class)
444
                .exclude(TeacherImpl.class)
445
                .exclude(TeacherImpl.class)
445
                .exclude(SigesUser.class)
446
                .exclude(SigesUser.class)
446
                .exclude(SigesUserImpl.class)
447
                .exclude(SigesUserImpl.class)
447
                .exclude(GenericUser.class)
448
                .exclude(GenericUser.class)
448
                .exclude(GenericUserImpl.class)
449
                .exclude(GenericUserImpl.class)
449
*/
450
*/
450
                .exclude("id", Course.class)
451
                .exclude("id", Course.class)
451
                .exclude("status", Course.class)
452
                .exclude("status", Course.class)
452
                .exclude("showStudiesPlan", Course.class)
453
                .exclude("showStudiesPlan", Course.class)
453
                .include("degreeForJsonApi", CourseImpl.class)
454
                .include("degreeForJsonApi", CourseImpl.class)
454
                .include("degreeForJsonApiEn", CourseImpl.class)
455
                .include("degreeForJsonApiEn", CourseImpl.class)
455
                .include("degreeForJsonApiEs", CourseImpl.class)
456
                .include("degreeForJsonApiEs", CourseImpl.class)
456
                .include("degreeForJsonApiFr", CourseImpl.class)
457
                .include("degreeForJsonApiFr", CourseImpl.class)
457
                .include("schoolForJsonApi", CourseImpl.class)
458
                .include("schoolForJsonApi", CourseImpl.class)
458
                .include("statusForJsonApi", CourseImpl.class)
459
                .include("statusForJsonApi", CourseImpl.class)
459
 
460
 
460
 
461
 
461
                .include("name", Course.class)
462
                .include("name", Course.class)
462
                .include("nameEn", Course.class)
463
                .include("nameEn", Course.class)
463
                .include("nameEs", Course.class)
464
                .include("nameEs", Course.class)
464
                .include("nameFr", Course.class)
465
                .include("nameFr", Course.class)
465
                .include("department", Course.class)
466
                .include("department", Course.class)
466
                .exclude("active", CourseDepartment.class)
467
                .exclude("active", CourseDepartment.class)
467
                .include("sigla", CourseDepartment.class)
468
                .include("sigla", CourseDepartment.class)
468
                .include("name", CourseDepartment.class)
469
                .include("name", CourseDepartment.class)
469
                .include("nameEn", CourseDepartment.class)
470
                .include("nameEn", CourseDepartment.class)
470
                .include("nameEs", CourseDepartment.class)
471
                .include("nameEs", CourseDepartment.class)
471
                .include("nameFr", CourseDepartment.class)
472
                .include("nameFr", CourseDepartment.class)
472
                .include("code", Course.class)
473
                .include("code", Course.class)
473
                .include("validationRole", Course.class)
474
                .include("validationRole", Course.class)
474
 
475
 
475
                .include("courseComission", CourseImpl.class)
476
                .include("courseComission", CourseImpl.class)
476
 
477
 
477
                .include("name", GenericUser.class)
478
                .include("name", GenericUser.class)
478
                .include("email", GenericUser.class)
479
                .include("email", GenericUser.class)
479
                .include("sigesCode", SigesUser.class)
480
                .include("sigesCode", SigesUser.class)
480
                .include("coordinator", Course.class)
481
                .include("coordinator", Course.class)
481
                .create();
482
                .create();
482
 
483
 
483
        return genson;
484
        return genson;
484
    }
485
    }
485
 
486
 
486
 
487
 
487
 
488
 
488
    public List<CourseView> loadCourses() throws ServiceException
489
    public List<CourseView> loadCourses() throws ServiceException
489
    {
490
    {
490
        List<Course> courses = DaoFactory.getCourseDaoImpl().findAllOrderByName();
491
        List<Course> courses = DaoFactory.getCourseDaoImpl().findAllOrderByName();
491
        List<CourseView> courseViews = new ArrayList<CourseView>();
492
        List<CourseView> courseViews = new ArrayList<CourseView>();
492
        for(Course c: courses)
493
        for(Course c: courses)
493
        {
494
        {
494
            CourseView courseView = new CourseView(c);
495
            CourseView courseView = new CourseView(c);
495
            courseViews.add(courseView);
496
            courseViews.add(courseView);
496
        }
497
        }
497
        return courseViews;
498
        return courseViews;
498
    }
499
    }
499
 
500
 
500
    public List<CourseView> loadCoursesImportYearArea(1.5.0/docs/api/java/lang/String.html">String importYear, 1.5.0/docs/api/java/lang/String.html">String area) throws ServiceException
501
    public List<CourseView> loadCoursesImportYearArea(1.5.0/docs/api/java/lang/String.html">String importYear, 1.5.0/docs/api/java/lang/String.html">String area) throws ServiceException
501
    {
502
    {
502
        return loadCoursesImportYearAreaInstitution(importYear, area,null);
503
        return loadCoursesImportYearAreaInstitution(importYear, area,null);
503
    }
504
    }
504
 
505
 
505
    public List<CourseView> loadCoursesImportYearAreaInstitution(1.5.0/docs/api/java/lang/String.html">String importYear, 1.5.0/docs/api/java/lang/String.html">String area,1.5.0/docs/api/java/lang/String.html">String institutionCode) throws ServiceException
506
    public List<CourseView> loadCoursesImportYearAreaInstitution(1.5.0/docs/api/java/lang/String.html">String importYear, 1.5.0/docs/api/java/lang/String.html">String area,1.5.0/docs/api/java/lang/String.html">String institutionCode) throws ServiceException
506
    {
507
    {
507
        List<Course> courses = DaoFactory.getCourseDaoImpl().findAllOrderByName(importYear,area,null,institutionCode);
508
        List<Course> courses = DaoFactory.getCourseDaoImpl().findAllOrderByName(importYear,area,null,institutionCode);
508
        List<CourseView> courseViews = new ArrayList<CourseView>();
509
        List<CourseView> courseViews = new ArrayList<CourseView>();
509
        for(Course c: courses)
510
        for(Course c: courses)
510
        {
511
        {
511
            CourseView courseView = new CourseView(c);
512
            CourseView courseView = new CourseView(c);
512
            courseViews.add(courseView);
513
            courseViews.add(courseView);
513
        }
514
        }
514
        return courseViews;
515
        return courseViews;
515
    }
516
    }
516
 
517
 
517
    public List<CourseView> loadCoursesImportYear() throws ServiceException
518
    public List<CourseView> loadCoursesImportYear() throws ServiceException
518
    {
519
    {
519
        1.5.0/docs/api/java/lang/String.html">String importYearIntranet = DaoFactory.getConfigurationDaoImpl().getInterfaceImportYear();
520
        1.5.0/docs/api/java/lang/String.html">String importYearIntranet = DaoFactory.getConfigurationDaoImpl().getInterfaceImportYear();
520
        List<Course> courses = DaoFactory.getCourseDaoImpl().findAllOrderByName(importYearIntranet);
521
        List<Course> courses = DaoFactory.getCourseDaoImpl().findAllOrderByName(importYearIntranet);
521
        List<CourseView> courseViews = new ArrayList<CourseView>();
522
        List<CourseView> courseViews = new ArrayList<CourseView>();
522
        for(Course c: courses)
523
        for(Course c: courses)
523
        {
524
        {
524
            CourseView courseView = new CourseView(c);
525
            CourseView courseView = new CourseView(c);
525
            courseViews.add(courseView);
526
            courseViews.add(courseView);
526
        }
527
        }
527
        return courseViews;
528
        return courseViews;
528
    }
529
    }
529
    public List<CourseView> loadCoursesImportYearByType(1.5.0/docs/api/java/lang/String.html">String type) throws ServiceException
530
    public List<CourseView> loadCoursesImportYearByType(1.5.0/docs/api/java/lang/String.html">String type) throws ServiceException
530
    {
531
    {
531
        1.5.0/docs/api/java/lang/String.html">String importYearIntranet = DaoFactory.getConfigurationDaoImpl().getInterfaceImportYear();
532
        1.5.0/docs/api/java/lang/String.html">String importYearIntranet = DaoFactory.getConfigurationDaoImpl().getInterfaceImportYear();
532
        List<Course> courses = DaoFactory.getCourseDaoImpl().findAllOrderByNameEvenWithoutCourseUnit(importYearIntranet,null,type);
533
        List<Course> courses = DaoFactory.getCourseDaoImpl().findAllOrderByNameEvenWithoutCourseUnit(importYearIntranet,null,type);
533
        List<CourseView> courseViews = new ArrayList<CourseView>();
534
        List<CourseView> courseViews = new ArrayList<CourseView>();
534
        for(Course c: courses)
535
        for(Course c: courses)
535
        {
536
        {
536
            CourseView courseView = new CourseView(c);
537
            CourseView courseView = new CourseView(c);
537
            courseViews.add(courseView);
538
            courseViews.add(courseView);
538
        }
539
        }
539
        return courseViews;
540
        return courseViews;
540
    }
541
    }
541
 
542
 
542
    public List<CourseView> loadActiveCoursesByType(1.5.0/docs/api/java/lang/String.html">String type) throws ServiceException
543
    public List<CourseView> loadActiveCoursesByType(1.5.0/docs/api/java/lang/String.html">String type) throws ServiceException
543
    {
544
    {
544
        1.5.0/docs/api/java/lang/String.html">String importYearIntranet = DaoFactory.getConfigurationDaoImpl().getInterfaceImportYear();
545
        1.5.0/docs/api/java/lang/String.html">String importYearIntranet = DaoFactory.getConfigurationDaoImpl().getInterfaceImportYear();
545
        List<Course> courses = DaoFactory.getCourseDaoImpl().findAllActiveOrderByNameEvenWithoutCourseUnit(importYearIntranet,null,type);
546
        List<Course> courses = DaoFactory.getCourseDaoImpl().findAllActiveOrderByNameEvenWithoutCourseUnit(importYearIntranet,null,type);
546
        List<CourseView> courseViews = new ArrayList<CourseView>();
547
        List<CourseView> courseViews = new ArrayList<CourseView>();
547
        for(Course c: courses)
548
        for(Course c: courses)
548
        {
549
        {
549
            CourseView courseView = new CourseView(c);
550
            CourseView courseView = new CourseView(c);
550
            courseViews.add(courseView);
551
            courseViews.add(courseView);
551
        }
552
        }
552
        return courseViews;
553
        return courseViews;
553
    }
554
    }
554
 
555
 
555
 
556
 
556
 
557
 
557
    /** JSON API **/
558
    /** JSON API **/
558
    /**
559
    /**
559
     * @SERVICE@
560
     * @SERVICE@
560
     *
561
     *
561
     * @param school
562
     * @param school
562
     * @param type
563
     * @param type
563
     * @return
564
     * @return
564
     * @throws JSONException
565
     * @throws JSONException
565
     */
566
     */
566
    public JSONObject getActiveCoursesForJsonApi(1.5.0/docs/api/java/lang/String.html">String school,1.5.0/docs/api/java/lang/String.html">String type) throws JSONException {
567
    public JSONObject getActiveCoursesForJsonApi(1.5.0/docs/api/java/lang/String.html">String school,1.5.0/docs/api/java/lang/String.html">String type) throws JSONException {
567
        1.5.0/docs/api/java/lang/String.html">String institutionalCode = null;
568
        1.5.0/docs/api/java/lang/String.html">String institutionalCode = null;
568
        1.5.0/docs/api/java/lang/String.html">String degree = null;
569
        1.5.0/docs/api/java/lang/String.html">String degree = null;
569
        if(school != null && school.length() > 0)
570
        if(school != null && school.length() > 0)
570
            institutionalCode = ConfigProperties.getProperty("institution.code.prefix.inverse." + school);
571
            institutionalCode = ConfigProperties.getProperty("institution.code.prefix.inverse." + school);
571
 
572
 
572
        if(type != null && type.length() > 0)
573
        if(type != null && type.length() > 0)
573
            degree = ConfigProperties.getProperty("course.inverse." + type);
574
            degree = ConfigProperties.getProperty("course.inverse." + type);
574
 
575
 
575
        List<Course> courses = DaoFactory.getCourseDaoImpl().findAllShowStudiesPlanCoursesOrderByNameEvenWithoutCourseUnit(institutionalCode, degree);
576
        List<Course> courses = DaoFactory.getCourseDaoImpl().findAllShowStudiesPlanCoursesOrderByNameEvenWithoutCourseUnit(institutionalCode, degree);
576
        JSONObject coursesResponse = new JSONObject();
577
        JSONObject coursesResponse = new JSONObject();
577
 
578
 
578
        JSONArray coursesArray = new JSONArray();
579
        JSONArray coursesArray = new JSONArray();
579
        for(Course cAux: courses)
580
        for(Course cAux: courses)
580
        {
581
        {
581
            CourseImpl c = (CourseImpl) DaoFactory.getCourseDaoImpl().narrow(cAux);
582
            CourseImpl c = (CourseImpl) DaoFactory.getCourseDaoImpl().narrow(cAux);
582
            JSONObject courseJson = new JSONObject();
583
            JSONObject courseJson = new JSONObject();
583
            courseJson.put("name",c.getName());
584
            courseJson.put("name",c.getName());
584
            courseJson.put("code",c.getCode());
585
            courseJson.put("code",c.getCode());
585
            courseJson.put("schoolForJsonApi",c.getSchoolForJsonApi());
586
            courseJson.put("schoolForJsonApi",c.getSchoolForJsonApi());
586
            courseJson.put("degreeForJsonApi",c.getDegreeForJsonApi());
587
            courseJson.put("degreeForJsonApi",c.getDegreeForJsonApi());
587
            courseJson.put("degreeForJsonApiEn",c.getDegreeForJsonApiEn());
588
            courseJson.put("degreeForJsonApiEn",c.getDegreeForJsonApiEn());
588
            courseJson.put("degreeForJsonApiEs",c.getDegreeForJsonApiEs());
589
            courseJson.put("degreeForJsonApiEs",c.getDegreeForJsonApiEs());
589
            courseJson.put("degreeForJsonApiFr",c.getDegreeForJsonApiFr());
590
            courseJson.put("degreeForJsonApiFr",c.getDegreeForJsonApiFr());
590
            courseJson.put("statusForJsonApi",c.getStatusForJsonApi());
591
            courseJson.put("statusForJsonApi",c.getStatusForJsonApi());
591
            courseJson.put("getDetailedInfoUrl","/wsjson/api?service=getCourse&code=" + c.getCode());
592
            courseJson.put("getDetailedInfoUrl","/wsjson/api?service=getCourse&code=" + c.getCode());
592
            coursesArray.put(courseJson);
593
            coursesArray.put(courseJson);
593
 
594
 
594
        }
595
        }
595
        coursesResponse.put("status","ok");
596
        coursesResponse.put("status","ok");
596
        coursesResponse.put("courses",coursesArray);
597
        coursesResponse.put("courses",coursesArray);
597
 
598
 
598
        return coursesResponse;
599
        return coursesResponse;
599
    }
600
    }
600
 
601
 
601
    /**
602
    /**
602
     *
603
     *
603
     * * Serviço invocado para obter o JSON de um curso
604
     * * Serviço invocado para obter o JSON de um curso
604
     * O JSON tem dois campos o courseInfo e o plano de estudos colocados separadamente
605
     * O JSON tem dois campos o courseInfo e o plano de estudos colocados separadamente
605
     *
606
     *
606
     * Atenção o plano de estudos usado é o ultimo considerando o seu ID
607
     * Atenção o plano de estudos usado é o ultimo considerando o seu ID
607
     *  Nota: O plano de Estudos é uma classe persistente que tem apenas versão e descrição
608
     *  Nota: O plano de Estudos é uma classe persistente que tem apenas versão e descrição
608
     *  deverá ter como campo o XML e o JSON já gerados do plano de estudos que comporta
609
     *  deverá ter como campo o XML e o JSON já gerados do plano de estudos que comporta
609
     *
610
     *
610
     * //TODO REVER
611
     * //TODO REVER
611
     * @param code
612
     * @param code
612
     * @return
613
     * @return
613
     * @throws JSONException
614
     * @throws JSONException
614
     * @throws IOException
615
     * @throws IOException
615
     * @throws JAXBException
616
     * @throws JAXBException
616
     */
617
     */
617
    public JSONObject getCourseDetailForJsonApi(1.5.0/docs/api/java/lang/String.html">String code) throws JSONException, 1.5.0/docs/api/java/io/IOException.html">IOException, JAXBException {
618
    public JSONObject getCourseDetailForJsonApi(1.5.0/docs/api/java/lang/String.html">String code) throws JSONException, 1.5.0/docs/api/java/io/IOException.html">IOException, JAXBException {
618
 
619
 
619
        Course course = DaoFactory.getCourseDaoImpl().findCourseByCode(code);
620
        Course course = DaoFactory.getCourseDaoImpl().findCourseByCode(code);
620
 
621
 
621
 
622
 
622
        JSONObject coursesResponse = new JSONObject();
623
        JSONObject coursesResponse = new JSONObject();
623
 
624
 
624
        generateCourseJson(course);
625
        generateCourseJson(course);
625
 
626
 
626
        //if(course.toJson() == null)
627
        //if(course.toJson() == null)
627
        //{
628
        //{
628
        //    logger.info("status JSON NOT EXIST FOR STUDIES PLAN IN THIS COURSE, will generate");
629
        //    logger.info("status JSON NOT EXIST FOR STUDIES PLAN IN THIS COURSE, will generate");
629
        //    new CoursesService().generateCourseJson(course);
630
        //    new CoursesService().generateCourseJson(course);
630
        //}
631
        //}
631
 
632
 
632
        if(course.getJson() != null)
633
        if(course.getJson() != null)
633
        {
634
        {
634
            JSONObject courseObj = new JSONObject(course.getJson());
635
            JSONObject courseObj = new JSONObject(course.getJson());
635
            coursesResponse.put("courseInfo",courseObj);
636
            coursesResponse.put("courseInfo",courseObj);
636
            //Este caso apenas se dá se o plano nunca tiver sido editado ou sincronizado
637
            //Este caso apenas se dá se o plano nunca tiver sido editado ou sincronizado
637
            //Nesse caso o sistema irá tentar obtê-lo da stream do repositorio
638
            //Nesse caso o sistema irá tentar obtê-lo da stream do repositorio
638
            if(course.getStudiesPlans() == null || course.getStudiesPlans().size() == 0)
639
            if(course.getStudiesPlans() == null || course.getStudiesPlans().size() == 0)
639
            {
640
            {
640
                logger.info("status JSON NOT EXIST FOR STUDIES PLAN IN THIS COURSE, will try generate from studies plan OLD Stream");
641
                logger.info("status JSON NOT EXIST FOR STUDIES PLAN IN THIS COURSE, will try generate from studies plan OLD Stream");
641
                UserSession userSession = DomainObjectFactory.createUserSessionImpl();
642
                UserSession userSession = DomainObjectFactory.createUserSessionImpl();
642
                userSession.setUser(DaoFactory.getUserDaoImpl().load(new 1.5.0/docs/api/java/lang/Long.html">Long(1)));
643
                userSession.setUser(DaoFactory.getUserDaoImpl().load(new 1.5.0/docs/api/java/lang/Long.html">Long(1)));
643
                new CoursesService().generateXmlJaxbStudiesPlanVersionFromRepositoryOldPlanStream(userSession, course, false, null);
644
                new CoursesService().generateXmlJaxbStudiesPlanVersionFromRepositoryOldPlanStream(userSession, course, false, null);
644
            }
645
            }
645
 
646
 
646
            if(course.getStudiesPlans() != null )
647
            if(course.getStudiesPlans() != null )
647
            {
648
            {
648
                CourseStudiesPlan studiesPlan = course.getStudiesPlans().iterator().next();
649
                CourseStudiesPlan studiesPlan = course.getStudiesPlans().iterator().next();
649
                JSONObject studiesPlanObj;
650
                JSONObject studiesPlanObj;
650
                if(studiesPlan.getJson() != null)
651
                if(studiesPlan.getJson() != null)
651
                {
652
                {
652
                    CursoImpl c = CursoImpl.loadFromJson(studiesPlan.getJson());
653
                    CursoImpl c = CursoImpl.loadFromJson(studiesPlan.getJson());
653
                    autoFillTotalHorasContacto(c);
654
                    autoFillTotalHorasContacto(c);
654
                    studiesPlanObj = c.toJsonObjectJsonApiWS();
655
                    studiesPlanObj = c.toJsonObjectJsonApiWS();
655
                    studiesPlanObj.put("version",studiesPlan.getVersion());
656
                    studiesPlanObj.put("version",studiesPlan.getVersion());
656
                    coursesResponse.put("courseStudiesPlan",studiesPlanObj);
657
                    coursesResponse.put("courseStudiesPlan",studiesPlanObj);
657
                }
658
                }
658
                else
659
                else
659
                {
660
                {
660
                    studiesPlanObj = new JSONObject();
661
                    studiesPlanObj = new JSONObject();
661
                    studiesPlanObj.put("fault","Zero contents for this version");
662
                    studiesPlanObj.put("fault","Zero contents for this version");
662
                    studiesPlanObj.put("version",studiesPlan.getVersion());
663
                    studiesPlanObj.put("version",studiesPlan.getVersion());
663
                    coursesResponse.put("courseStudiesPlan",studiesPlanObj);
664
                    coursesResponse.put("courseStudiesPlan",studiesPlanObj);
664
                }
665
                }
665
                coursesResponse.put("courseStudiesPlan",studiesPlanObj);
666
                coursesResponse.put("courseStudiesPlan",studiesPlanObj);
666
 
667
 
667
            }
668
            }
668
            else
669
            else
669
            {
670
            {
670
                coursesResponse.put("status","JSON NOT EXIST FOR STUDIES PLAN IN THIS COURSE");
671
                coursesResponse.put("status","JSON NOT EXIST FOR STUDIES PLAN IN THIS COURSE");
671
            }
672
            }
672
        }
673
        }
673
        else
674
        else
674
        {
675
        {
675
            coursesResponse.put("status","JSON NOT EXIST FOR COURSE, PLEASE OPEN AND SAVE COURSE IN ADMINISTRATION");
676
            coursesResponse.put("status","JSON NOT EXIST FOR COURSE, PLEASE OPEN AND SAVE COURSE IN ADMINISTRATION");
676
        }
677
        }
677
        return coursesResponse;
678
        return coursesResponse;
678
    }
679
    }
679
 
680
 
680
    /**
681
    /**
681
     * @SERVICE@
682
     * @SERVICE@
682
     *
683
     *
683
     * @param code
684
     * @param code
684
     * @return
685
     * @return
685
     * @throws JSONException
686
     * @throws JSONException
686
     */
687
     */
687
    public 1.5.0/docs/api/java/lang/String.html">String getCourseStudiesPlanXml(1.5.0/docs/api/java/lang/String.html">String code,1.5.0/docs/api/java/lang/String.html">String renew) throws JSONException {
688
    public 1.5.0/docs/api/java/lang/String.html">String getCourseStudiesPlanXml(1.5.0/docs/api/java/lang/String.html">String code,1.5.0/docs/api/java/lang/String.html">String renew) throws JSONException {
688
 
689
 
689
        Course course = DaoFactory.getCourseDaoImpl().findCourseByCode(code);
690
        Course course = DaoFactory.getCourseDaoImpl().findCourseByCode(code);
690
 
691
 
691
        if(renew != null || course.getStudiesPlans() == null || course.getStudiesPlans().size() == 0)
692
        if(renew != null || course.getStudiesPlans() == null || course.getStudiesPlans().size() == 0)
692
        {
693
        {
693
            logger.info("status JSON NOT EXIST FOR STUDIES PLAN IN THIS COURSE, will generate");
694
            logger.info("status JSON NOT EXIST FOR STUDIES PLAN IN THIS COURSE, will generate");
694
            UserSession userSession = DomainObjectFactory.createUserSessionImpl();
695
            UserSession userSession = DomainObjectFactory.createUserSessionImpl();
695
            userSession.setUser(DaoFactory.getUserDaoImpl().load(new 1.5.0/docs/api/java/lang/Long.html">Long(1)));
696
            userSession.setUser(DaoFactory.getUserDaoImpl().load(new 1.5.0/docs/api/java/lang/Long.html">Long(1)));
696
            try {
697
            try {
697
                generateXmlJaxbStudiesPlanVersionFromRepositoryOldPlanStream(userSession, course, false, null);
698
                generateXmlJaxbStudiesPlanVersionFromRepositoryOldPlanStream(userSession, course, false, null);
698
            } catch (JAXBException e) {
699
            } catch (JAXBException e) {
699
                logger.error(e,e);
700
                logger.error(e,e);
700
                return "<error>" + e.toString() + ". see log for details</error>";
701
                return "<error>" + e.toString() + ". see log for details</error>";
701
            }
702
            }
702
        }
703
        }
703
       
704
 
704
        if(course.getStudiesPlans() != null && course.getStudiesPlans().size() > 0)
705
        if(course.getStudiesPlans() != null && course.getStudiesPlans().size() > 0)
705
        {
706
        {
706
            return course.getStudiesPlans().iterator().next().getXml();
707
            return course.getStudiesPlans().iterator().next().getXml();
707
        }
708
        }
708
        return "<error>Does not exixt</error>";
709
        return "<error>Does not exixt</error>";
709
 
710
 
710
    }
711
    }
711
 
712
 
712
 
713
 
713
    /**
714
    /**
714
     * @SERVICE@
715
     * @SERVICE@
715
     *
716
     *
716
     * @param systemUrl
717
     * @param systemUrl
717
     * @param setActive
718
     * @param setActive
718
     * @return
719
     * @return
719
     * @throws IOException
720
     * @throws IOException
720
     * @throws JSONException
721
     * @throws JSONException
721
     * @throws JAXBException
722
     * @throws JAXBException
722
     */
723
     */
723
 
724
 
724
    public 1.5.0/docs/api/java/lang/String.html">String sincronizeCoursesStudiesPlans(1.5.0/docs/api/java/lang/String.html">String systemUrl,boolean setActive,UserSession sess) throws 1.5.0/docs/api/java/io/IOException.html">IOException, JSONException, JAXBException {
725
    public 1.5.0/docs/api/java/lang/String.html">String sincronizeCoursesStudiesPlans(1.5.0/docs/api/java/lang/String.html">String systemUrl,boolean setActive,UserSession sess) throws 1.5.0/docs/api/java/io/IOException.html">IOException, JSONException, JAXBException {
725
 
726
 
726
        1.5.0/docs/api/java/lang/StringBuilder.html">StringBuilder log = new 1.5.0/docs/api/java/lang/StringBuilder.html">StringBuilder();
727
        1.5.0/docs/api/java/lang/StringBuilder.html">StringBuilder log = new 1.5.0/docs/api/java/lang/StringBuilder.html">StringBuilder();
727
        1.5.0/docs/api/java/net/URL.html">URL url = new 1.5.0/docs/api/java/net/URL.html">URL(systemUrl + "/wsjson/api?service=listCourses");
728
        1.5.0/docs/api/java/net/URL.html">URL url = new 1.5.0/docs/api/java/net/URL.html">URL(systemUrl + "/wsjson/api?service=listCourses");
728
        5+0%2Fdocs%2Fapi+InputStream">InputStream is = url.openStream();
729
        5+0%2Fdocs%2Fapi+InputStream">InputStream is = url.openStream();
729
        1.5.0/docs/api/java/lang/String.html">String str = StreamsUtils.readString(is);
730
        1.5.0/docs/api/java/lang/String.html">String str = StreamsUtils.readString(is);
730
        JSONObject obj = new JSONObject(str);
731
        JSONObject obj = new JSONObject(str);
731
        JSONArray courses = obj.getJSONArray("courses");
732
        JSONArray courses = obj.getJSONArray("courses");
732
        for(int i = 0; i < courses.length();i++)
733
        for(int i = 0; i < courses.length();i++)
733
        {
734
        {
734
            1.5.0/docs/api/java/lang/String.html">String code = "";
735
            1.5.0/docs/api/java/lang/String.html">String code = "";
735
            try{
736
            try{
736
                JSONObject course = courses.getJSONObject(i);
737
                JSONObject course = courses.getJSONObject(i);
737
                code = course.getString("code");
738
                code = course.getString("code");
738
                Course c = DaoFactory.getCourseDaoImpl().findCourseByCode(code);
739
                Course c = DaoFactory.getCourseDaoImpl().findCourseByCode(code);
739
                if(c == null)
740
                if(c == null)
740
                {
741
                {
741
                    1.5.0/docs/api/java/lang/String.html">String msg = "SKIPING - Course " + code + " " + course.getString("name") + " does not exist in this system";
742
                    1.5.0/docs/api/java/lang/String.html">String msg = "SKIPING - Course " + code + " " + course.getString("name") + " does not exist in this system";
742
                    log.append("<info>" + msg+"</info>");
743
                    log.append("<info>" + msg+"</info>");
743
                    logger.info(msg);
744
                    logger.info(msg);
744
                }
745
                }
745
                else
746
                else
746
                {
747
                {
747
                    1.5.0/docs/api/java/lang/String.html">String msg = "UPDATING - Course " + code + " " + course.getString("name") + " exist in this system";
748
                    1.5.0/docs/api/java/lang/String.html">String msg = "UPDATING - Course " + code + " " + course.getString("name") + " exist in this system";
748
                    log.append("<info>" + msg+"</info>");
749
                    log.append("<info>" + msg+"</info>");
749
                    logger.info(msg);
750
                    logger.info(msg);
750
 
751
 
751
                    //#############UPDATING Course Comission Members
752
                    //#############UPDATING Course Comission Members
752
                    updateCourseComissionMembersAndCourseInfo(systemUrl, code, c);
753
                    updateCourseComissionMembersAndCourseInfo(systemUrl, code, c);
753
 
754
 
754
                    //#############UPDATING STUDIES PLAN
755
                    //#############UPDATING STUDIES PLAN
755
                    updateStudiesPlanFromRemoteSystem(systemUrl, setActive, log, course, code, c);
756
                    updateStudiesPlanFromRemoteSystem(systemUrl, setActive, log, course, code, c);
756
 
757
 
757
 
758
 
758
                }
759
                }
759
            }
760
            }
760
            catch(1.5.0/docs/api/java/lang/Throwable.html">Throwable e)
761
            catch(1.5.0/docs/api/java/lang/Throwable.html">Throwable e)
761
            {
762
            {
762
                logger.error("UPDATE COURSE: " + i + " code: " + code + " FAILED");
763
                logger.error("UPDATE COURSE: " + i + " code: " + code + " FAILED");
763
                logger.error(e,e);
764
                logger.error(e,e);
764
            }
765
            }
765
        }
766
        }
766
        return log.toString();
767
        return log.toString();
767
 
768
 
768
    }
769
    }
769
 
770
 
770
    private void updateStudiesPlanFromRemoteSystem(1.5.0/docs/api/java/lang/String.html">String systemUrl, boolean setActive, 1.5.0/docs/api/java/lang/StringBuilder.html">StringBuilder log, JSONObject course, 1.5.0/docs/api/java/lang/String.html">String code, Course c) throws 1.5.0/docs/api/java/io/IOException.html">IOException, JSONException, JAXBException {
771
    private void updateStudiesPlanFromRemoteSystem(1.5.0/docs/api/java/lang/String.html">String systemUrl, boolean setActive, 1.5.0/docs/api/java/lang/StringBuilder.html">StringBuilder log, JSONObject course, 1.5.0/docs/api/java/lang/String.html">String code, Course c) throws 1.5.0/docs/api/java/io/IOException.html">IOException, JSONException, JAXBException {
771
        1.5.0/docs/api/java/lang/String.html">String msg;
772
        1.5.0/docs/api/java/lang/String.html">String msg;
772
        5+0%2Fdocs%2Fapi+InputStream">InputStream stream = new 1.5.0/docs/api/java/net/URL.html">URL(systemUrl + "/wsjson/api?service=getStudiesPlanXml&code=" + code + "&renew=true").openStream();
773
        5+0%2Fdocs%2Fapi+InputStream">InputStream stream = new 1.5.0/docs/api/java/net/URL.html">URL(systemUrl + "/wsjson/api?service=getStudiesPlanXml&code=" + code + "&renew=true").openStream();
773
        1.5.0/docs/api/java/lang/String.html">String studiesPlan = StreamsUtils.readString(stream);
774
        1.5.0/docs/api/java/lang/String.html">String studiesPlan = StreamsUtils.readString(stream);
774
        int len = studiesPlan.length();
775
        int len = studiesPlan.length();
775
        if(studiesPlan == null || studiesPlan.trim().length() == 0 || studiesPlan.contains("<error>"))
776
        if(studiesPlan == null || studiesPlan.trim().length() == 0 || studiesPlan.contains("<error>"))
776
        {
777
        {
777
            msg = "Course " + code + " " + course.getString("name") + " dont has studies plan";
778
            msg = "Course " + code + " " + course.getString("name") + " dont has studies plan";
778
            log.append("<warn>" + msg+"</warn>");
779
            log.append("<warn>" + msg+"</warn>");
779
            logger.warn(msg);
780
            logger.warn(msg);
780
        }
781
        }
781
        else
782
        else
782
        {
783
        {
783
            msg = "Found studies plan for "  + code + " " + course.getString("name") + " will update ";
784
            msg = "Found studies plan for "  + code + " " + course.getString("name") + " will update ";
784
            log.append("<info>" + msg+"</info>");
785
            log.append("<info>" + msg+"</info>");
785
            logger.info(msg);
786
            logger.info(msg);
786
            if(setActive)
787
            if(setActive)
787
            {
788
            {
788
                msg = "Setting course to active";
789
                msg = "Setting course to active";
789
                log.append("<info>" + msg+"</info>");
790
                log.append("<info>" + msg+"</info>");
790
                logger.info(msg);
791
                logger.info(msg);
791
                c.setStatus(true);
792
                c.setStatus(true);
792
            }
793
            }
793
            //System.out.println(studiesPlan);
794
            //System.out.println(studiesPlan);
794
            msg = "GENERATING COURSE JSON ....";
795
            msg = "GENERATING COURSE JSON ....";
795
            log.append("<info>" + msg+"</info>");
796
            log.append("<info>" + msg+"</info>");
796
            logger.info(msg);
797
            logger.info(msg);
797
            new CoursesService().generateCourseJson(c);
798
            new CoursesService().generateCourseJson(c);
798
 
799
 
799
            msg="GENERATING COURSE STUDIES PLAN JSON ....";
800
            msg="GENERATING COURSE STUDIES PLAN JSON ....";
800
            log.append("<info>" + msg+"</info>");
801
            log.append("<info>" + msg+"</info>");
801
            logger.info(msg);
802
            logger.info(msg);
802
            stream.close();
803
            stream.close();
803
            stream = new 1.5.0/docs/api/java/net/URL.html">URL(systemUrl + "/wsjson/api?service=getStudiesPlanXml&code=" + code).openStream();
804
            stream = new 1.5.0/docs/api/java/net/URL.html">URL(systemUrl + "/wsjson/api?service=getStudiesPlanXml&code=" + code).openStream();
804
            UserSession userSession = DomainObjectFactory.createUserSessionImpl();
805
            UserSession userSession = DomainObjectFactory.createUserSessionImpl();
805
            userSession.setUser(DaoFactory.getUserDaoImpl().load(new 1.5.0/docs/api/java/lang/Long.html">Long(1)));
806
            userSession.setUser(DaoFactory.getUserDaoImpl().load(new 1.5.0/docs/api/java/lang/Long.html">Long(1)));
806
            new CoursesService().uploadStudiesPlan(stream, "curso_" + code + ".xml", len,"appication/xml", userSession,c,true,systemUrl);
807
            new CoursesService().uploadStudiesPlan(stream, "curso_" + code + ".xml", len,"appication/xml", userSession,c,true,systemUrl);
807
        }
808
        }
808
    }
809
    }
809
 
810
 
810
 
811
 
811
    /**
812
    /**
812
     * Update courseComission Members
813
     * Update courseComission Members
813
     * @param systemUrl
814
     * @param systemUrl
814
     * @param code
815
     * @param code
815
     * @param c
816
     * @param c
816
     * @throws IOException
817
     * @throws IOException
817
     * @throws JSONException
818
     * @throws JSONException
818
     */
819
     */
819
    private void updateCourseComissionMembersAndCourseInfo(1.5.0/docs/api/java/lang/String.html">String systemUrl, 1.5.0/docs/api/java/lang/String.html">String code, Course c) throws 1.5.0/docs/api/java/io/IOException.html">IOException, JSONException
820
    private void updateCourseComissionMembersAndCourseInfo(1.5.0/docs/api/java/lang/String.html">String systemUrl, 1.5.0/docs/api/java/lang/String.html">String code, Course c) throws 1.5.0/docs/api/java/io/IOException.html">IOException, JSONException
820
    {
821
    {
821
 
822
 
822
        1.5.0/docs/api/java/net/URL.html">URL urlCourseDetails = new 1.5.0/docs/api/java/net/URL.html">URL(systemUrl + "/wsjson/api?service=getCourse&code=" + code);
823
        1.5.0/docs/api/java/net/URL.html">URL urlCourseDetails = new 1.5.0/docs/api/java/net/URL.html">URL(systemUrl + "/wsjson/api?service=getCourse&code=" + code);
823
        5+0%2Fdocs%2Fapi+InputStream">InputStream isCourseDetails = urlCourseDetails.openStream();
824
        5+0%2Fdocs%2Fapi+InputStream">InputStream isCourseDetails = urlCourseDetails.openStream();
824
        1.5.0/docs/api/java/lang/String.html">String strCourseDetails = StreamsUtils.readString(isCourseDetails);
825
        1.5.0/docs/api/java/lang/String.html">String strCourseDetails = StreamsUtils.readString(isCourseDetails);
825
        JSONObject objCourseDetails = new JSONObject(strCourseDetails);
826
        JSONObject objCourseDetails = new JSONObject(strCourseDetails);
826
 
827
 
827
        //DEPARTMENT
828
        //DEPARTMENT
828
        JSONObject department = objCourseDetails.getJSONObject("courseInfo").getJSONObject("department");
829
        JSONObject department = objCourseDetails.getJSONObject("courseInfo").getJSONObject("department");
829
        if(department != null)
830
        if(department != null)
830
        {
831
        {
831
            1.5.0/docs/api/java/lang/String.html">String sigla = department.getString("sigla");
832
            1.5.0/docs/api/java/lang/String.html">String sigla = department.getString("sigla");
832
            if(sigla != null)
833
            if(sigla != null)
833
            {
834
            {
834
                CourseDepartment department1 =  DaoFactory.getCourseDepartmentDaoImpl().findBySigla(sigla);
835
                CourseDepartment department1 =  DaoFactory.getCourseDepartmentDaoImpl().findBySigla(sigla);
835
                if(department1 != null)
836
                if(department1 != null)
836
                {
837
                {
837
                    c.setDepartment(department1);
838
                    c.setDepartment(department1);
838
                }
839
                }
839
            }
840
            }
840
        }
841
        }
841
 
842
 
842
 
843
 
843
        1.5.0/docs/api/java/lang/String.html">String validationRole = objCourseDetails.getJSONObject("courseInfo").getString("validationRole");
844
        1.5.0/docs/api/java/lang/String.html">String validationRole = objCourseDetails.getJSONObject("courseInfo").getString("validationRole");
844
 
845
 
845
 
846
 
846
 
847
 
847
 
848
 
848
        if(validationRole == null)
849
        if(validationRole == null)
849
        {
850
        {
850
            logger.info("validationRole is not defined");
851
            logger.info("validationRole is not defined");
851
        }
852
        }
852
        else
853
        else
853
        {
854
        {
854
            logger.info("found validationRole: " + validationRole);
855
            logger.info("found validationRole: " + validationRole);
855
            c.setValidationRole(validationRole);
856
            c.setValidationRole(validationRole);
856
 
857
 
857
            JSONObject coordinator = objCourseDetails.getJSONObject("courseInfo").getJSONObject("coordinator");
858
            JSONObject coordinator = objCourseDetails.getJSONObject("courseInfo").getJSONObject("coordinator");
858
            JSONArray courseComission = objCourseDetails.getJSONObject("courseInfo").getJSONArray("courseComission");
859
            JSONArray courseComission = objCourseDetails.getJSONObject("courseInfo").getJSONArray("courseComission");
859
 
860
 
860
            Teacher coordinatorPersistent = findPersonFromCourseDetails(coordinator);
861
            Teacher coordinatorPersistent = findPersonFromCourseDetails(coordinator);
861
            if(coordinatorPersistent == null)
862
            if(coordinatorPersistent == null)
862
            {
863
            {
863
                logger.warn("Coordinator does not exist in this system ");
864
                logger.warn("Coordinator does not exist in this system ");
864
            }
865
            }
865
            else
866
            else
866
            {
867
            {
867
                c.setCoordinator(coordinatorPersistent);
868
                c.setCoordinator(coordinatorPersistent);
868
            }
869
            }
869
 
870
 
870
            List<User> users = DaoFactory.getUserDaoImpl().loadRoleUsers(validationRole);
871
            List<User> users = DaoFactory.getUserDaoImpl().loadRoleUsers(validationRole);
871
            logger.info("Encontrados " + users.size() + " docentes com o papel de comissao " + validationRole + " vai remover");
872
            logger.info("Encontrados " + users.size() + " docentes com o papel de comissao " + validationRole + " vai remover");
872
            for(User u: users)
873
            for(User u: users)
873
            {
874
            {
874
                logger.info("Removendo role a " + u.getName());
875
                logger.info("Removendo role a " + u.getName());
875
                u.removeRole(validationRole);
876
                u.removeRole(validationRole);
876
            }
877
            }
877
 
878
 
878
            for(int j = 0 ; j < courseComission.length(); j++)
879
            for(int j = 0 ; j < courseComission.length(); j++)
879
            {
880
            {
880
                JSONObject memberComission = courseComission.getJSONObject(j);
881
                JSONObject memberComission = courseComission.getJSONObject(j);
881
                Teacher memberPersistent = findPersonFromCourseDetails(memberComission);
882
                Teacher memberPersistent = findPersonFromCourseDetails(memberComission);
882
                if(memberPersistent == null)
883
                if(memberPersistent == null)
883
                {
884
                {
884
                    logger.info("Member does not exist in this system ");
885
                    logger.info("Member does not exist in this system ");
885
                }
886
                }
886
                else
887
                else
887
                {
888
                {
888
                    logger.info("Adding role of course comission member");
889
                    logger.info("Adding role of course comission member");
889
                    if(!memberPersistent.hasRole(validationRole))
890
                    if(!memberPersistent.hasRole(validationRole))
890
                    {
891
                    {
891
                        memberPersistent.addRole(validationRole);
892
                        memberPersistent.addRole(validationRole);
892
                    }
893
                    }
893
                }
894
                }
894
            }
895
            }
895
        }
896
        }
896
    }
897
    }
897
 
898
 
898
    private Teacher findPersonFromCourseDetails(JSONObject coordinator) {
899
    private Teacher findPersonFromCourseDetails(JSONObject coordinator) {
899
        int code;
900
        int code;
900
        try {
901
        try {
901
            if(coordinator.has("sigesCode"))
902
            if(coordinator.has("sigesCode"))
902
            {
903
            {
903
                code = coordinator.getInt("sigesCode");
904
                code = coordinator.getInt("sigesCode");
904
            }
905
            }
905
            else
906
            else
906
            {
907
            {
907
                logger.warn("there is no sigesCode for this person " + coordinator.toString());
908
                logger.warn("there is no sigesCode for this person " + coordinator.toString());
908
                return null;
909
                return null;
909
            }
910
            }
910
        } catch (JSONException e){
911
        } catch (JSONException e){
911
            return null;
912
            return null;
912
        } catch (1.5.0/docs/api/java/lang/NumberFormatException.html">NumberFormatException e){
913
        } catch (1.5.0/docs/api/java/lang/NumberFormatException.html">NumberFormatException e){
913
            return null;
914
            return null;
914
        }
915
        }
915
        return DaoFactory.getTeacherDaoImpl().loadBySigesCode(code);
916
        return DaoFactory.getTeacherDaoImpl().loadBySigesCode(code);
916
    }
917
    }
917
 
918
 
918
 
919
 
919
 
920
 
920
    /*
921
    /*
921
     * Studies Plans Administration Services
922
     * Studies Plans Administration Services
922
     *
923
     *
923
     */
924
     */
924
    public void addNewStudiesPlan(long courseId,CourseStudiesPlan studiesPlan,UserSession session)
925
    public void addNewStudiesPlan(long courseId,CourseStudiesPlan studiesPlan,UserSession session)
925
    {
926
    {
926
        Course c = DaoFactory.getCourseDaoImpl().load(courseId);
927
        Course c = DaoFactory.getCourseDaoImpl().load(courseId);
927
        studiesPlan.setCourse(c);
928
        studiesPlan.setCourse(c);
928
        c.getStudiesPlans().add(studiesPlan);
929
        c.getStudiesPlans().add(studiesPlan);
929
        DaoFactory.getCourseStudiesPlanDaoImpl().save(studiesPlan);
930
        DaoFactory.getCourseStudiesPlanDaoImpl().save(studiesPlan);
930
    }
931
    }
931
 
932
 
932
    public CourseStudiesPlanImpl cloneVersionFrom(long sourcePlanId, long targetPlanId, long courseId, UserSession session)
933
    public CourseStudiesPlanImpl cloneVersionFrom(long sourcePlanId, long targetPlanId, long courseId, UserSession session)
933
    {
934
    {
934
        Course course = DaoFactory.getCourseDaoImpl().load(courseId);
935
        Course course = DaoFactory.getCourseDaoImpl().load(courseId);
935
        CourseStudiesPlan source = null;
936
        CourseStudiesPlan source = null;
936
        CourseStudiesPlan target = null;
937
        CourseStudiesPlan target = null;
937
        for(CourseStudiesPlan plan: course.getStudiesPlans())
938
        for(CourseStudiesPlan plan: course.getStudiesPlans())
938
        {
939
        {
939
            if(plan.getId() == sourcePlanId)
940
            if(plan.getId() == sourcePlanId)
940
                source = plan;
941
                source = plan;
941
            else if(plan.getId() == targetPlanId)
942
            else if(plan.getId() == targetPlanId)
942
                target = plan;
943
                target = plan;
943
        }
944
        }
944
        target.setXml(source.getXml());
945
        target.setXml(source.getXml());
945
        target.setJson(source.getJson());
946
        target.setJson(source.getJson());
946
        return (CourseStudiesPlanImpl) DaoFactory.getCourseStudiesPlanDaoImpl().narrow(target);
947
        return (CourseStudiesPlanImpl) DaoFactory.getCourseStudiesPlanDaoImpl().narrow(target);
947
    }
948
    }
948
 
949
 
949
    public Curso loadCursoPlanoFromXml(1.5.0/docs/api/java/lang/String.html">String xml)
950
    public Curso loadCursoPlanoFromXml(1.5.0/docs/api/java/lang/String.html">String xml)
950
    {
951
    {
951
        try {
952
        try {
952
            if(xml != null)
953
            if(xml != null)
953
            {
954
            {
954
                JAXBContext jc = JAXBContext.newInstance(Curso.class);
955
                JAXBContext jc = JAXBContext.newInstance(Curso.class);
955
                Unmarshaller unmarshaller = jc.createUnmarshaller();
956
                Unmarshaller unmarshaller = jc.createUnmarshaller();
956
                Curso curso = (Curso) unmarshaller.unmarshal(new 1.5.0/docs/api/java/io/StringReader.html">StringReader(xml));
957
                Curso curso = (Curso) unmarshaller.unmarshal(new 1.5.0/docs/api/java/io/StringReader.html">StringReader(xml));
957
                return curso;
958
                return curso;
958
            }
959
            }
959
            return null;
960
            return null;
960
        } catch (JAXBException e) {
961
        } catch (JAXBException e) {
961
            logger.error(e,e);
962
            logger.error(e,e);
962
            return null;
963
            return null;
963
        }
964
        }
964
    }
965
    }
965
 
966
 
966
    /**
967
    /**
967
     * Persist the edited studies plan
968
     * Persist the edited studies plan
968
     * Updates studiesPlanVersion
969
     * Updates studiesPlanVersion
969
     * Updates studiesPlanVersionDescription
970
     * Updates studiesPlanVersionDescription
970
     * Updates PlanoEstudos XML and JSON
971
     * Updates PlanoEstudos XML and JSON
971
     * TODO REVER
972
     * TODO REVER
972
     * @param courseId
973
     * @param courseId
973
     * @param coursePlanId
974
     * @param coursePlanId
974
     * @param planoEditado
975
     * @param planoEditado
975
     * @param courseStudiesPlanEditado
976
     * @param courseStudiesPlanEditado
976
     * @return
977
     * @return
977
     */
978
     */
978
    public Course savePlanoEstudosEditado(long courseId, long coursePlanId, Curso planoEditado, CourseStudiesPlan courseStudiesPlanEditado,UserSession session)
979
    public Course savePlanoEstudosEditado(long courseId, long coursePlanId, Curso planoEditado, CourseStudiesPlan courseStudiesPlanEditado,UserSession session)
979
    {
980
    {
980
        try {
981
        try {
981
            Course course = DaoFactory.getCourseDaoImpl().load(courseId);
982
            Course course = DaoFactory.getCourseDaoImpl().load(courseId);
982
 
983
 
983
            for(CourseStudiesPlan courseStudiesPlanPersistente: course.getStudiesPlans())
984
            for(CourseStudiesPlan courseStudiesPlanPersistente: course.getStudiesPlans())
984
            {
985
            {
985
                if(courseStudiesPlanPersistente.getId() == coursePlanId)
986
                if(courseStudiesPlanPersistente.getId() == coursePlanId)
986
                {
987
                {
987
                    courseStudiesPlanPersistente.setVersion(courseStudiesPlanEditado.getVersion());
988
                    courseStudiesPlanPersistente.setVersion(courseStudiesPlanEditado.getVersion());
988
                    courseStudiesPlanPersistente.setVersionDescription(courseStudiesPlanEditado.getVersionDescription());
989
                    courseStudiesPlanPersistente.setVersionDescription(courseStudiesPlanEditado.getVersionDescription());
989
 
990
 
990
                    //REMOVED UNIDADES TO REMOVE
991
                    //REMOVED UNIDADES TO REMOVE
991
                    for(Curso.Semestre semestre:planoEditado.getSemestre())
992
                    for(Curso.Semestre semestre:planoEditado.getSemestre())
992
                    {
993
                    {
993
                        Iterator<UnidadeType> uIter = semestre.getUnidade().iterator();
994
                        Iterator<UnidadeType> uIter = semestre.getUnidade().iterator();
994
                        while(uIter.hasNext())
995
                        while(uIter.hasNext())
995
                        {
996
                        {
996
                            UnidadeType unidade = uIter.next();
997
                            UnidadeType unidade = uIter.next();
997
                            if(unidade.getRemoved() != null && unidade.getRemoved().equals("true"))
998
                            if(unidade.getRemoved() != null && unidade.getRemoved().equals("true"))
998
                                uIter.remove();
999
                                uIter.remove();
999
                        }
1000
                        }
1000
                        for(Curso.Semestre.Perfil perfil: semestre.getPerfil())
1001
                        for(Curso.Semestre.Perfil perfil: semestre.getPerfil())
1001
                        {
1002
                        {
1002
                            Iterator<UnidadeType> uIter2 = perfil.getUnidade().iterator();
1003
                            Iterator<UnidadeType> uIter2 = perfil.getUnidade().iterator();
1003
                            while(uIter2.hasNext())
1004
                            while(uIter2.hasNext())
1004
                            {
1005
                            {
1005
                                UnidadeType unidade = uIter2.next();
1006
                                UnidadeType unidade = uIter2.next();
1006
                                if(unidade.getRemoved() != null && unidade.getRemoved().equals("true"))
1007
                                if(unidade.getRemoved() != null && unidade.getRemoved().equals("true"))
1007
                                    uIter2.remove();
1008
                                    uIter2.remove();
1008
                            }
1009
                            }
1009
                        }
1010
                        }
1010
                    }
1011
                    }
1011
                    //Garante-se mas depois não vai para o JSON
1012
                    //Garante-se mas depois não vai para o JSON
1012
                    planoEditado.setSiges(course.getCode());//GARANTIR QUE O CODIGO SIGEST ESTA CORRECTO
1013
                    planoEditado.setSiges(course.getCode());//GARANTIR QUE O CODIGO SIGEST ESTA CORRECTO
1013
                    planoEditado.setNome(course.getName());
1014
                    planoEditado.setNome(course.getName());
1014
                    planoEditado.setDep(course.getArea());
1015
                    planoEditado.setDep(course.getArea());
1015
 
1016
 
1016
                    /**
1017
                    /**
1017
                     * Calcula automaticamente as horas de contacto totais
1018
                     * Calcula automaticamente as horas de contacto totais
1018
                     */
1019
                     */
1019
                    autoFillTotalHorasContacto(planoEditado);
1020
                    autoFillTotalHorasContacto(planoEditado);
1020
 
1021
 
1021
                    //planoEditado.setDepDesc("");
1022
                    //planoEditado.setDepDesc("");
1022
                    //planoEditado.setDepDescEn("");
1023
                    //planoEditado.setDepDescEn("");
1023
                    //planoEditado.setDepDescEs("");
1024
                    //planoEditado.setDepDescEs("");
1024
                    //planoEditado.setDepDescFr("");
1025
                    //planoEditado.setDepDescFr("");
1025
                    JAXBContext jc = JAXBContext.newInstance(Curso.class);
1026
                    JAXBContext jc = JAXBContext.newInstance(Curso.class);
1026
                    Marshaller marshaller = jc.createMarshaller();
1027
                    Marshaller marshaller = jc.createMarshaller();
1027
                    marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
1028
                    marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
1028
                    1.5.0/docs/api/java/io/StringWriter.html">StringWriter xml = new 1.5.0/docs/api/java/io/StringWriter.html">StringWriter();
1029
                    1.5.0/docs/api/java/io/StringWriter.html">StringWriter xml = new 1.5.0/docs/api/java/io/StringWriter.html">StringWriter();
1029
                    marshaller.marshal(planoEditado,xml);
1030
                    marshaller.marshal(planoEditado,xml);
1030
 
1031
 
1031
                    courseStudiesPlanPersistente.setXml(xml.toString());
1032
                    courseStudiesPlanPersistente.setXml(xml.toString());
1032
                    1.5.0/docs/api/java/lang/String.html">String json = CursoImpl.getGensonPlanoEstudosParaApiJsonWS().serialize(planoEditado);
1033
                    1.5.0/docs/api/java/lang/String.html">String json = CursoImpl.getGensonPlanoEstudosParaApiJsonWS().serialize(planoEditado);
1033
                    //SETTING JSON in COURSE STUDIES PLAN
1034
                    //SETTING JSON in COURSE STUDIES PLAN
1034
                    courseStudiesPlanPersistente.setJson(json);
1035
                    courseStudiesPlanPersistente.setJson(json);
1035
                    break;
1036
                    break;
1036
                }
1037
                }
1037
            }
1038
            }
1038
            return course;
1039
            return course;
1039
        } catch (JAXBException e) {
1040
        } catch (JAXBException e) {
1040
            logger.error(e,e);
1041
            logger.error(e,e);
1041
            return null;
1042
            return null;
1042
        }
1043
        }
1043
    }
1044
    }
1044
 
1045
 
1045
    private void autoFillTotalHorasContacto(Curso planoEditado) {
1046
    private void autoFillTotalHorasContacto(Curso planoEditado) {
1046
        if(planoEditado.getSemestre() != null)
1047
        if(planoEditado.getSemestre() != null)
1047
        {
1048
        {
1048
            for(Curso.Semestre s : planoEditado.getSemestre())
1049
            for(Curso.Semestre s : planoEditado.getSemestre())
1049
            {
1050
            {
1050
                if(s.getUnidade() != null)
1051
                if(s.getUnidade() != null)
1051
                {
1052
                {
1052
                    for(UnidadeType u : s.getUnidade())
1053
                    for(UnidadeType u : s.getUnidade())
1053
                    {
1054
                    {
1054
                        u.setTotalHorasContacto(UnidadeImpl.calculateTotalHorasContacto(u.getHorasContacto()));
1055
                        u.setTotalHorasContacto(UnidadeImpl.calculateTotalHorasContacto(u.getHorasContacto()));
1055
                    }
1056
                    }
1056
                }
1057
                }
1057
                if(s.getPerfil() != null)
1058
                if(s.getPerfil() != null)
1058
                {
1059
                {
1059
                    for(Curso.Semestre.Perfil p : s.getPerfil())
1060
                    for(Curso.Semestre.Perfil p : s.getPerfil())
1060
                    {
1061
                    {
1061
                        if(p.getUnidade() != null)
1062
                        if(p.getUnidade() != null)
1062
                        {
1063
                        {
1063
                            for(UnidadeType u : p.getUnidade())
1064
                            for(UnidadeType u : p.getUnidade())
1064
                            {
1065
                            {
1065
                                u.setTotalHorasContacto(UnidadeImpl.calculateTotalHorasContacto(u.getHorasContacto()));
1066
                                u.setTotalHorasContacto(UnidadeImpl.calculateTotalHorasContacto(u.getHorasContacto()));
1066
                            }
1067
                            }
1067
                        }
1068
                        }
1068
                    }
1069
                    }
1069
                }
1070
                }
1070
            }
1071
            }
1071
        }
1072
        }
1072
    }
1073
    }
1073
 
1074
 
1074
    public void generateFreshJsonPlanosEstudosFromXml(UserSession session)
1075
    public void generateFreshJsonPlanosEstudosFromXml(UserSession session)
1075
    {
1076
    {
1076
        List<CourseStudiesPlan> coursePlans = DaoFactory.getCourseStudiesPlanDaoImpl().findAll();
1077
        List<CourseStudiesPlan> coursePlans = DaoFactory.getCourseStudiesPlanDaoImpl().findAll();
1077
        for(CourseStudiesPlan courseStudiesPlanPersistente: coursePlans)
1078
        for(CourseStudiesPlan courseStudiesPlanPersistente: coursePlans)
1078
        {
1079
        {
1079
            try
1080
            try
1080
            {
1081
            {
1081
                logger.info("Generating JSON for " + courseStudiesPlanPersistente.getCourse().getName() + " version: " + courseStudiesPlanPersistente.getVersion());
1082
                logger.info("Generating JSON for " + courseStudiesPlanPersistente.getCourse().getName() + " version: " + courseStudiesPlanPersistente.getVersion());
1082
                Curso cursoPlano = loadCursoPlanoFromXml(courseStudiesPlanPersistente.getXml());
1083
                Curso cursoPlano = loadCursoPlanoFromXml(courseStudiesPlanPersistente.getXml());
1083
                if(cursoPlano != null)
1084
                if(cursoPlano != null)
1084
                {
1085
                {
1085
                    for(Curso.Semestre s : cursoPlano.getSemestre())
1086
                    for(Curso.Semestre s : cursoPlano.getSemestre())
1086
                    {
1087
                    {
1087
                        SemestreImpl.setDescriptionsDefaults(s);
1088
                        SemestreImpl.setDescriptionsDefaults(s);
1088
                    }
1089
                    }
1089
                    //send to XML again
1090
                    //send to XML again
1090
                    JAXBContext jc = JAXBContext.newInstance(Curso.class);
1091
                    JAXBContext jc = JAXBContext.newInstance(Curso.class);
1091
                    Marshaller marshaller = jc.createMarshaller();
1092
                    Marshaller marshaller = jc.createMarshaller();
1092
                    marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
1093
                    marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
1093
                    1.5.0/docs/api/java/io/StringWriter.html">StringWriter xml = new 1.5.0/docs/api/java/io/StringWriter.html">StringWriter();
1094
                    1.5.0/docs/api/java/io/StringWriter.html">StringWriter xml = new 1.5.0/docs/api/java/io/StringWriter.html">StringWriter();
1094
                    marshaller.marshal(cursoPlano,xml);
1095
                    marshaller.marshal(cursoPlano,xml);
1095
                    courseStudiesPlanPersistente.setXml(xml.toString());
1096
                    courseStudiesPlanPersistente.setXml(xml.toString());
1096
                    1.5.0/docs/api/java/lang/String.html">String json = CursoImpl.getGensonPlanoEstudosParaApiJsonWS().serialize(cursoPlano);
1097
                    1.5.0/docs/api/java/lang/String.html">String json = CursoImpl.getGensonPlanoEstudosParaApiJsonWS().serialize(cursoPlano);
1097
                    //SETTING JSON in COURSE STUDIES PLAN
1098
                    //SETTING JSON in COURSE STUDIES PLAN
1098
                    courseStudiesPlanPersistente.setJson(json);
1099
                    courseStudiesPlanPersistente.setJson(json);
1099
                }
1100
                }
1100
 
1101
 
1101
            }
1102
            }
1102
            catch(1.5.0/docs/api/java/lang/Throwable.html">Throwable e)
1103
            catch(1.5.0/docs/api/java/lang/Throwable.html">Throwable e)
1103
            {
1104
            {
1104
                logger.error(e,e);
1105
                logger.error(e,e);
1105
            }
1106
            }
1106
        }
1107
        }
1107
 
1108
 
1108
        logger.info("GENERATING JSON FOR CLASS COURSE");
1109
        logger.info("GENERATING JSON FOR CLASS COURSE");
1109
        for(Course course: DaoFactory.getCourseDaoImpl().findAll())
1110
        for(Course course: DaoFactory.getCourseDaoImpl().findAll())
1110
        {
1111
        {
1111
            try {
1112
            try {
1112
                logger.info("generating json for course: " + course.getName() + " (" + course.getCode() + ")");
1113
                logger.info("generating json for course: " + course.getName() + " (" + course.getCode() + ")");
1113
                generateCourseJson(course);
1114
                generateCourseJson(course);
1114
            } catch (1.5.0/docs/api/java/io/IOException.html">IOException e) {
1115
            } catch (1.5.0/docs/api/java/io/IOException.html">IOException e) {
1115
                logger.error(e,e);
1116
                logger.error(e,e);
1116
            }
1117
            }
1117
        }
1118
        }
1118
    }
1119
    }
1119
 
1120
 
1120
 
1121
 
1121
 
1122
 
1122
    public List<CourseDepartment> loadDepartments()
1123
    public List<CourseDepartment> loadDepartments()
1123
    {
1124
    {
1124
        List<CourseDepartment> departments = DaoFactory.getCourseDepartmentDaoImpl().findAll();
1125
        List<CourseDepartment> departments = DaoFactory.getCourseDepartmentDaoImpl().findAll();
1125
        for(CourseDepartment dep: departments)
1126
        for(CourseDepartment dep: departments)
1126
            dep.getName();
1127
            dep.getName();
1127
        return departments;
1128
        return departments;
1128
 
1129
 
1129
    }
1130
    }
1130
 
1131
 
1131
 
1132
 
1132
    public Teacher addTeacherCommission(1.5.0/docs/api/java/lang/String.html">String teacherId,1.5.0/docs/api/java/lang/String.html">String courseId, UserSession session)
1133
    public Teacher addTeacherCommission(1.5.0/docs/api/java/lang/String.html">String teacherId,1.5.0/docs/api/java/lang/String.html">String courseId, UserSession session)
1133
    {
1134
    {
1134
        Course course = DaoFactory.getCourseDaoImpl().load(new 1.5.0/docs/api/java/lang/Long.html">Long(courseId));
1135
        Course course = DaoFactory.getCourseDaoImpl().load(new 1.5.0/docs/api/java/lang/Long.html">Long(courseId));
1135
        Teacher t = DaoFactory.getTeacherDaoImpl().load(new 1.5.0/docs/api/java/lang/Long.html">Long(teacherId));
1136
        Teacher t = DaoFactory.getTeacherDaoImpl().load(new 1.5.0/docs/api/java/lang/Long.html">Long(teacherId));
1136
        t.addRole(course.getValidationRole());
1137
        t.addRole(course.getValidationRole());
1137
        return t;
1138
        return t;
1138
    }
1139
    }
1139
 
1140
 
1140
    public Teacher removeTeacherCommission(1.5.0/docs/api/java/lang/String.html">String teacherId,1.5.0/docs/api/java/lang/String.html">String courseId, UserSession session)
1141
    public Teacher removeTeacherCommission(1.5.0/docs/api/java/lang/String.html">String teacherId,1.5.0/docs/api/java/lang/String.html">String courseId, UserSession session)
1141
    {
1142
    {
1142
        Course course = DaoFactory.getCourseDaoImpl().load(new 1.5.0/docs/api/java/lang/Long.html">Long(courseId));
1143
        Course course = DaoFactory.getCourseDaoImpl().load(new 1.5.0/docs/api/java/lang/Long.html">Long(courseId));
1143
        Teacher t = DaoFactory.getTeacherDaoImpl().load(new 1.5.0/docs/api/java/lang/Long.html">Long(teacherId));
1144
        Teacher t = DaoFactory.getTeacherDaoImpl().load(new 1.5.0/docs/api/java/lang/Long.html">Long(teacherId));
1144
        t.removeRole(course.getValidationRole());
1145
        t.removeRole(course.getValidationRole());
1145
        return t;
1146
        return t;
1146
    }
1147
    }
1147
 
1148
 
1148
 
1149
 
1149
    public static void main(1.5.0/docs/api/java/lang/String.html">String[] args)
1150
    public static void main(1.5.0/docs/api/java/lang/String.html">String[] args)
1150
    {
1151
    {
1151
        AbstractDao.getCurrentSession().beginTransaction();
1152
        AbstractDao.getCurrentSession().beginTransaction();
1152
        new CoursesService().generateFreshJsonPlanosEstudosFromXml(null);
1153
        new CoursesService().generateFreshJsonPlanosEstudosFromXml(null);
1153
        AbstractDao.getCurrentSession().getTransaction().commit();
1154
        AbstractDao.getCurrentSession().getTransaction().commit();
1154
    }
1155
    }
1155
 
1156
 
1156
    public StudiesPlanImporter importStudiesPlanVersionFromFile(5+0%2Fdocs%2Fapi+InputStream">InputStream stream, 1.5.0/docs/api/java/lang/Long.html">Long studiesPlanId, UserSession session) throws 1.5.0/docs/api/java/io/IOException.html">IOException
1157
    public StudiesPlanImporter importStudiesPlanVersionFromFile(5+0%2Fdocs%2Fapi+InputStream">InputStream stream, 1.5.0/docs/api/java/lang/Long.html">Long studiesPlanId, UserSession session) throws 1.5.0/docs/api/java/io/IOException.html">IOException
1157
    {
1158
    {
1158
        StudiesPlanImporter importer = new StudiesPlanImporter();
1159
        StudiesPlanImporter importer = new StudiesPlanImporter();
1159
        importer.parseFile(stream);
1160
        importer.parseFile(stream);
1160
        1.5.0/docs/api/java/lang/System.html">System.out.println(importer.getLog());
1161
        1.5.0/docs/api/java/lang/System.html">System.out.println(importer.getLog());
1161
        CourseStudiesPlan plan = DaoFactory.getCourseStudiesPlanDaoImpl().load(studiesPlanId);
1162
        CourseStudiesPlan plan = DaoFactory.getCourseStudiesPlanDaoImpl().load(studiesPlanId);
1162
        plan.setImportLog(importer.getLog());
1163
        plan.setImportLog(importer.getLog());
1163
        return importer;
1164
        return importer;
1164
    }
1165
    }
1165
    public StudiesPlanImporter mergeStudiesPlanVersionFromFile(5+0%2Fdocs%2Fapi+InputStream">InputStream stream, 1.5.0/docs/api/java/lang/Long.html">Long studiesPlanId, UserSession session) throws 1.5.0/docs/api/java/io/IOException.html">IOException
1166
    public StudiesPlanImporter mergeStudiesPlanVersionFromFile(5+0%2Fdocs%2Fapi+InputStream">InputStream stream, 1.5.0/docs/api/java/lang/Long.html">Long studiesPlanId, UserSession session) throws 1.5.0/docs/api/java/io/IOException.html">IOException
1166
    {
1167
    {
1167
        StudiesPlanImporter importer = new StudiesPlanImporter();
1168
        StudiesPlanImporter importer = new StudiesPlanImporter();
1168
        importer.parseFile(stream);
1169
        importer.parseFile(stream);
1169
        1.5.0/docs/api/java/lang/System.html">System.out.println(importer.getLog());
1170
        1.5.0/docs/api/java/lang/System.html">System.out.println(importer.getLog());
1170
        CourseStudiesPlan plan = DaoFactory.getCourseStudiesPlanDaoImpl().load(studiesPlanId);
1171
        CourseStudiesPlan plan = DaoFactory.getCourseStudiesPlanDaoImpl().load(studiesPlanId);
1171
        plan.setImportLog(plan.getImportLog() + "\n\n############\n\n##MERGING\n\n" + importer.getLog());
1172
        plan.setImportLog(plan.getImportLog() + "\n\n############\n\n##MERGING\n\n" + importer.getLog());
1172
        return importer;
1173
        return importer;
1173
    }
1174
    }
1174
 
1175
 
1175
    public ReplaceRoleResult createRoleCourseComission(long courseId,UserSession userSession) throws AccessDeniedException
1176
    public ReplaceRoleResult createRoleCourseComission(long courseId,UserSession userSession) throws AccessDeniedException
1176
    {
1177
    {
1177
        Course c = DaoFactory.getCourseDaoImpl().load(courseId);
1178
        Course c = DaoFactory.getCourseDaoImpl().load(courseId);
1178
        1.5.0/docs/api/java/lang/String.html">String normalizedName = StringsUtils.getNormalizedNameSafeforCode(c.getName());
1179
        1.5.0/docs/api/java/lang/String.html">String normalizedName = StringsUtils.getNormalizedNameSafeforCode(c.getName());
1179
        if(normalizedName == null)
1180
        if(normalizedName == null)
1180
            throw new 1.5.0/docs/api/java/lang/RuntimeException.html">RuntimeException("Erro o curso " + c.getId() +" + nao tem nome");
1181
            throw new 1.5.0/docs/api/java/lang/RuntimeException.html">RuntimeException("Erro o curso " + c.getId() +" + nao tem nome");
1181
        1.5.0/docs/api/java/lang/String.html">String roleValidation = "courseValidateProgram" + normalizedName;
-
 
1182
        UserRoleConfigImpl newUserRoleConfig = DomainObjectFactory.createUserRoleConfigImpl();
-
 
1183
        newUserRoleConfig.setRole(roleValidation);
-
 
1184
        newUserRoleConfig.setValid(true);
-
 
1185
        newUserRoleConfig.setValue("Comissão de Curso de " + c.getName());
-
 
1186
        newUserRoleConfig.setValuePt("Comissão de Curso de " + c.getName());
-
 
1187
        newUserRoleConfig.setValueEn("");
-
 
1188
        newUserRoleConfig.setValueEs("");
-
 
1189
        newUserRoleConfig.setValueFr("");
-
 
1190
 
-
 
1191
        try {
-
 
1192
 
-
 
1193
            ReplaceRoleResult result;
-
 
1194
            if(c.getValidationRole() == null || c.getValidationRole().trim().length() == 0)
-
 
1195
            {
-
 
1196
                result = new  UserRoleConfigService().addUpdateRole(newUserRoleConfig,userSession,false);
-
 
1197
            }
-
 
1198
            else
-
 
1199
            {
-
 
1200
                1.5.0/docs/api/java/lang/String.html">String oldValidationRole = c.getValidationRole();
-
 
1201
                result = new  UserRoleConfigService().updateOldRoleWithView(oldValidationRole, newUserRoleConfig, userSession,false);
-
 
1202
            }
-
 
1203
 
-
 
1204
 
1182
 
1205
            if(result.roleKeyAlreadyExist)
1183
        1.5.0/docs/api/java/lang/String.html">String roleValidation = "courseValidateProgram" + normalizedName;
1206
            {
-
 
1207
                logger.error("Tentado CRIAR um Role que já existe e não é Administrador nem Super user");
1184
        1.5.0/docs/api/java/lang/String.html">String oldValidationRole = c.getValidationRole();
1208
                throw new AccessDeniedException("Tentado CRIAR um Role que já existe e não é Administrador nem Super user");
1185
        1.5.0/docs/api/java/lang/String.html">String nomeRole = "Comissão de Curso de " + c.getName();
1209
            }
1186
        try{
-
 
1187
            ReplaceRoleResult result = new  UserRoleConfigService().createNewNormalizedRoleService(oldValidationRole,nomeRole,roleValidation,userSession);
1210
            c.setValidationRole(roleValidation);
1188
            c.setValidationRole(roleValidation);
1211
            return result;
1189
            return result;
1212
        } catch (AccessDeniedException e) {
1190
        }catch(AccessDeniedException e)
1213
            logger.error("Tentado alterar um Role e não é Administrador nem Super user");
1191
        {
1214
            throw e;
1192
            throw e;
1215
        }
1193
        }
1216
    }
1194
    }
1217
 
1195
 
1218
 
1196
 
1219
 
1197
 
1220
    public Teacher changeCoordinator(long teacherId,long courseId,UserSession userSession)
1198
    public Teacher changeCoordinator(long teacherId,long courseId,UserSession userSession)
1221
    {
1199
    {
1222
        Course c = DaoFactory.getCourseDaoImpl().load(courseId);
1200
        Course c = DaoFactory.getCourseDaoImpl().load(courseId);
1223
        Teacher t = DaoFactory.getTeacherDaoImpl().load(teacherId);
1201
        Teacher t = DaoFactory.getTeacherDaoImpl().load(teacherId);
1224
        c.setCoordinator(t);
1202
        c.setCoordinator(t);
1225
        t = DaoFactory.getTeacherDaoImpl().narrow(t);
1203
        t = DaoFactory.getTeacherDaoImpl().narrow(t);
1226
        return t;
1204
        return t;
1227
    }
1205
    }
1228
 
1206
 
1229
    public CourseDepartmentImpl updateDepartmentFromJson(1.5.0/docs/api/java/lang/String.html">String json,UserSession session) throws 1.5.0/docs/api/java/io/IOException.html">IOException
1207
    public CourseDepartmentImpl updateDepartmentFromJson(1.5.0/docs/api/java/lang/String.html">String json,UserSession session) throws 1.5.0/docs/api/java/io/IOException.html">IOException
1230
    {
1208
    {
1231
        CourseDepartmentImpl courseDepartment = CourseDepartmentImpl.loadFromJson(json);
1209
        CourseDepartmentImpl courseDepartment = CourseDepartmentImpl.loadFromJson(json);
1232
        CourseDepartmentImpl courseDepartmentPersistent = (CourseDepartmentImpl) DaoFactory.getCourseDepartmentDaoImpl().load(courseDepartment.getSigla());
-
 
-
 
1210
 
-
 
1211
 
-
 
1212
 
1233
        if(!courseDepartment.getSiglaNova().equals(courseDepartment.getSigla()))
1213
        if(!courseDepartment.getSiglaNova().equals(courseDepartment.getSigla()))
-
 
1214
        {
1234
            courseDepartmentPersistent.setSigla(courseDepartment.getSiglaNova());
1215
            //courseDepartmentPersistent.setSigla(courseDepartment.getSiglaNova());
-
 
1216
            1.5.0/docs/api/javax/management/Query.html">Query q = AbstractDao.getCurrentSession().createQuery("update " + CourseDepartment.class.getName() + " d " +
-
 
1217
                    " set d.sigla = :siglaNova where d.sigla = :sigla");
-
 
1218
            q.setString("siglaNova",courseDepartment.getSiglaNova());
-
 
1219
            q.setString("sigla",courseDepartment.getSigla());
-
 
1220
            q.executeUpdate();
-
 
1221
            //courseDepartmentPersistent = (CourseDepartmentImpl) DaoFactory.getCourseDepartmentDaoImpl().load(courseDepartment.getSiglaNova());
-
 
1222
        }
-
 
1223
        CourseDepartmentImpl courseDepartmentPersistent = (CourseDepartmentImpl) DaoFactory.getCourseDepartmentDaoImpl().load(courseDepartment.getSiglaNova());
1235
        //courseDepartmentPersistent.setSigla(courseDepartment.getSigla());
1224
        //courseDepartmentPersistent.setSigla(courseDepartment.getSigla());
1236
        courseDepartmentPersistent.setActive(courseDepartment.isActive());
1225
        courseDepartmentPersistent.setActive(courseDepartment.isActive());
1237
        courseDepartmentPersistent.setName(courseDepartment.getName());
1226
        courseDepartmentPersistent.setName(courseDepartment.getName());
1238
        courseDepartmentPersistent.setNameEs(courseDepartment.getNameEs());
1227
        courseDepartmentPersistent.setNameEs(courseDepartment.getNameEs());
1239
        courseDepartmentPersistent.setNameEn(courseDepartment.getNameEs());
1228
        courseDepartmentPersistent.setNameEn(courseDepartment.getNameEs());
1240
        courseDepartmentPersistent.setNameFr(courseDepartment.getNameFr());
1229
        courseDepartmentPersistent.setNameFr(courseDepartment.getNameFr());
1241
        //courseDepartmentPersistent.setInstitutionalCode(courseDepartment.getInstitutionalCode());
1230
        //courseDepartmentPersistent.setInstitutionalCode(courseDepartment.getInstitutionalCode());
1242
        courseDepartmentPersistent.setBoardRole(courseDepartment.getBoardRole());
1231
        courseDepartmentPersistent.setBoardRole(courseDepartment.getBoardRole());
1243
        courseDepartmentPersistent.setDirectorRole(courseDepartment.getDirectorRole());
1232
        courseDepartmentPersistent.setDirectorRole(courseDepartment.getDirectorRole());
1244
        if(courseDepartment.getCourseSchool() != null && courseDepartment.getCourseSchool().getId() > 0)
1233
        if(courseDepartment.getCourseSchool() != null && courseDepartment.getCourseSchool().getId() > 0)
1245
        {
1234
        {
1246
            CourseSchoolImpl courseSchool = (CourseSchoolImpl) DaoFactory.getCourseSchoolDaoImpl().load(courseDepartment.getCourseSchool().getId());
1235
            CourseSchoolImpl courseSchool = (CourseSchoolImpl) DaoFactory.getCourseSchoolDaoImpl().load(courseDepartment.getCourseSchool().getId());
1247
            courseDepartmentPersistent.setCourseSchool(courseSchool);
1236
            courseDepartmentPersistent.setCourseSchool(courseSchool);
1248
        }
1237
        }
1249
        else
1238
        else
1250
            courseDepartmentPersistent.setCourseSchool(null);
1239
            courseDepartmentPersistent.setCourseSchool(null);
1251
        return courseDepartmentPersistent;
1240
        return courseDepartmentPersistent;
1252
 
1241
 
1253
    }
1242
    }
1254
 
1243
 
1255
    public CourseDepartmentImpl removeDepartmentFromJson(1.5.0/docs/api/java/lang/String.html">String json,UserSession session) throws 1.5.0/docs/api/java/io/IOException.html">IOException
1244
    public CourseDepartmentImpl removeDepartmentFromJson(1.5.0/docs/api/java/lang/String.html">String json,UserSession session) throws 1.5.0/docs/api/java/io/IOException.html">IOException
1256
    {
1245
    {
1257
        CourseDepartmentImpl courseDepartment = CourseDepartmentImpl.loadFromJson(json);
1246
        CourseDepartmentImpl courseDepartment = CourseDepartmentImpl.loadFromJson(json);
1258
        CourseDepartmentImpl courseDepartmentPersistent = (CourseDepartmentImpl) DaoFactory.getCourseDepartmentDaoImpl().load(courseDepartment.getSigla());
1247
        CourseDepartmentImpl courseDepartmentPersistent = (CourseDepartmentImpl) DaoFactory.getCourseDepartmentDaoImpl().load(courseDepartment.getSigla());
1259
        DaoFactory.getCourseDepartmentDaoImpl().delete(courseDepartmentPersistent);
1248
        DaoFactory.getCourseDepartmentDaoImpl().delete(courseDepartmentPersistent);
1260
        return courseDepartmentPersistent;
1249
        return courseDepartmentPersistent;
1261
 
1250
 
1262
    }
1251
    }
1263
 
1252
 
1264
    public CourseDepartmentImpl newDepartmentFromJson(UserSession session) throws 1.5.0/docs/api/java/io/IOException.html">IOException
1253
    public CourseDepartmentImpl newDepartmentFromJson(UserSession session) throws 1.5.0/docs/api/java/io/IOException.html">IOException
1265
    {
1254
    {
1266
        CourseDepartmentImpl courseDepartmentPersistent = DomainObjectFactory.createCourseDepartmentImpl();
1255
        CourseDepartmentImpl courseDepartmentPersistent = DomainObjectFactory.createCourseDepartmentImpl();
1267
 
1256
 
1268
        courseDepartmentPersistent.setSigla(BytesUtils.generateKey().substring(0,10));
1257
        courseDepartmentPersistent.setSigla(BytesUtils.generateKey().substring(0,10));
1269
        courseDepartmentPersistent.setSiglaNova(courseDepartmentPersistent.getSigla());
1258
        courseDepartmentPersistent.setSiglaNova(courseDepartmentPersistent.getSigla());
1270
        courseDepartmentPersistent.setActive(false);
1259
        courseDepartmentPersistent.setActive(false);
1271
        DaoFactory.getCourseDepartmentDaoImpl().save(courseDepartmentPersistent);
1260
        DaoFactory.getCourseDepartmentDaoImpl().save(courseDepartmentPersistent);
1272
        return courseDepartmentPersistent;
1261
        return courseDepartmentPersistent;
1273
 
1262
 
1274
    }
1263
    }
1275
 
1264
 
-
 
1265
    /**
-
 
1266
     * Cria um conjunto de roles novos para um determinado departamento
-
 
1267
     * chama o serviço tier1 UserRoleConfigService.createNewNormalizedRoleService
-
 
1268
     * @param session
-
 
1269
     * @return
-
 
1270
     * @throws IOException
-
 
1271
     * @throws AccessDeniedException
-
 
1272
     */
-
 
1273
    public CourseDepartmentImpl newDepartmentRolesFromJson(1.5.0/docs/api/java/lang/String.html">String json,UserSession session) throws 1.5.0/docs/api/java/io/IOException.html">IOException, AccessDeniedException {
-
 
1274
        CourseDepartmentImpl courseDepartment = CourseDepartmentImpl.loadFromJson(json);
-
 
1275
        CourseDepartmentImpl courseDepartmentPersistent = (CourseDepartmentImpl) DaoFactory.getCourseDepartmentDaoImpl().findBySigla(courseDepartment.getSigla());
-
 
1276
 
-
 
1277
        UserRoleConfigService userRoleConfigService = new  UserRoleConfigService();
-
 
1278
        1.5.0/docs/api/java/lang/String.html">String normalizedName = StringsUtils.getNormalizedNameSafeforCode(courseDepartmentPersistent.getName());
-
 
1279
        if(normalizedName == null)
-
 
1280
            throw new 1.5.0/docs/api/java/lang/RuntimeException.html">RuntimeException("Erro o Departamento " + courseDepartmentPersistent.getSigla() +" + nao tem nome");
-
 
1281
 
-
 
1282
 
-
 
1283
        1.5.0/docs/api/java/lang/String.html">String nomeRole = "Departamento Direcção - " + courseDepartmentPersistent.getName();
-
 
1284
        1.5.0/docs/api/java/lang/String.html">String oldRole = courseDepartmentPersistent.getBoardRole();
-
 
1285
        1.5.0/docs/api/java/lang/String.html">String newRoleStr = "department.board." + normalizedName;
-
 
1286
        try
-
 
1287
        {
-
 
1288
            userRoleConfigService.createNewNormalizedRoleService(oldRole,nomeRole,newRoleStr, session);
-
 
1289
            courseDepartmentPersistent.setBoardRole(newRoleStr);
-
 
1290
        } catch (AccessDeniedException e) {
-
 
1291
            logger.error(e,e);
-
 
1292
            throw e;
-
 
1293
        }
-
 
1294
 
-
 
1295
 
-
 
1296
        nomeRole = "Departamento Diretor - " + courseDepartmentPersistent.getName();
-
 
1297
        oldRole = courseDepartmentPersistent.getDirectorRole();
-
 
1298
        newRoleStr = "department.diretor." + normalizedName;
-
 
1299
 
-
 
1300
        try {
-
 
1301
            userRoleConfigService.createNewNormalizedRoleService(oldRole,nomeRole,newRoleStr, session);
-
 
1302
            courseDepartmentPersistent.setDirectorRole(newRoleStr);
-
 
1303
        } catch (AccessDeniedException e) {
-
 
1304
            logger.error(e,e);
-
 
1305
            throw e;
-
 
1306
        }
-
 
1307
 
-
 
1308
        return courseDepartmentPersistent;
-
 
1309
    }
-
 
1310
 
-
 
1311
 
-
 
1312
 
1276
 
1313
 
1277
    public CourseSchoolImpl updateSchoolFromJson(1.5.0/docs/api/java/lang/String.html">String json,UserSession session) throws 1.5.0/docs/api/java/io/IOException.html">IOException
1314
    public CourseSchoolImpl updateSchoolFromJson(1.5.0/docs/api/java/lang/String.html">String json,UserSession session) throws 1.5.0/docs/api/java/io/IOException.html">IOException
1278
    {
1315
    {
1279
        CourseSchoolImpl courseSchool = CourseSchoolImpl.loadFromJson(json);
1316
        CourseSchoolImpl courseSchool = CourseSchoolImpl.loadFromJson(json);
1280
        CourseSchoolImpl courseSchoolPersistent = (CourseSchoolImpl) DaoFactory.getCourseSchoolDaoImpl().load(courseSchool.getId());
1317
        CourseSchoolImpl courseSchoolPersistent = (CourseSchoolImpl) DaoFactory.getCourseSchoolDaoImpl().load(courseSchool.getId());
1281
 
1318
 
1282
        courseSchoolPersistent.setActive(courseSchool.isActive());
1319
        courseSchoolPersistent.setActive(courseSchool.isActive());
1283
        courseSchoolPersistent.setName(courseSchool.getName());
1320
        courseSchoolPersistent.setName(courseSchool.getName());
1284
        courseSchoolPersistent.setNameEs(courseSchool.getNameEs());
1321
        courseSchoolPersistent.setNameEs(courseSchool.getNameEs());
1285
        courseSchoolPersistent.setNameEn(courseSchool.getNameEs());
1322
        courseSchoolPersistent.setNameEn(courseSchool.getNameEs());
1286
        courseSchoolPersistent.setNameFr(courseSchool.getNameFr());
1323
        courseSchoolPersistent.setNameFr(courseSchool.getNameFr());
1287
        courseSchoolPersistent.setInstitutionalCode(courseSchool.getInstitutionalCode());
1324
        courseSchoolPersistent.setInstitutionalCode(courseSchool.getInstitutionalCode());
1288
        courseSchoolPersistent.setInitials(courseSchool.getInitials());
1325
        courseSchoolPersistent.setInitials(courseSchool.getInitials());
1289
 
1326
 
1290
        courseSchoolPersistent.setSchoolDirectorRole(courseSchool.getSchoolDirectorRole());
1327
        courseSchoolPersistent.setSchoolDirectorRole(courseSchool.getSchoolDirectorRole());
1291
        courseSchoolPersistent.setSchoolBoardRole(courseSchool.getSchoolBoardRole());
1328
        courseSchoolPersistent.setSchoolBoardRole(courseSchool.getSchoolBoardRole());
1292
        courseSchoolPersistent.setSchoolSecretariadoRole(courseSchool.getSchoolSecretariadoRole());
1329
        courseSchoolPersistent.setSchoolSecretariadoRole(courseSchool.getSchoolSecretariadoRole());
1293
 
1330
 
1294
        courseSchoolPersistent.setCtcPresidentRole(courseSchool.getCtcPresidentRole());
1331
        courseSchoolPersistent.setCtcPresidentRole(courseSchool.getCtcPresidentRole());
1295
        courseSchoolPersistent.setCtcMemberRole(courseSchool.getCtcMemberRole());
1332
        courseSchoolPersistent.setCtcMemberRole(courseSchool.getCtcMemberRole());
1296
        courseSchoolPersistent.setCtcSecretariadoRole(courseSchool.getCtcSecretariadoRole());
1333
        courseSchoolPersistent.setCtcSecretariadoRole(courseSchool.getCtcSecretariadoRole());
1297
 
1334
 
1298
        courseSchoolPersistent.setPedagogicoPresidentRole(courseSchool.getPedagogicoPresidentRole());
1335
        courseSchoolPersistent.setPedagogicoPresidentRole(courseSchool.getPedagogicoPresidentRole());
1299
        courseSchoolPersistent.setPedagogicoMemberRole(courseSchool.getPedagogicoMemberRole());
1336
        courseSchoolPersistent.setPedagogicoMemberRole(courseSchool.getPedagogicoMemberRole());
1300
        courseSchoolPersistent.setPedagogicoSecretariadoRole(courseSchool.getPedagogicoSecretariadoRole());
1337
        courseSchoolPersistent.setPedagogicoSecretariadoRole(courseSchool.getPedagogicoSecretariadoRole());
1301
 
1338
 
1302
        courseSchoolPersistent.setFuncionarioRole(courseSchool.getFuncionarioRole());
1339
        courseSchoolPersistent.setFuncionarioRole(courseSchool.getFuncionarioRole());
1303
        courseSchoolPersistent.setTeacherRole(courseSchool.getTeacherRole());
1340
        courseSchoolPersistent.setTeacherRole(courseSchool.getTeacherRole());
1304
        courseSchoolPersistent.setStudentRole(courseSchool.getStudentRole());
1341
        courseSchoolPersistent.setStudentRole(courseSchool.getStudentRole());
1305
 
1342
 
1306
        return courseSchoolPersistent;
1343
        return courseSchoolPersistent;
1307
 
1344
 
1308
    }
1345
    }
1309
 
1346
 
-
 
1347
 
1310
    public CourseSchoolImpl newSchoolFromJson(UserSession session) throws 1.5.0/docs/api/java/io/IOException.html">IOException
1348
    public CourseSchoolImpl newSchoolFromJson(UserSession session) throws 1.5.0/docs/api/java/io/IOException.html">IOException
1311
    {
1349
    {
1312
        CourseSchoolImpl courseSchoolPersistent = DomainObjectFactory.createCourseSchoolImpl();
1350
        CourseSchoolImpl courseSchoolPersistent = DomainObjectFactory.createCourseSchoolImpl();
1313
 
1351
 
1314
        courseSchoolPersistent.setActive(false);
1352
        courseSchoolPersistent.setActive(false);
1315
        DaoFactory.getCourseSchoolDaoImpl().save(courseSchoolPersistent);
1353
        DaoFactory.getCourseSchoolDaoImpl().save(courseSchoolPersistent);
1316
        return courseSchoolPersistent;
1354
        return courseSchoolPersistent;
1317
 
1355
 
1318
    }
1356
    }
1319
 
1357
 
1320
    public CourseSchoolImpl removeSchoolFromJson(1.5.0/docs/api/java/lang/String.html">String json,UserSession session) throws 1.5.0/docs/api/java/io/IOException.html">IOException
1358
    public CourseSchoolImpl removeSchoolFromJson(1.5.0/docs/api/java/lang/String.html">String json,UserSession session) throws 1.5.0/docs/api/java/io/IOException.html">IOException
1321
    {
1359
    {
1322
        CourseSchoolImpl courseSchool = CourseSchoolImpl.loadFromJson(json);
1360
        CourseSchoolImpl courseSchool = CourseSchoolImpl.loadFromJson(json);
1323
        CourseSchoolImpl courseSchoolPersistent = (CourseSchoolImpl) DaoFactory.getCourseSchoolDaoImpl().load(courseSchool.getId());
1361
        CourseSchoolImpl courseSchoolPersistent = (CourseSchoolImpl) DaoFactory.getCourseSchoolDaoImpl().load(courseSchool.getId());
1324
        DaoFactory.getCourseSchoolDaoImpl().delete(courseSchoolPersistent);
1362
        DaoFactory.getCourseSchoolDaoImpl().delete(courseSchoolPersistent);
1325
        return courseSchoolPersistent;
1363
        return courseSchoolPersistent;
1326
 
1364
 
1327
    }
1365
    }
1328
 
1366
 
1329
    /*
1367
    /*
1330
    public static void main(String[] args) throws JAXBException, IOException {
1368
    public static void main(String[] args) throws JAXBException, IOException {
1331
 
1369
 
1332
        String json = "{\"anoPlanoSiges\":null,\"codigoPlanoSiges\":null,\"dep\":null,\"descPlanoSiges\":null,\"nome\":null,\"semestre\":[{\"id\":\"S1\",\"notas\":null,\"perfil\":[],\"semestreDesc\":\"Semestre 1\",\"semestreDescEn\":\"Semester 1\",\"semestreDescEs\":\"Semestre 1\",\"semestreDescFr\":\"Semestre 1\",\"semestreId\":null,\"unidade\":[{\"dep\":\"\",\"ects\":\"\",\"nome\":\"Português — Língua e Literatura\",\"nomeEn\":null,\"nomeEs\":null,\"nomeFr\":null,\"obs\":\"\",\"removed\":null,\"siges\":null,\"totalHoras\":\"150\",\"urlFichaCurricular\":\"\",\"urlUnidadeCurricular\":\"\",\"type\":\"unidade\",\"$$hashKey\":\"object:12\",\"horasContacto\":{\"tP\":\"60\",\"oT\":\"15\"},\"eCTS\":\"6\"},{\"dep\":\"\",\"ects\":\"\",\"nome\":\"Geografia\",\"nomeEn\":null,\"nomeEs\":null,\"nomeFr\":null,\"obs\":\"\",\"removed\":null,\"siges\":null,\"totalHoras\":\"125\",\"urlFichaCurricular\":\"\",\"urlUnidadeCurricular\":\"\",\"type\":\"unidade\",\"$$hashKey\":\"object:16\",\"horasContacto\":{\"tP\":\"45\",\"oT\":\"15\"},\"eCTS\":\"5\"},{\"dep\":\"\",\"ects\":\"\",\"nome\":\"História\",\"nomeEn\":null,\"nomeEs\":null,\"nomeFr\":null,\"obs\":\"\",\"removed\":null,\"siges\":null,\"totalHoras\":\"125\",\"urlFichaCurricular\":\"\",\"urlUnidadeCurricular\":\"\",\"type\":\"unidade\",\"$$hashKey\":\"object:20\",\"horasContacto\":{\"tP\":\"45\",\"oT\":\"15\"},\"eCTS\":\"5\"},{\"dep\":\"\",\"ects\":\"\",\"nome\":\"Linguística e Análise do Discurso\",\"nomeEn\":null,\"nomeEs\":null,\"nomeFr\":null,\"obs\":\"\",\"removed\":null,\"siges\":null,\"totalHoras\":\"150\",\"urlFichaCurricular\":\"\",\"urlUnidadeCurricular\":\"\",\"type\":\"unidade\",\"$$hashKey\":\"object:24\",\"horasContacto\":{\"tP\":\"60\",\"oT\":\"15\"},\"eCTS\":\"6\"},{\"dep\":\"\",\"ects\":\"\",\"nome\":\"Matemática no 1.o Ciclo do Ensino Básico\",\"nomeEn\":null,\"nomeEs\":null,\"nomeFr\":null,\"obs\":\"\",\"removed\":null,\"siges\":null,\"totalHoras\":\"125\",\"urlFichaCurricular\":\"\",\"urlUnidadeCurricular\":\"\",\"type\":\"unidade\",\"$$hashKey\":\"object:28\",\"horasContacto\":{\"tP\":\"45\",\"oT\":\"15\"},\"eCTS\":\"5\"},{\"dep\":\"\",\"ects\":\"\",\"nome\":\"Educação para a Saúde\",\"nomeEn\":null,\"nomeEs\":null,\"nomeFr\":null,\"obs\":\"\",\"removed\":null,\"siges\":null,\"totalHoras\":\"75\",\"urlFichaCurricular\":\"\",\"urlUnidadeCurricular\":\"\",\"type\":\"unidade\",\"$$hashKey\":\"object:32\",\"horasContacto\":{\"tP\":\"30\",\"oT\":\"7\"},\"eCTS\":\"3\"},{\"dep\":\"\",\"ects\":\"\",\"nome\":\"Música, Emoção e Criatividade\",\"nomeEn\":null,\"nomeEs\":null,\"nomeFr\":null,\"obs\":\"\",\"removed\":null,\"siges\":null,\"totalHoras\":\"75\",\"urlFichaCurricular\":\"\",\"urlUnidadeCurricular\":\"\",\"type\":\"unidade\",\"$$hashKey\":\"object:36\",\"horasContacto\":{\"tP\":\"30\",\"oT\":\"7\"},\"eCTS\":\"3\"},{\"dep\":\"\",\"ects\":\"\",\"nome\":\"Educação para a Cidadania\",\"nomeEn\":null,\"nomeEs\":null,\"nomeFr\":null,\"obs\":\"\",\"removed\":null,\"siges\":null,\"totalHoras\":\"75\",\"urlFichaCurricular\":\"\",\"urlUnidadeCurricular\":\"\",\"type\":\"unidade\",\"$$hashKey\":\"object:40\",\"horasContacto\":{\"tP\":\"30\",\"oT\":\"7\"},\"eCTS\":\"3\"},{\"dep\":\"\",\"ects\":\"\",\"nome\":\"Descobrir a Matemática\",\"nomeEn\":null,\"nomeEs\":null,\"nomeFr\":null,\"obs\":\"\",\"removed\":null,\"siges\":null,\"totalHoras\":\"75\",\"urlFichaCurricular\":\"\",\"urlUnidadeCurricular\":\"\",\"type\":\"unidade\",\"$$hashKey\":\"object:44\",\"horasContacto\":{\"tP\":\"30\",\"oT\":\"7\"},\"eCTS\":\"3\"}],\"type\":\"semestre\",\"$$hashKey\":\"object:6\"},{\"id\":\"S2\",\"notas\":null,\"perfil\":[],\"semestreDesc\":\"Semestre 1\",\"semestreDescEn\":\"Semester 1\",\"semestreDescEs\":\"Semestre 1\",\"semestreDescFr\":\"Semestre 1\",\"semestreId\":null,\"unidade\":[{\"dep\":\"\",\"ects\":\"\",\"nome\":\"Didática do Português no 1º Ciclo do Ensino Básico\",\"nomeEn\":null,\"nomeEs\":null,\"nomeFr\":null,\"obs\":\"\",\"removed\":null,\"siges\":null,\"totalHoras\":\"150\",\"urlFichaCurricular\":\"\",\"urlUnidadeCurricular\":\"\",\"type\":\"unidade\",\"$$hashKey\":\"object:54\",\"eCTS\":\"6\",\"horasContacto\":{\"tP\":\"60\",\"oT\":\"15\"}},{\"dep\":\"\",\"ects\":\"\",\"nome\":\"Didática do Estudo do Meio no 1º Ciclo do Ensino Básico\",\"nomeEn\":null,\"nomeEs\":null,\"nomeFr\":null,\"obs\":\"\",\"removed\":null,\"siges\":null,\"totalHoras\":\"150\",\"urlFichaCurricular\":\"\",\"urlUnidadeCurricular\":\"\",\"type\":\"unidade\",\"$$hashKey\":\"object:58\",\"eCTS\":\"6\",\"horasContacto\":{\"tP\":\"60\",\"oT\":\"15\"}},{\"dep\":\"\",\"ects\":\"\",\"nome\":\"Didática da Matemática no 1º Ciclo do Ensino Básico\",\"nomeEn\":null,\"nomeEs\":null,\"nomeFr\":null,\"obs\":\"\",\"removed\":null,\"siges\":null,\"totalHoras\":\"150\",\"urlFichaCurricular\":\"\",\"urlUnidadeCurricular\":\"\",\"type\":\"unidade\",\"$$hashKey\":\"object:62\",\"eCTS\":\"6\",\"horasContacto\":{\"tP\":\"60\",\"oT\":\"15\"}},{\"dep\":\"\",\"ects\":\"\",\"nome\":\"Didática das Expressões no 1º Ciclo do Ensino Básico\",\"nomeEn\":null,\"nomeEs\":null,\"nomeFr\":null,\"obs\":\"\",\"removed\":null,\"siges\":null,\"totalHoras\":\"150\",\"urlFichaCurricular\":\"\",\"urlUnidadeCurricular\":\"\",\"type\":\"unidade\",\"$$hashKey\":\"object:66\",\"eCTS\":\"6\",\"horasContacto\":{\"tP\":\"60\",\"oT\":\"15\"}},{\"dep\":\"\",\"ects\":\"\",\"nome\":\"Psicologia da Educação\",\"nomeEn\":null,\"nomeEs\":null,\"nomeFr\":null,\"obs\":\"\",\"removed\":null,\"siges\":null,\"totalHoras\":\"75\",\"urlFichaCurricular\":\"\",\"urlUnidadeCurricular\":\"\",\"type\":\"unidade\",\"$$hashKey\":\"object:70\",\"eCTS\":\"3\",\"horasContacto\":{\"tP\":\"30\",\"oT\":\"7\"}},{\"dep\":\"\",\"ects\":\"\",\"nome\":\"Investigação em Educação\",\"nomeEn\":null,\"nomeEs\":null,\"nomeFr\":null,\"obs\":\"\",\"removed\":null,\"siges\":null,\"totalHoras\":\"75\",\"urlFichaCurricular\":\"\",\"urlUnidadeCurricular\":\"\",\"type\":\"unidade\",\"$$hashKey\":\"object:74\",\"eCTS\":\"3\",\"horasContacto\":{\"tP\":\"30\",\"oT\":\"7\"}}],\"type\":\"semestre\",\"$$hashKey\":\"object:48\"},{\"id\":\"S3\",\"notas\":null,\"perfil\":[],\"semestreDesc\":\"Semestre 1\",\"semestreDescEn\":\"Semester 1\",\"semestreDescEs\":\"Semestre 1\",\"semestreDescFr\":\"Semestre 1\",\"semestreId\":null,\"unidade\":[{\"dep\":\"\",\"ects\":\"\",\"nome\":\"Prática de Ensino Supervisionada no 1º Ciclo do Ensino Básico\",\"nomeEn\":null,\"nomeEs\":null,\"nomeFr\":null,\"obs\":\"\",\"removed\":null,\"siges\":null,\"totalHoras\":\"500\",\"urlFichaCurricular\":\"\",\"urlUnidadeCurricular\":\"\",\"type\":\"unidade\",\"$$hashKey\":\"object:90\",\"eCTS\":\"20\",\"horasContacto\":{\"s\":\"30\",\"e\":\"270\",\"oT\":\"45\"}},{\"dep\":\"\",\"ects\":\"\",\"nome\":\"Seminário de Investigação I\",\"nomeEn\":null,\"nomeEs\":null,\"nomeFr\":null,\"obs\":\"\",\"removed\":null,\"siges\":null,\"totalHoras\":\"50\",\"urlFichaCurricular\":\"\",\"urlUnidadeCurricular\":\"\",\"type\":\"unidade\",\"$$hashKey\":\"object:98\",\"eCTS\":\"2\",\"horasContacto\":{\"s\":\"20\",\"oT\":\"10\"}},{\"dep\":\"\",\"ects\":\"\",\"nome\":\"Didática da História e Geografia de Portugal no 2º Ciclo do  Ensino Básico\",\"nomeEn\":null,\"nomeEs\":null,\"nomeFr\":null,\"obs\":\"\",\"removed\":null,\"siges\":null,\"totalHoras\":\"100\",\"urlFichaCurricular\":\"\",\"urlUnidadeCurricular\":\"\",\"type\":\"unidade\",\"$$hashKey\":\"object:94\",\"eCTS\":\"4\",\"horasContacto\":{\"tP\":\"35\",\"oT\":\"15\"}},{\"dep\":\"\",\"ects\":\"\",\"nome\":\"Didática do Português no 2º Ciclo do Ensino Básico\",\"nomeEn\":null,\"nomeEs\":null,\"nomeFr\":null,\"obs\":\"\",\"removed\":null,\"siges\":null,\"totalHoras\":\"100\",\"urlFichaCurricular\":\"\",\"urlUnidadeCurricular\":\"\",\"type\":\"unidade\",\"$$hashKey\":\"object:102\",\"eCTS\":\"4\",\"horasContacto\":{\"oT\":\"15\",\"tP\":\"35\"}}],\"type\":\"semestre\",\"$$hashKey\":\"object:78\"},{\"id\":\"S4\",\"notas\":null,\"perfil\":[],\"semestreDesc\":\"Semestre 1\",\"semestreDescEn\":\"Semester 1\",\"semestreDescEs\":\"Semestre 1\",\"semestreDescFr\":\"Semestre 1\",\"semestreId\":null,\"unidade\":[{\"dep\":\"\",\"ects\":\"\",\"nome\":\"\",\"nomeEn\":null,\"nomeEs\":null,\"nomeFr\":null,\"obs\":\"\",\"removed\":null,\"siges\":null,\"totalHoras\":0,\"urlFichaCurricular\":\"\",\"urlUnidadeCurricular\":\"\",\"type\":\"unidade\",\"$$hashKey\":\"object:106\"},{\"dep\":\"\",\"ects\":\"\",\"nome\":\"\",\"nomeEn\":null,\"nomeEs\":null,\"nomeFr\":null,\"obs\":\"\",\"removed\":null,\"siges\":null,\"totalHoras\":0,\"urlFichaCurricular\":\"\",\"urlUnidadeCurricular\":\"\",\"type\":\"unidade\",\"$$hashKey\":\"object:110\"},{\"dep\":\"\",\"ects\":\"\",\"nome\":\"\",\"nomeEn\":null,\"nomeEs\":null,\"nomeFr\":null,\"obs\":\"\",\"removed\":null,\"siges\":null,\"totalHoras\":0,\"urlFichaCurricular\":\"\",\"urlUnidadeCurricular\":\"\",\"type\":\"unidade\",\"$$hashKey\":\"object:114\"},{\"dep\":\"\",\"ects\":\"\",\"nome\":\"\",\"nomeEn\":null,\"nomeEs\":null,\"nomeFr\":null,\"obs\":\"\",\"removed\":null,\"siges\":null,\"totalHoras\":0,\"urlFichaCurricular\":\"\",\"urlUnidadeCurricular\":\"\",\"type\":\"unidade\",\"$$hashKey\":\"object:118\"},{\"dep\":\"\",\"ects\":\"\",\"nome\":\"\",\"nomeEn\":null,\"nomeEs\":null,\"nomeFr\":null,\"obs\":\"\",\"removed\":null,\"siges\":null,\"totalHoras\":0,\"urlFichaCurricular\":\"\",\"urlUnidadeCurricular\":\"\",\"type\":\"unidade\",\"$$hashKey\":\"object:122\"}],\"type\":\"semestre\",\"$$hashKey\":\"object:84\"}],\"siges\":null}";
1370
        String json = "{\"anoPlanoSiges\":null,\"codigoPlanoSiges\":null,\"dep\":null,\"descPlanoSiges\":null,\"nome\":null,\"semestre\":[{\"id\":\"S1\",\"notas\":null,\"perfil\":[],\"semestreDesc\":\"Semestre 1\",\"semestreDescEn\":\"Semester 1\",\"semestreDescEs\":\"Semestre 1\",\"semestreDescFr\":\"Semestre 1\",\"semestreId\":null,\"unidade\":[{\"dep\":\"\",\"ects\":\"\",\"nome\":\"Português — Língua e Literatura\",\"nomeEn\":null,\"nomeEs\":null,\"nomeFr\":null,\"obs\":\"\",\"removed\":null,\"siges\":null,\"totalHoras\":\"150\",\"urlFichaCurricular\":\"\",\"urlUnidadeCurricular\":\"\",\"type\":\"unidade\",\"$$hashKey\":\"object:12\",\"horasContacto\":{\"tP\":\"60\",\"oT\":\"15\"},\"eCTS\":\"6\"},{\"dep\":\"\",\"ects\":\"\",\"nome\":\"Geografia\",\"nomeEn\":null,\"nomeEs\":null,\"nomeFr\":null,\"obs\":\"\",\"removed\":null,\"siges\":null,\"totalHoras\":\"125\",\"urlFichaCurricular\":\"\",\"urlUnidadeCurricular\":\"\",\"type\":\"unidade\",\"$$hashKey\":\"object:16\",\"horasContacto\":{\"tP\":\"45\",\"oT\":\"15\"},\"eCTS\":\"5\"},{\"dep\":\"\",\"ects\":\"\",\"nome\":\"História\",\"nomeEn\":null,\"nomeEs\":null,\"nomeFr\":null,\"obs\":\"\",\"removed\":null,\"siges\":null,\"totalHoras\":\"125\",\"urlFichaCurricular\":\"\",\"urlUnidadeCurricular\":\"\",\"type\":\"unidade\",\"$$hashKey\":\"object:20\",\"horasContacto\":{\"tP\":\"45\",\"oT\":\"15\"},\"eCTS\":\"5\"},{\"dep\":\"\",\"ects\":\"\",\"nome\":\"Linguística e Análise do Discurso\",\"nomeEn\":null,\"nomeEs\":null,\"nomeFr\":null,\"obs\":\"\",\"removed\":null,\"siges\":null,\"totalHoras\":\"150\",\"urlFichaCurricular\":\"\",\"urlUnidadeCurricular\":\"\",\"type\":\"unidade\",\"$$hashKey\":\"object:24\",\"horasContacto\":{\"tP\":\"60\",\"oT\":\"15\"},\"eCTS\":\"6\"},{\"dep\":\"\",\"ects\":\"\",\"nome\":\"Matemática no 1.o Ciclo do Ensino Básico\",\"nomeEn\":null,\"nomeEs\":null,\"nomeFr\":null,\"obs\":\"\",\"removed\":null,\"siges\":null,\"totalHoras\":\"125\",\"urlFichaCurricular\":\"\",\"urlUnidadeCurricular\":\"\",\"type\":\"unidade\",\"$$hashKey\":\"object:28\",\"horasContacto\":{\"tP\":\"45\",\"oT\":\"15\"},\"eCTS\":\"5\"},{\"dep\":\"\",\"ects\":\"\",\"nome\":\"Educação para a Saúde\",\"nomeEn\":null,\"nomeEs\":null,\"nomeFr\":null,\"obs\":\"\",\"removed\":null,\"siges\":null,\"totalHoras\":\"75\",\"urlFichaCurricular\":\"\",\"urlUnidadeCurricular\":\"\",\"type\":\"unidade\",\"$$hashKey\":\"object:32\",\"horasContacto\":{\"tP\":\"30\",\"oT\":\"7\"},\"eCTS\":\"3\"},{\"dep\":\"\",\"ects\":\"\",\"nome\":\"Música, Emoção e Criatividade\",\"nomeEn\":null,\"nomeEs\":null,\"nomeFr\":null,\"obs\":\"\",\"removed\":null,\"siges\":null,\"totalHoras\":\"75\",\"urlFichaCurricular\":\"\",\"urlUnidadeCurricular\":\"\",\"type\":\"unidade\",\"$$hashKey\":\"object:36\",\"horasContacto\":{\"tP\":\"30\",\"oT\":\"7\"},\"eCTS\":\"3\"},{\"dep\":\"\",\"ects\":\"\",\"nome\":\"Educação para a Cidadania\",\"nomeEn\":null,\"nomeEs\":null,\"nomeFr\":null,\"obs\":\"\",\"removed\":null,\"siges\":null,\"totalHoras\":\"75\",\"urlFichaCurricular\":\"\",\"urlUnidadeCurricular\":\"\",\"type\":\"unidade\",\"$$hashKey\":\"object:40\",\"horasContacto\":{\"tP\":\"30\",\"oT\":\"7\"},\"eCTS\":\"3\"},{\"dep\":\"\",\"ects\":\"\",\"nome\":\"Descobrir a Matemática\",\"nomeEn\":null,\"nomeEs\":null,\"nomeFr\":null,\"obs\":\"\",\"removed\":null,\"siges\":null,\"totalHoras\":\"75\",\"urlFichaCurricular\":\"\",\"urlUnidadeCurricular\":\"\",\"type\":\"unidade\",\"$$hashKey\":\"object:44\",\"horasContacto\":{\"tP\":\"30\",\"oT\":\"7\"},\"eCTS\":\"3\"}],\"type\":\"semestre\",\"$$hashKey\":\"object:6\"},{\"id\":\"S2\",\"notas\":null,\"perfil\":[],\"semestreDesc\":\"Semestre 1\",\"semestreDescEn\":\"Semester 1\",\"semestreDescEs\":\"Semestre 1\",\"semestreDescFr\":\"Semestre 1\",\"semestreId\":null,\"unidade\":[{\"dep\":\"\",\"ects\":\"\",\"nome\":\"Didática do Português no 1º Ciclo do Ensino Básico\",\"nomeEn\":null,\"nomeEs\":null,\"nomeFr\":null,\"obs\":\"\",\"removed\":null,\"siges\":null,\"totalHoras\":\"150\",\"urlFichaCurricular\":\"\",\"urlUnidadeCurricular\":\"\",\"type\":\"unidade\",\"$$hashKey\":\"object:54\",\"eCTS\":\"6\",\"horasContacto\":{\"tP\":\"60\",\"oT\":\"15\"}},{\"dep\":\"\",\"ects\":\"\",\"nome\":\"Didática do Estudo do Meio no 1º Ciclo do Ensino Básico\",\"nomeEn\":null,\"nomeEs\":null,\"nomeFr\":null,\"obs\":\"\",\"removed\":null,\"siges\":null,\"totalHoras\":\"150\",\"urlFichaCurricular\":\"\",\"urlUnidadeCurricular\":\"\",\"type\":\"unidade\",\"$$hashKey\":\"object:58\",\"eCTS\":\"6\",\"horasContacto\":{\"tP\":\"60\",\"oT\":\"15\"}},{\"dep\":\"\",\"ects\":\"\",\"nome\":\"Didática da Matemática no 1º Ciclo do Ensino Básico\",\"nomeEn\":null,\"nomeEs\":null,\"nomeFr\":null,\"obs\":\"\",\"removed\":null,\"siges\":null,\"totalHoras\":\"150\",\"urlFichaCurricular\":\"\",\"urlUnidadeCurricular\":\"\",\"type\":\"unidade\",\"$$hashKey\":\"object:62\",\"eCTS\":\"6\",\"horasContacto\":{\"tP\":\"60\",\"oT\":\"15\"}},{\"dep\":\"\",\"ects\":\"\",\"nome\":\"Didática das Expressões no 1º Ciclo do Ensino Básico\",\"nomeEn\":null,\"nomeEs\":null,\"nomeFr\":null,\"obs\":\"\",\"removed\":null,\"siges\":null,\"totalHoras\":\"150\",\"urlFichaCurricular\":\"\",\"urlUnidadeCurricular\":\"\",\"type\":\"unidade\",\"$$hashKey\":\"object:66\",\"eCTS\":\"6\",\"horasContacto\":{\"tP\":\"60\",\"oT\":\"15\"}},{\"dep\":\"\",\"ects\":\"\",\"nome\":\"Psicologia da Educação\",\"nomeEn\":null,\"nomeEs\":null,\"nomeFr\":null,\"obs\":\"\",\"removed\":null,\"siges\":null,\"totalHoras\":\"75\",\"urlFichaCurricular\":\"\",\"urlUnidadeCurricular\":\"\",\"type\":\"unidade\",\"$$hashKey\":\"object:70\",\"eCTS\":\"3\",\"horasContacto\":{\"tP\":\"30\",\"oT\":\"7\"}},{\"dep\":\"\",\"ects\":\"\",\"nome\":\"Investigação em Educação\",\"nomeEn\":null,\"nomeEs\":null,\"nomeFr\":null,\"obs\":\"\",\"removed\":null,\"siges\":null,\"totalHoras\":\"75\",\"urlFichaCurricular\":\"\",\"urlUnidadeCurricular\":\"\",\"type\":\"unidade\",\"$$hashKey\":\"object:74\",\"eCTS\":\"3\",\"horasContacto\":{\"tP\":\"30\",\"oT\":\"7\"}}],\"type\":\"semestre\",\"$$hashKey\":\"object:48\"},{\"id\":\"S3\",\"notas\":null,\"perfil\":[],\"semestreDesc\":\"Semestre 1\",\"semestreDescEn\":\"Semester 1\",\"semestreDescEs\":\"Semestre 1\",\"semestreDescFr\":\"Semestre 1\",\"semestreId\":null,\"unidade\":[{\"dep\":\"\",\"ects\":\"\",\"nome\":\"Prática de Ensino Supervisionada no 1º Ciclo do Ensino Básico\",\"nomeEn\":null,\"nomeEs\":null,\"nomeFr\":null,\"obs\":\"\",\"removed\":null,\"siges\":null,\"totalHoras\":\"500\",\"urlFichaCurricular\":\"\",\"urlUnidadeCurricular\":\"\",\"type\":\"unidade\",\"$$hashKey\":\"object:90\",\"eCTS\":\"20\",\"horasContacto\":{\"s\":\"30\",\"e\":\"270\",\"oT\":\"45\"}},{\"dep\":\"\",\"ects\":\"\",\"nome\":\"Seminário de Investigação I\",\"nomeEn\":null,\"nomeEs\":null,\"nomeFr\":null,\"obs\":\"\",\"removed\":null,\"siges\":null,\"totalHoras\":\"50\",\"urlFichaCurricular\":\"\",\"urlUnidadeCurricular\":\"\",\"type\":\"unidade\",\"$$hashKey\":\"object:98\",\"eCTS\":\"2\",\"horasContacto\":{\"s\":\"20\",\"oT\":\"10\"}},{\"dep\":\"\",\"ects\":\"\",\"nome\":\"Didática da História e Geografia de Portugal no 2º Ciclo do  Ensino Básico\",\"nomeEn\":null,\"nomeEs\":null,\"nomeFr\":null,\"obs\":\"\",\"removed\":null,\"siges\":null,\"totalHoras\":\"100\",\"urlFichaCurricular\":\"\",\"urlUnidadeCurricular\":\"\",\"type\":\"unidade\",\"$$hashKey\":\"object:94\",\"eCTS\":\"4\",\"horasContacto\":{\"tP\":\"35\",\"oT\":\"15\"}},{\"dep\":\"\",\"ects\":\"\",\"nome\":\"Didática do Português no 2º Ciclo do Ensino Básico\",\"nomeEn\":null,\"nomeEs\":null,\"nomeFr\":null,\"obs\":\"\",\"removed\":null,\"siges\":null,\"totalHoras\":\"100\",\"urlFichaCurricular\":\"\",\"urlUnidadeCurricular\":\"\",\"type\":\"unidade\",\"$$hashKey\":\"object:102\",\"eCTS\":\"4\",\"horasContacto\":{\"oT\":\"15\",\"tP\":\"35\"}}],\"type\":\"semestre\",\"$$hashKey\":\"object:78\"},{\"id\":\"S4\",\"notas\":null,\"perfil\":[],\"semestreDesc\":\"Semestre 1\",\"semestreDescEn\":\"Semester 1\",\"semestreDescEs\":\"Semestre 1\",\"semestreDescFr\":\"Semestre 1\",\"semestreId\":null,\"unidade\":[{\"dep\":\"\",\"ects\":\"\",\"nome\":\"\",\"nomeEn\":null,\"nomeEs\":null,\"nomeFr\":null,\"obs\":\"\",\"removed\":null,\"siges\":null,\"totalHoras\":0,\"urlFichaCurricular\":\"\",\"urlUnidadeCurricular\":\"\",\"type\":\"unidade\",\"$$hashKey\":\"object:106\"},{\"dep\":\"\",\"ects\":\"\",\"nome\":\"\",\"nomeEn\":null,\"nomeEs\":null,\"nomeFr\":null,\"obs\":\"\",\"removed\":null,\"siges\":null,\"totalHoras\":0,\"urlFichaCurricular\":\"\",\"urlUnidadeCurricular\":\"\",\"type\":\"unidade\",\"$$hashKey\":\"object:110\"},{\"dep\":\"\",\"ects\":\"\",\"nome\":\"\",\"nomeEn\":null,\"nomeEs\":null,\"nomeFr\":null,\"obs\":\"\",\"removed\":null,\"siges\":null,\"totalHoras\":0,\"urlFichaCurricular\":\"\",\"urlUnidadeCurricular\":\"\",\"type\":\"unidade\",\"$$hashKey\":\"object:114\"},{\"dep\":\"\",\"ects\":\"\",\"nome\":\"\",\"nomeEn\":null,\"nomeEs\":null,\"nomeFr\":null,\"obs\":\"\",\"removed\":null,\"siges\":null,\"totalHoras\":0,\"urlFichaCurricular\":\"\",\"urlUnidadeCurricular\":\"\",\"type\":\"unidade\",\"$$hashKey\":\"object:118\"},{\"dep\":\"\",\"ects\":\"\",\"nome\":\"\",\"nomeEn\":null,\"nomeEs\":null,\"nomeFr\":null,\"obs\":\"\",\"removed\":null,\"siges\":null,\"totalHoras\":0,\"urlFichaCurricular\":\"\",\"urlUnidadeCurricular\":\"\",\"type\":\"unidade\",\"$$hashKey\":\"object:122\"}],\"type\":\"semestre\",\"$$hashKey\":\"object:84\"}],\"siges\":null}";
1333
        CursoImpl c = CursoImpl.loadFromJson(json);
1371
        CursoImpl c = CursoImpl.loadFromJson(json);
1334
 
1372
 
1335
        JAXBContext jc = JAXBContext.newInstance(Curso.class);
1373
        JAXBContext jc = JAXBContext.newInstance(Curso.class);
1336
        Marshaller marshaller = jc.createMarshaller();
1374
        Marshaller marshaller = jc.createMarshaller();
1337
        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
1375
        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
1338
        StringWriter xml = new StringWriter();
1376
        StringWriter xml = new StringWriter();
1339
        marshaller.marshal(c,xml);
1377
        marshaller.marshal(c,xml);
1340
        System.out.println(xml);
1378
        System.out.println(xml);
1341
    }*/
1379
    }*/
1342
 
1380
 
1343
 
1381
 
1344
}
1382
}
1345
 
1383