/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package ldbc.snb.datagen.serializer.snb.interactive; import ldbc.snb.datagen.dictionary.Dictionaries; import ldbc.snb.datagen.objects.*; import ldbc.snb.datagen.serializer.HDFSWriter; import ldbc.snb.datagen.serializer.PersonActivitySerializer; import ldbc.snb.datagen.serializer.Turtle; import ldbc.snb.datagen.vocabulary.*; import org.apache.hadoop.conf.Configuration; import java.text.SimpleDateFormat; /** * * @author aprat */ public class TurtlePersonActivitySerializer extends PersonActivitySerializer { private HDFSWriter[] writers; private String empty=""; private long membershipId = 0; private long likeId = 0; private SimpleDateFormat dateTimeFormat = null; private enum FileNames { SOCIAL_NETWORK ("social_network_activity"); private final String name; private FileNames( String name ) { this.name = name; } public String toString() { return name; } } public TurtlePersonActivitySerializer() { } @Override public void initialize(Configuration conf, int reducerId) { dateTimeFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX"); int numFiles = FileNames.values().length; writers = new HDFSWriter[numFiles]; for( int i = 0; i < numFiles; ++i) { writers[i] = new HDFSWriter(conf.get("ldbc.snb.datagen.serializer.socialNetworkDir"), FileNames.values()[i].toString()+"_"+reducerId,conf.getInt("ldbc.snb.datagen.numPartitions",1),conf.getBoolean("ldbc.snb.datagen.serializer.compressed",false),"ttl"); writers[i].writeAllPartitions(Turtle.getNamespaces()); writers[i].writeAllPartitions(Turtle.getStaticNamespaces()); } } @Override public void close() { int numFiles = FileNames.values().length; for(int i = 0; i < numFiles; ++i) { writers[i].close(); } } protected void serialize(final Forum forum ) { StringBuffer result = new StringBuffer(12000); String forumPrefix = SN.getForumURI(forum.id()); Turtle.AddTriple(result, true, false, forumPrefix, RDF.type, SNVOC.Forum); Turtle.AddTriple(result, false, false, forumPrefix, SNVOC.id, Turtle.createDataTypeLiteral(Long.toString(forum.id()), XSD.Long)); Turtle.AddTriple(result, false, false, forumPrefix, SNVOC.title, Turtle.createLiteral(forum.title())); Turtle.AddTriple(result, false, true, forumPrefix, SNVOC.creationDate, Turtle.createDataTypeLiteral(dateTimeFormat.format(forum.creationDate()), XSD.DateTime)); Turtle.createTripleSPO(result, forumPrefix, SNVOC.hasModerator, SN.getPersonURI(forum.moderator().accountId())); for(Integer tag : forum.tags()) { String topic = Dictionaries.tags.getName(tag); Turtle.createTripleSPO(result, forumPrefix, SNVOC.hasTag, SNTAG.fullPrefixed(topic)); } writers[FileNames.SOCIAL_NETWORK.ordinal()].write(result.toString()); } protected void serialize( final Post post ) { StringBuffer result = new StringBuffer(2500); String prefix = SN.getPostURI(post.messageId()); Turtle.AddTriple(result, true, false, prefix, RDF.type, SNVOC.Post); Turtle.AddTriple(result, false, false, prefix, SNVOC.id, Turtle.createDataTypeLiteral(Long.toString(post.messageId()), XSD.Long)); Turtle.AddTriple(result, false, false, prefix, SNVOC.creationDate, Turtle.createDataTypeLiteral(dateTimeFormat.format(post.creationDate()), XSD.DateTime)); Turtle.AddTriple(result, false, false, prefix, SNVOC.ipaddress, Turtle.createLiteral(post.ipAddress().toString())); Turtle.AddTriple(result, false, false, prefix, SNVOC.browser, Turtle.createLiteral(Dictionaries.browsers.getName(post.browserId()))); Turtle.AddTriple(result, false, false, prefix, SNVOC.content, Turtle.createLiteral(post.content())); Turtle.AddTriple(result, false, true, prefix, SNVOC.length, Turtle.createDataTypeLiteral(Integer.toString(post.content().length()), XSD.Int)); Turtle.createTripleSPO(result, prefix, SNVOC.language, Turtle.createLiteral(Dictionaries.languages.getLanguageName(post.language()))); Turtle.createTripleSPO(result, prefix, SNVOC.locatedIn, DBP.fullPrefixed(Dictionaries.places.getPlaceName(post.countryId()))); Turtle.createTripleSPO(result, SN.getForumURI(post.forumId()), SNVOC.containerOf, prefix); Turtle.createTripleSPO(result, prefix, SNVOC.hasCreator, SN.getPersonURI(post.author().accountId())); for( Integer tag : post.tags()) { String topic = Dictionaries.tags.getName(tag); Turtle.createTripleSPO(result, prefix, SNVOC.hasTag, SNTAG.fullPrefixed(topic)); } writers[FileNames.SOCIAL_NETWORK.ordinal()].write(result.toString()); } protected void serialize(final Comment comment ) { StringBuffer result = new StringBuffer(2000); String prefix = SN.getCommentURI(comment.messageId()); Turtle.AddTriple(result, true, false, prefix, RDF.type, SNVOC.Comment); Turtle.AddTriple(result, false, false, prefix, SNVOC.id, Turtle.createDataTypeLiteral(Long.toString(comment.messageId()), XSD.Long)); Turtle.AddTriple(result, false, false, prefix, SNVOC.creationDate, Turtle.createDataTypeLiteral(dateTimeFormat.format(comment.creationDate()), XSD.DateTime)); Turtle.AddTriple(result, false, false, prefix, SNVOC.ipaddress, Turtle.createLiteral(comment.ipAddress().toString())); Turtle.AddTriple(result, false, false, prefix, SNVOC.browser, Turtle.createLiteral(Dictionaries.browsers.getName(comment.browserId()))); Turtle.AddTriple(result, false, false, prefix, SNVOC.content, Turtle.createLiteral(comment.content())); Turtle.AddTriple(result, false, true, prefix, SNVOC.length, Turtle.createDataTypeLiteral(Integer.toString(comment.content().length()), XSD.Int)); String replied = (comment.replyOf() == comment.postId()) ? SN.getPostURI(comment.postId()) : SN.getCommentURI(comment.replyOf()); Turtle.createTripleSPO(result, prefix, SNVOC.replyOf, replied); Turtle.createTripleSPO(result, prefix, SNVOC.locatedIn, DBP.fullPrefixed(Dictionaries.places.getPlaceName(comment.countryId()))); Turtle.createTripleSPO(result, prefix, SNVOC.hasCreator, SN.getPersonURI(comment.author().accountId())); for( Integer tag : comment.tags()) { String topic = Dictionaries.tags.getName(tag); Turtle.createTripleSPO(result, prefix, SNVOC.hasTag, SNTAG.fullPrefixed(topic)); } writers[FileNames.SOCIAL_NETWORK.ordinal()].write(result.toString()); } protected void serialize(final Photo photo ) { StringBuffer result = new StringBuffer(2500); String prefix = SN.getPostURI(photo.messageId()); Turtle.AddTriple(result, true, false, prefix, RDF.type, SNVOC.Post); Turtle.AddTriple(result, false, false, prefix, SNVOC.id, Turtle.createDataTypeLiteral(Long.toString(photo.messageId()), XSD.Long)); Turtle.AddTriple(result, false, false, prefix, SNVOC.hasImage, Turtle.createLiteral(photo.content())); Turtle.AddTriple(result, false, false, prefix, SNVOC.ipaddress, Turtle.createLiteral(photo.ipAddress().toString())); Turtle.AddTriple(result, false, false, prefix, SNVOC.browser, Turtle.createLiteral(Dictionaries.browsers.getName(photo.browserId()))); Turtle.AddTriple(result, false, true, prefix, SNVOC.creationDate, Turtle.createDataTypeLiteral(dateTimeFormat.format(photo.creationDate()), XSD.DateTime)); Turtle.createTripleSPO(result, prefix, SNVOC.hasCreator, SN.getPersonURI(photo.author().accountId())); Turtle.createTripleSPO(result, SN.getForumURI(photo.forumId()), SNVOC.containerOf, prefix); Turtle.createTripleSPO(result, prefix, SNVOC.locatedIn, DBP.fullPrefixed(Dictionaries.places.getPlaceName(photo.countryId()))); for( Integer tag: photo.tags()) { String topic = Dictionaries.tags.getName(tag); Turtle.createTripleSPO(result, prefix, SNVOC.hasTag, SNTAG.fullPrefixed(topic)); } writers[FileNames.SOCIAL_NETWORK.ordinal()].write(result.toString()); } protected void serialize( final ForumMembership membership ) { String memberhipPrefix = SN.getMembershipURI(SN.formId(membershipId)); String forumPrefix = SN.getForumURI(membership.forumId()); StringBuffer result = new StringBuffer(19000); Turtle.createTripleSPO(result, forumPrefix, SNVOC.hasMember, memberhipPrefix); Turtle.AddTriple(result, true, false, memberhipPrefix, SNVOC.hasPerson, SN.getPersonURI(membership.person().accountId())); Turtle.AddTriple(result, false, true, memberhipPrefix, SNVOC.joinDate, Turtle.createDataTypeLiteral(dateTimeFormat.format(membership.creationDate()), XSD.DateTime)); membershipId++; writers[FileNames.SOCIAL_NETWORK.ordinal()].write(result.toString()); } protected void serialize( final Like like ) { StringBuffer result = new StringBuffer(2500); long id = SN.formId(likeId); String likePrefix = SN.getLikeURI(id); Turtle.createTripleSPO(result, SN.getPersonURI(like.user), SNVOC.like, likePrefix); if( like.type == Like.LikeType.POST || like.type == Like.LikeType.PHOTO ) { String prefix = SN.getPostURI(like.messageId); Turtle.AddTriple(result, true, false, likePrefix, SNVOC.hasPost, prefix); } else { String prefix = SN.getCommentURI(like.messageId); Turtle.AddTriple(result, true, false, likePrefix, SNVOC.hasComment, prefix); } Turtle.AddTriple(result, false, true, likePrefix, SNVOC.creationDate, Turtle.createDataTypeLiteral(dateTimeFormat.format(like.date), XSD.DateTime)); likeId++; writers[FileNames.SOCIAL_NETWORK.ordinal()].write(result.toString()); } public void reset() { likeId = 0; membershipId = 0; } }