package ldbc.snb.datagen.serializer.snb.interactive;
import ldbc.snb.datagen.dictionary.Dictionaries;
import ldbc.snb.datagen.objects.*;
import ldbc.snb.datagen.serializer.HDFSCSVWriter;
import ldbc.snb.datagen.serializer.PersonActivitySerializer;
import org.apache.hadoop.conf.Configuration;
import java.util.ArrayList;
/**
* Created by aprat on 17/02/15.
*/
public class CSVMergeForeignPersonActivitySerializer extends PersonActivitySerializer {
private HDFSCSVWriter[] writers;
private ArrayList<String> arguments;
private String empty="";
private enum FileNames {
FORUM ("forum"),
FORUM_HASMEMBER_PERSON ("forum_hasMember_person"),
FORUM_HASTAG_TAG ("forum_hasTag_tag"),
PERSON_LIKES_POST ("person_likes_post"),
PERSON_LIKES_COMMENT ("person_likes_comment"),
POST("post"),
POST_HASTAG_TAG("post_hasTag_tag"),
COMMENT("comment"),
COMMENT_HASTAG_TAG("comment_hasTag_tag");
private final String name;
private FileNames( String name ) {
this.name = name;
}
public String toString() {
return name;
}
}
public CSVMergeForeignPersonActivitySerializer() {
}
@Override
public void initialize(Configuration conf, int reducerId) {
int numFiles = FileNames.values().length;
writers = new HDFSCSVWriter[numFiles];
for( int i = 0; i < numFiles; ++i) {
writers[i] = new HDFSCSVWriter(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),"|",conf.getBoolean("ldbc.snb.datagen.serializer.endlineSeparator",false));
}
arguments = new ArrayList<String>();
arguments.add("id");
arguments.add("title");
arguments.add("creationDate");
arguments.add("moderator");
writers[FileNames.FORUM.ordinal()].writeEntry(arguments);
arguments.clear();
arguments.add("Forum.id");
arguments.add("Person.id");
arguments.add("joinDate");
writers[FileNames.FORUM_HASMEMBER_PERSON.ordinal()].writeEntry(arguments);
arguments.clear();
arguments.add("Forum.id");
arguments.add("Tag.id");
writers[FileNames.FORUM_HASTAG_TAG.ordinal()].writeEntry(arguments);
arguments.clear();
arguments.add("Person.id");
arguments.add("Post.id");
arguments.add("creationDate");
writers[FileNames.PERSON_LIKES_POST.ordinal()].writeEntry(arguments);
arguments.clear();
arguments.add("Person.id");
arguments.add("Comment.id");
arguments.add("creationDate");
writers[FileNames.PERSON_LIKES_COMMENT.ordinal()].writeEntry(arguments);
arguments.clear();
arguments.add("id");
arguments.add("imageFile");
arguments.add("creationDate");
arguments.add("locationIP");
arguments.add("browserUsed");
arguments.add("language");
arguments.add("content");
arguments.add("length");
arguments.add("creator");
arguments.add("Forum.id");
arguments.add("place");
writers[FileNames.POST.ordinal()].writeEntry(arguments);
arguments.clear();
arguments.add("Post.id");
arguments.add("Tag.id");
writers[FileNames.POST_HASTAG_TAG.ordinal()].writeEntry(arguments);
arguments.clear();
arguments.add("id");
arguments.add("creationDate");
arguments.add("locationIP");
arguments.add("browserUsed");
arguments.add("content");
arguments.add("length");
arguments.add("creator");
arguments.add("place");
arguments.add("replyOfPost");
arguments.add("replyOfComment");
writers[FileNames.COMMENT.ordinal()].writeEntry(arguments);
arguments.clear();
arguments.add("Comment.id");
arguments.add("Tag.id");
writers[FileNames.COMMENT_HASTAG_TAG.ordinal()].writeEntry(arguments);
arguments.clear();
}
@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 ) {
String dateString = Dictionaries.dates.formatDateTime(forum.creationDate());
arguments.add(Long.toString(forum.id()));
arguments.add(forum.title());
arguments.add(dateString);
arguments.add(Long.toString(forum.moderator().accountId()));
writers[FileNames.FORUM.ordinal()].writeEntry(arguments);
arguments.clear();
for( Integer i : forum.tags()) {
arguments.add(Long.toString(forum.id()));
arguments.add(Integer.toString(i));
writers[FileNames.FORUM_HASTAG_TAG.ordinal()].writeEntry(arguments);
arguments.clear();
}
}
protected void serialize( final Post post ) {
arguments.add(Long.toString(post.messageId()));
arguments.add(empty);
arguments.add(Dictionaries.dates.formatDateTime(post.creationDate()));
arguments.add(post.ipAddress().toString());
arguments.add(Dictionaries.browsers.getName(post.browserId()));
arguments.add(Dictionaries.languages.getLanguageName(post.language()));
arguments.add(post.content());
arguments.add(Integer.toString(post.content().length()));
arguments.add(Long.toString(post.author().accountId()));
arguments.add(Long.toString(post.forumId()));
arguments.add(Integer.toString(post.countryId()));
writers[FileNames.POST.ordinal()].writeEntry(arguments);
arguments.clear();
for( Integer t : post.tags() ) {
arguments.add(Long.toString(post.messageId()));
arguments.add(Integer.toString(t));
writers[FileNames.POST_HASTAG_TAG.ordinal()].writeEntry(arguments);
arguments.clear();
}
}
protected void serialize( final Comment comment ) {
arguments.add(Long.toString(comment.messageId()));
arguments.add(Dictionaries.dates.formatDateTime(comment.creationDate()));
arguments.add(comment.ipAddress().toString());
arguments.add(Dictionaries.browsers.getName(comment.browserId()));
arguments.add(comment.content());
arguments.add(Integer.toString(comment.content().length()));
arguments.add(Long.toString(comment.author().accountId()));
arguments.add(Integer.toString(comment.countryId()));
if (comment.replyOf() == comment.postId()) {
arguments.add(Long.toString(comment.postId()));
arguments.add(empty);
} else {
arguments.add(empty);
arguments.add(Long.toString(comment.replyOf()));
}
writers[FileNames.COMMENT.ordinal()].writeEntry(arguments);
arguments.clear();
for( Integer t : comment.tags() ) {
arguments.add(Long.toString(comment.messageId()));
arguments.add(Integer.toString(t));
writers[FileNames.COMMENT_HASTAG_TAG.ordinal()].writeEntry(arguments);
arguments.clear();
}
}
protected void serialize(final Photo photo ) {
arguments.add(Long.toString(photo.messageId()));
arguments.add(photo.content());
arguments.add(Dictionaries.dates.formatDateTime(photo.creationDate()));
arguments.add(photo.ipAddress().toString());
arguments.add(Dictionaries.browsers.getName(photo.browserId()));
arguments.add(empty);
arguments.add(empty);
arguments.add(Integer.toString(0));
arguments.add(Long.toString(photo.author().accountId()));
arguments.add(Long.toString(photo.forumId()));
arguments.add(Integer.toString(photo.countryId()));
writers[FileNames.POST.ordinal()].writeEntry(arguments);
arguments.clear();
for( Integer t : photo.tags() ) {
arguments.add(Long.toString(photo.messageId()));
arguments.add(Integer.toString(t));
writers[FileNames.POST_HASTAG_TAG.ordinal()].writeEntry(arguments);
arguments.clear();
}
}
protected void serialize(final ForumMembership membership ) {
arguments.add(Long.toString(membership.forumId()));
arguments.add(Long.toString(membership.person().accountId()));
arguments.add(Dictionaries.dates.formatDateTime(membership.creationDate()));
writers[FileNames.FORUM_HASMEMBER_PERSON.ordinal()].writeEntry(arguments);
arguments.clear();
}
protected void serialize( final Like like ) {
arguments.add(Long.toString(like.user));
arguments.add(Long.toString(like.messageId));
arguments.add(Dictionaries.dates.formatDateTime(like.date));
if( like.type == Like.LikeType.POST || like.type == Like.LikeType.PHOTO ) {
writers[FileNames.PERSON_LIKES_POST.ordinal()].writeEntry(arguments);
arguments.clear();
} else {
writers[FileNames.PERSON_LIKES_COMMENT.ordinal()].writeEntry(arguments);
arguments.clear();
}
}
public void reset() {
}
}