package org.bigbluebutton.api.util; import org.bigbluebutton.api.domain.Meeting; import org.apache.commons.lang3.StringUtils; import java.io.File; import java.io.IOException; import java.io.StringWriter; import java.util.*; import freemarker.template.*; import org.bigbluebutton.api.domain.RecordingMetadata; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class ResponseBuilder { private static Logger log = LoggerFactory.getLogger(ResponseBuilder.class); Configuration cfg = new Configuration(Configuration.VERSION_2_3_23); public ResponseBuilder(File templatesLoc) { try { cfg.setDirectoryForTemplateLoading(templatesLoc); } catch (IOException e) { e.printStackTrace(); } cfg.setDefaultEncoding("UTF-8"); cfg.setTemplateExceptionHandler(TemplateExceptionHandler.RETHROW_HANDLER); cfg.setLogTemplateExceptions(false); } public String formatPrettyDate(Long timestamp) { return new Date(timestamp).toString(); } public String buildGetMeetingInfoResponse(Meeting meeting, String returnCode) { String createdOn = formatPrettyDate(meeting.getCreateTime()); Template ftl = null; try { ftl = cfg.getTemplate("get-meeting-info.ftlx"); } catch (IOException e) { log.error("Cannot find get-meeting-info.ftl template for meeting : " + meeting.getInternalId(), e); } StringWriter xmlText = new StringWriter(); Map root = new HashMap(); root.put("returnCode", returnCode); root.put("createdOn", createdOn); root.put("meeting", meeting); try { ftl.process(root, xmlText); } catch (TemplateException e) { log.error("Template exception for meeting : " + meeting.getInternalId(), e); } catch (IOException e) { log.error("IO exception for meeting : " + meeting.getInternalId(), e); } return xmlText.toString(); } public String buildGetMeetingsResponse(Collection<Meeting> meetings, String returnCode) { ArrayList<MeetingResponseDetail> meetingResponseDetails = new ArrayList<MeetingResponseDetail>(); for (Meeting meeting : meetings) { String createdOn = formatPrettyDate(meeting.getCreateTime()); MeetingResponseDetail details = new MeetingResponseDetail(createdOn, meeting); meetingResponseDetails.add(details); } Template ftl = null; try { ftl = cfg.getTemplate("get-meetings.ftlx"); } catch (IOException e) { log.error("IO exception for get-meetings.ftlx : ", e); } StringWriter xmlText = new StringWriter(); Map root = new HashMap(); root.put("returnCode", returnCode); root.put("meetingDetailsList", meetingResponseDetails); try { ftl.process(root, xmlText); } catch (TemplateException e) { log.error("Template exception : ", e); } catch (IOException e) { log.error("IO exception for get-meetings.ftlx : ", e); } return xmlText.toString(); } public String buildGetRecordingsResponse(List<RecordingMetadata> recordings, String returnCode) { Template ftl = null; try { ftl = cfg.getTemplate("get-recordings.ftlx"); } catch (IOException e) { log.error("IO exception for get-recordings.ftl : ", e); } StringWriter xmlText = new StringWriter(); Map root = new HashMap(); root.put("returnCode", returnCode); root.put("recordings", recordings); try { ftl.process(root, xmlText); } catch (TemplateException e) { log.error("Template exception : ", e); } catch (IOException e) { log.error("IO exception for get-recordings.ftlx : ", e); } return xmlText.toString(); } }