List of usage examples for com.google.gson JsonArray add
public void add(JsonElement element)
From source file:com.google.samples.apps.iosched.server.schedule.model.DataExtractor.java
License:Open Source License
public JsonArray extractRooms(JsonDataSources sources) { HashSet<String> ids = new HashSet<String>(); JsonArray result = new JsonArray(); JsonDataSource source = sources.getSource(InputJsonKeys.VendorAPISource.MainTypes.rooms.name()); if (source != null) { for (JsonObject origin : source) { JsonObject dest = new JsonObject(); JsonElement originalId = get(origin, InputJsonKeys.VendorAPISource.Rooms.id); String id = Config.ROOM_MAPPING.getRoomId(originalId.getAsString()); if (!ids.contains(id)) { String title = Config.ROOM_MAPPING.getTitle(id, get(origin, InputJsonKeys.VendorAPISource.Rooms.name).getAsString()); set(new JsonPrimitive(id), dest, OutputJsonKeys.Rooms.id); set(originalId, dest, OutputJsonKeys.Rooms.original_id); set(new JsonPrimitive(title), dest, OutputJsonKeys.Rooms.name); result.add(dest); ids.add(id);//from w ww. j a v a2 s. c o m } } } if (Config.DEBUG_FIX_DATA) { DebugDataExtractorHelper.changeRooms(result); } return result; }
From source file:com.google.samples.apps.iosched.server.schedule.model.DataExtractor.java
License:Open Source License
public JsonArray extractTags(JsonDataSources sources) { JsonArray result = new JsonArray(); JsonDataSource source = sources.getSource(InputJsonKeys.VendorAPISource.MainTypes.categories.name()); JsonDataSource tagCategoryMappingSource = sources .getSource(InputJsonKeys.ExtraSource.MainTypes.tag_category_mapping.name()); JsonDataSource tagsConfSource = sources.getSource(InputJsonKeys.ExtraSource.MainTypes.tag_conf.name()); categoryToTagMap = new HashMap<String, JsonObject>(); // Only for checking duplicates. HashSet<String> originalTagNames = new HashSet<String>(); if (source != null) { for (JsonObject origin : source) { JsonObject dest = new JsonObject(); // set tag category, looking for parentid in the tag_category_mapping data source JsonElement parentId = get(origin, InputJsonKeys.VendorAPISource.Categories.parentid); // Ignore categories with null parents, because they are roots (tag categories). if (parentId != null && !parentId.getAsString().equals("")) { JsonElement category = null; if (tagCategoryMappingSource != null) { JsonObject categoryMapping = tagCategoryMappingSource .getElementById(parentId.getAsString()); if (categoryMapping != null) { category = get(categoryMapping, InputJsonKeys.ExtraSource.CategoryTagMapping.tag_name); JsonPrimitive isDefault = (JsonPrimitive) get(categoryMapping, InputJsonKeys.ExtraSource.CategoryTagMapping.is_default); if (isDefault != null && isDefault.getAsBoolean()) { mainCategory = category; }/*from w w w. j av a 2s. c o m*/ } set(category, dest, OutputJsonKeys.Tags.category); } // Ignore categories unrecognized parents (no category) if (category == null) { continue; } // Tag name is by convention: "TAGCATEGORY_TAGNAME" JsonElement name = get(origin, InputJsonKeys.VendorAPISource.Categories.name); JsonElement tagName = new JsonPrimitive( category.getAsString() + "_" + Converters.TAG_NAME.convert(name).getAsString()); JsonElement originalTagName = tagName; if (obfuscate) { name = Converters.OBFUSCATE.convert(name); tagName = new JsonPrimitive( category.getAsString() + "_" + Converters.TAG_NAME.convert(name).getAsString()); } set(tagName, dest, OutputJsonKeys.Tags.tag); set(name, dest, OutputJsonKeys.Tags.name); set(origin, InputJsonKeys.VendorAPISource.Categories.id, dest, OutputJsonKeys.Tags.original_id); set(origin, InputJsonKeys.VendorAPISource.Categories.description, dest, OutputJsonKeys.Tags._abstract, obfuscate ? Converters.OBFUSCATE : null); if (tagsConfSource != null) { JsonObject tagConf = tagsConfSource.getElementById(originalTagName.getAsString()); if (tagConf != null) { set(tagConf, InputJsonKeys.ExtraSource.TagConf.order_in_category, dest, OutputJsonKeys.Tags.order_in_category); set(tagConf, InputJsonKeys.ExtraSource.TagConf.color, dest, OutputJsonKeys.Tags.color); set(tagConf, InputJsonKeys.ExtraSource.TagConf.hashtag, dest, OutputJsonKeys.Tags.hashtag); } } categoryToTagMap.put(get(origin, InputJsonKeys.VendorAPISource.Categories.id).getAsString(), dest); if (originalTagNames.add(originalTagName.getAsString())) { result.add(dest); } } } } if (Config.DEBUG_FIX_DATA) { DebugDataExtractorHelper.changeCategories(categoryToTagMap, result); } return result; }
From source file:com.google.samples.apps.iosched.server.schedule.model.DataExtractor.java
License:Open Source License
public JsonArray extractSpeakers(JsonDataSources sources) { speakersById = new HashMap<String, JsonObject>(); JsonArray result = new JsonArray(); JsonDataSource source = sources.getSource(InputJsonKeys.VendorAPISource.MainTypes.speakers.name()); if (source != null) { for (JsonObject origin : source) { JsonObject dest = new JsonObject(); JsonElement id = get(origin, InputJsonKeys.VendorAPISource.Speakers.id); set(id, dest, OutputJsonKeys.Speakers.id); set(origin, InputJsonKeys.VendorAPISource.Speakers.name, dest, OutputJsonKeys.Speakers.name, obfuscate ? Converters.OBFUSCATE : null); set(origin, InputJsonKeys.VendorAPISource.Speakers.bio, dest, OutputJsonKeys.Speakers.bio, obfuscate ? Converters.OBFUSCATE : null); set(origin, InputJsonKeys.VendorAPISource.Speakers.companyname, dest, OutputJsonKeys.Speakers.company, obfuscate ? Converters.OBFUSCATE : null); JsonElement originalPhoto = get(origin, InputJsonKeys.VendorAPISource.Speakers.photo); if (originalPhoto != null && !"".equals(originalPhoto.getAsString())) { // Note that the input for SPEAKER_PHOTO_ID converter is the entity ID. We simply ignore the original // photo URL, because that will be processed by an offline cron script, resizing the // photos and saving them to a known location with the entity ID as its base name. set(origin, InputJsonKeys.VendorAPISource.Speakers.id, dest, OutputJsonKeys.Speakers.thumbnailUrl, Converters.SPEAKER_PHOTO_URL); }/* w ww . java 2 s.co m*/ JsonElement info = origin.get(InputJsonKeys.VendorAPISource.Speakers.info.name()); JsonPrimitive plusUrl = getMapValue(info, InputJsonKeys.VendorAPISource.Speakers.INFO_PUBLIC_PLUS_ID, Converters.GPLUS_URL, null); if (plusUrl != null) { set(plusUrl, dest, OutputJsonKeys.Speakers.plusoneUrl); } JsonPrimitive twitter = getMapValue(info, InputJsonKeys.VendorAPISource.Speakers.INFO_PUBLIC_TWITTER, Converters.TWITTER_URL, null); if (twitter != null) { set(twitter, dest, OutputJsonKeys.Speakers.twitterUrl); } result.add(dest); speakersById.put(id.getAsString(), dest); } } return result; }
From source file:com.google.samples.apps.iosched.server.schedule.model.DataExtractor.java
License:Open Source License
public JsonArray extractSessions(JsonDataSources sources) { if (videoSessionsById == null) { throw new IllegalStateException( "You need to extract video sessions before attempting to extract sessions"); }/* w ww. ja va 2s.c o m*/ if (categoryToTagMap == null) { throw new IllegalStateException("You need to extract tags before attempting to extract sessions"); } JsonArray result = new JsonArray(); JsonDataSource source = sources.getSource(InputJsonKeys.VendorAPISource.MainTypes.topics.name()); if (source != null) { for (JsonObject origin : source) { if (isVideoSession(origin)) { // Sessions with the Video tag are processed as video library content continue; } if (isHiddenSession(origin)) { // Sessions with a "Hidden from schedule" flag should be ignored continue; } JsonElement title = get(origin, InputJsonKeys.VendorAPISource.Topics.title); // Since the CMS returns an empty keynote as a session, we need to ignore it if (title != null && title.isJsonPrimitive() && "keynote".equalsIgnoreCase(title.getAsString())) { continue; } JsonObject dest = new JsonObject(); // Some sessions require a special ID, so we replace it here... if (title != null && title.isJsonPrimitive() && "after hours".equalsIgnoreCase(title.getAsString())) { set(new JsonPrimitive("__afterhours__"), dest, OutputJsonKeys.Sessions.id); } else { set(origin, InputJsonKeys.VendorAPISource.Topics.id, dest, OutputJsonKeys.Sessions.id); } set(origin, InputJsonKeys.VendorAPISource.Topics.id, dest, OutputJsonKeys.Sessions.url, Converters.SESSION_URL); set(origin, InputJsonKeys.VendorAPISource.Topics.title, dest, OutputJsonKeys.Sessions.title, obfuscate ? Converters.OBFUSCATE : null); set(origin, InputJsonKeys.VendorAPISource.Topics.description, dest, OutputJsonKeys.Sessions.description, obfuscate ? Converters.OBFUSCATE : null); set(origin, InputJsonKeys.VendorAPISource.Topics.start, dest, OutputJsonKeys.Sessions.startTimestamp, Converters.DATETIME); set(origin, InputJsonKeys.VendorAPISource.Topics.finish, dest, OutputJsonKeys.Sessions.endTimestamp, Converters.DATETIME); set(new JsonPrimitive(isFeatured(origin)), dest, OutputJsonKeys.Sessions.isFeatured); JsonElement documents = get(origin, InputJsonKeys.VendorAPISource.Topics.documents); if (documents != null && documents.isJsonArray() && documents.getAsJsonArray().size() > 0) { // Note that the input for SessionPhotoURL is the entity ID. We simply ignore the original // photo URL, because that will be processed by an offline cron script, resizing the // photos and saving them to a known location with the entity ID as its base name. set(origin, InputJsonKeys.VendorAPISource.Topics.id, dest, OutputJsonKeys.Sessions.photoUrl, Converters.SESSION_PHOTO_URL); } setVideoPropertiesInSession(origin, dest); setRelatedContent(origin, dest); JsonElement mainTag = null; JsonElement hashtag = null; JsonElement mainTagColor = null; JsonArray categories = origin .getAsJsonArray(InputJsonKeys.VendorAPISource.Topics.categoryids.name()); JsonArray tags = new JsonArray(); for (JsonElement category : categories) { JsonObject tag = categoryToTagMap.get(category.getAsString()); if (tag != null) { JsonElement tagName = get(tag, OutputJsonKeys.Tags.tag); tags.add(tagName); usedTags.add(tagName.getAsString()); if (mainTag == null) { // check if the tag is from a "default" category. For example, if THEME is the default // category, all sessions will have a "mainTag" property set to the first tag of type THEME JsonElement tagCategory = get(tag, OutputJsonKeys.Tags.category); // THEME, TYPE or TOPIC if (tagCategory.equals(mainCategory)) { mainTag = tagName; mainTagColor = get(tag, OutputJsonKeys.Tags.color); } if (hashtag == null && isHashtag(tag)) { hashtag = get(tag, OutputJsonKeys.Tags.hashtag); if (hashtag == null || hashtag.getAsString() == null || hashtag.getAsString().isEmpty()) { // If no hashtag set in the tagsconf file, we will convert the tagname to find one: hashtag = new JsonPrimitive( get(tag, OutputJsonKeys.Tags.name, Converters.TAG_NAME).getAsString() .toLowerCase()); } } } } } set(tags, dest, OutputJsonKeys.Sessions.tags); if (mainTag != null) { set(mainTag, dest, OutputJsonKeys.Sessions.mainTag); } if (mainTagColor != null) { set(mainTagColor, dest, OutputJsonKeys.Sessions.color); } if (hashtag != null) { set(hashtag, dest, OutputJsonKeys.Sessions.hashtag); } JsonArray speakers = getAsArray(origin, InputJsonKeys.VendorAPISource.Topics.speakerids); if (speakers != null) for (JsonElement speaker : speakers) { String speakerId = speaker.getAsString(); usedSpeakers.add(speakerId); } set(speakers, dest, OutputJsonKeys.Sessions.speakers); JsonArray sessions = origin.getAsJsonArray(InputJsonKeys.VendorAPISource.Topics.sessions.name()); if (sessions != null && sessions.size() > 0) { String roomId = get(sessions.get(0).getAsJsonObject(), InputJsonKeys.VendorAPISource.Sessions.roomid).getAsString(); roomId = Config.ROOM_MAPPING.getRoomId(roomId); set(new JsonPrimitive(roomId), dest, OutputJsonKeys.Sessions.room); // captions URL is set based on the session room, so keep it here. String captionsURL = Config.ROOM_MAPPING.getCaptions(roomId); if (captionsURL != null) { set(new JsonPrimitive(captionsURL), dest, OutputJsonKeys.Sessions.captionsUrl); } } if (Config.DEBUG_FIX_DATA) { DebugDataExtractorHelper.changeSession(dest, usedTags); } result.add(dest); } } return result; }
From source file:com.google.samples.apps.iosched.server.schedule.model.DataExtractor.java
License:Open Source License
public JsonArray extractVideoSessions(JsonDataSources sources) { videoSessionsById = new HashMap<String, JsonObject>(); if (categoryToTagMap == null) { throw new IllegalStateException("You need to extract tags before attempting to extract video sessions"); }/*w w w.j a va 2s.co m*/ if (speakersById == null) { throw new IllegalStateException( "You need to extract speakers before attempting to extract video sessions"); } JsonArray result = new JsonArray(); JsonDataSource source = sources.getSource(InputJsonKeys.VendorAPISource.MainTypes.topics.name()); if (source != null) { for (JsonObject origin : source) { if (!isVideoSession(origin)) { continue; } if (isHiddenSession(origin)) { // Sessions with a "Hidden from schedule" flag should be ignored continue; } JsonObject dest = new JsonObject(); JsonPrimitive vid = setVideoForVideoSession(origin, dest); JsonElement id = get(origin, InputJsonKeys.VendorAPISource.Topics.id); // video library id must be the Youtube video id set(vid, dest, OutputJsonKeys.VideoLibrary.id); set(origin, InputJsonKeys.VendorAPISource.Topics.title, dest, OutputJsonKeys.VideoLibrary.title, obfuscate ? Converters.OBFUSCATE : null); set(origin, InputJsonKeys.VendorAPISource.Topics.description, dest, OutputJsonKeys.VideoLibrary.desc, obfuscate ? Converters.OBFUSCATE : null); set(new JsonPrimitive(Config.CONFERENCE_YEAR), dest, OutputJsonKeys.VideoLibrary.year); JsonElement videoTopic = null; JsonArray categories = origin .getAsJsonArray(InputJsonKeys.VendorAPISource.Topics.categoryids.name()); for (JsonElement category : categories) { JsonObject tag = categoryToTagMap.get(category.getAsString()); if (tag != null) { if (isHashtag(tag)) { videoTopic = get(tag, OutputJsonKeys.Tags.name); // by definition, the first tag that can be a hashtag (usually a TOPIC) is considered the video tag break; } } } if (videoTopic != null) { set(videoTopic, dest, OutputJsonKeys.VideoLibrary.topic); } // Concatenate speakers: JsonArray speakers = getAsArray(origin, InputJsonKeys.VendorAPISource.Topics.speakerids); StringBuilder sb = new StringBuilder(); if (speakers != null) for (int i = 0; i < speakers.size(); i++) { String speakerId = speakers.get(i).getAsString(); usedSpeakers.add(speakerId); JsonObject speaker = speakersById.get(speakerId); if (speaker != null) { sb.append(get(speaker, OutputJsonKeys.Speakers.name).getAsString()); if (i < speakers.size() - 1) sb.append(", "); } } set(new JsonPrimitive(sb.toString()), dest, OutputJsonKeys.VideoLibrary.speakers); videoSessionsById.put(id.getAsString(), dest); result.add(dest); } } return result; }
From source file:com.google.samples.apps.iosched.server.schedule.model.DataExtractor.java
License:Open Source License
private void setRelatedContent(JsonObject origin, JsonObject dest) { JsonArray related = getAsArray(origin, InputJsonKeys.VendorAPISource.Topics.related); JsonArray outputArray = new JsonArray(); if (related == null) { return;//from w w w.j a v a 2 s. co m } for (JsonElement el : related) { if (!el.isJsonObject()) { continue; } JsonObject obj = el.getAsJsonObject(); if (!obj.has("name") || !obj.has("values")) { continue; } if (InputJsonKeys.VendorAPISource.Topics.RELATED_NAME_SESSIONS .equals(obj.getAsJsonPrimitive("name").getAsString())) { JsonElement values = obj.get("topics"); if (!values.isJsonArray()) { continue; } // As per the data specification, related content is formatted as // "video1 title1\nvideo2 title2\n..." for (JsonElement topic : values.getAsJsonArray()) { if (!topic.isJsonObject()) { continue; } JsonObject topicObj = topic.getAsJsonObject(); String id = get(topicObj, InputJsonKeys.VendorAPISource.RelatedTopics.id).getAsString(); String title = get(topicObj, InputJsonKeys.VendorAPISource.RelatedTopics.title).getAsString(); if (id != null && title != null) { JsonObject outputObj = new JsonObject(); set(new JsonPrimitive(id), outputObj, OutputJsonKeys.RelatedContent.id); set(new JsonPrimitive(title), outputObj, OutputJsonKeys.RelatedContent.title); outputArray.add(outputObj); } } set(outputArray, dest, OutputJsonKeys.Sessions.relatedContent); } } }
From source file:com.google.samples.apps.iosched.server.schedule.model.DebugDataExtractorHelper.java
License:Open Source License
public static final void changeRooms(JsonArray allRooms) { for (String room : rooms) { JsonObject dest = new JsonObject(); JsonPrimitive roomId = new JsonPrimitive(room); JsonPrimitive roomName = new JsonPrimitive("Room " + room); DataModelHelper.set(roomId, dest, OutputJsonKeys.Rooms.id); DataModelHelper.set(roomName, dest, OutputJsonKeys.Rooms.name); allRooms.add(dest); }/*from www.j a va 2 s. c om*/ }
From source file:com.google.samples.apps.iosched.server.schedule.model.DebugDataExtractorHelper.java
License:Open Source License
public static final void changeCategories(HashMap<String, JsonObject> categoryToTagMap, JsonArray allTags) { topicTags = new ArrayList<JsonObject>(); Iterator<Map.Entry<String, JsonObject>> it = categoryToTagMap.entrySet().iterator(); while (it.hasNext()) { JsonObject tag = it.next().getValue(); String category = tag.get(OutputJsonKeys.Tags.category.name()).getAsString(); if ("TOPIC".equals(category)) { topicTags.add(tag);//from w w w . j av a 2 s .c om } else { it.remove(); } } for (JsonObject tag : themeTags) { allTags.add(tag); } for (JsonObject tag : typeTags) { allTags.add(tag); } }
From source file:com.google.samples.apps.iosched.server.schedule.model.DebugDataExtractorHelper.java
License:Open Source License
public static final void changeSession(JsonObject session, Set<String> usedTags) { int hash = session.get(OutputJsonKeys.Sessions.id.name()).getAsString().hashCode(); r.setSeed(hash);/*from w w w .j a v a2 s . com*/ // timeslot: int day = days[uniform(2)]; int[] timeSlot = sessionTimes[uniform(sessionTimes.length)]; Calendar start = new GregorianCalendar(2014, Calendar.JUNE, day, timeSlot[0], timeSlot[1], 0); Calendar end = new GregorianCalendar(2014, Calendar.JUNE, day, timeSlot[2], timeSlot[3], 0); long offset = TimeZone.getTimeZone("PST").getOffset(start.getTimeInMillis()); start.setTimeInMillis(start.getTimeInMillis() - offset); end.setTimeInMillis(end.getTimeInMillis() - offset); String startS = formatter.format(start.getTime()); String endS = formatter.format(end.getTime()); DataModelHelper.set(new JsonPrimitive(startS), session, OutputJsonKeys.Sessions.startTimestamp); DataModelHelper.set(new JsonPrimitive(endS), session, OutputJsonKeys.Sessions.endTimestamp); // Room: DataModelHelper.set(new JsonPrimitive(rooms[uniform(rooms.length)]), session, OutputJsonKeys.Sessions.room); JsonArray tags = new JsonArray(); // 2 random topic tags Collections.shuffle(topicTags, r); // not the most efficient, but good enough and avoid duplicates if (topicTags.size() > 0) tags.add(topicTags.get(0).get(OutputJsonKeys.Tags.tag.name())); if (topicTags.size() > 1) tags.add(topicTags.get(1).get(OutputJsonKeys.Tags.tag.name())); // 1 randomly distributed theme tag tags.add(themeTags[roullette(themeDistribution)].get(OutputJsonKeys.Tags.tag.name())); // 1 randomly distributed type tag tags.add(typeTags[roullette(typeDistribution)].get(OutputJsonKeys.Tags.tag.name())); for (JsonElement tag : tags) { usedTags.add(tag.getAsString()); } DataModelHelper.set(tags, session, OutputJsonKeys.Sessions.tags); // Livestream boolean isLiveStream = uniform(2) == 1; if (isLiveStream) { DataModelHelper.set(new JsonPrimitive("https://www.youtube.com/watch?v=dQw4w9WgXcQ"), session, OutputJsonKeys.Sessions.youtubeUrl); DataModelHelper.set(new JsonPrimitive("http://www.google.com/humans.txt"), session, OutputJsonKeys.Sessions.captionsUrl); DataModelHelper.set(new JsonPrimitive(Boolean.TRUE), session, OutputJsonKeys.Sessions.isLivestream); } else { session.remove(OutputJsonKeys.Sessions.youtubeUrl.name()); session.remove(OutputJsonKeys.Sessions.captionsUrl.name()); DataModelHelper.set(new JsonPrimitive(Boolean.FALSE), session, OutputJsonKeys.Sessions.isLivestream); } }
From source file:com.google.samples.apps.iosched.server.schedule.server.servlet.CMSUpdateServlet.java
License:Open Source License
private void process(HttpServletResponse resp, boolean showOnly) throws IOException { // everything ok, let's update StringBuilder summary = new StringBuilder(); JsonObject contents = new JsonObject(); JsonDataSources sources = new VendorDynamicInput().fetchAllDataSources(); for (String entity : sources) { JsonArray array = new JsonArray(); JsonDataSource source = sources.getSource(entity); for (JsonObject obj : source) { array.add(obj); }//from ww w .j ava 2 s . c o m summary.append(entity).append(": ").append(source.size()).append("\n"); contents.add(entity, array); } if (showOnly) { // Show generated contents to the output resp.setContentType("application/json"); Writer writer = Channels.newWriter(Channels.newChannel(resp.getOutputStream()), "UTF-8"); JsonWriter outputWriter = new JsonWriter(writer); outputWriter.setIndent(" "); new Gson().toJson(contents, outputWriter); outputWriter.flush(); } else { // Write file to cloud storage CloudFileManager fileManager = new CloudFileManager(); fileManager.createOrUpdate("__raw_session_data.json", contents, true); // send email Message message = new Message(); message.setSender(Config.EMAIL_FROM); message.setSubject("[iosched-data-update] Manual sync from CMS"); message.setTextBody("Hey,\n\n" + "(this message is autogenerated)\n" + "This is a heads up that " + userService.getCurrentUser().getEmail() + " has just updated the IOSched 2015 data from the Vendor CMS.\n\n" + "Here is a brief status of what has been extracted from the Vendor API:\n" + summary + "\n\n" + "If you want to check the most current data that will soon be sync'ed to the IOSched Android app, " + "check this link: http://storage.googleapis.com/iosched-updater-dev.appspot.com/__raw_session_data.json\n" + "This data will remain unchanged until someone with proper privileges updates it again on https://iosched-updater-dev.appspot.com/cmsupdate\n\n" + "Thanks!\n\n" + "A robot on behalf of the IOSched team!\n\n" + "PS: you are receiving this either because you are an admin of the IOSched project or " + "because you are in a hard-coded list of I/O organizers. If you don't want to " + "receive it anymore, pay me a beer and ask kindly."); MailServiceFactory.getMailService().sendToAdmins(message); resp.sendRedirect("/admin/schedule/updateok.html"); } }