/* * 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.generator; import ldbc.snb.datagen.dictionary.Dictionaries; import ldbc.snb.datagen.objects.Forum; import ldbc.snb.datagen.objects.ForumMembership; import ldbc.snb.datagen.objects.Like; import ldbc.snb.datagen.objects.Like.LikeType; import ldbc.snb.datagen.objects.Message; import ldbc.snb.datagen.serializer.PersonActivityExporter; import java.io.IOException; import java.util.ArrayList; import java.util.Random; /** * * @author aprat */ public class LikeGenerator { private double maxNumberOfLikes; private final PowerDistGenerator likesGenerator_; private Like like; public LikeGenerator() { likesGenerator_ = new PowerDistGenerator(1,DatagenParams.maxNumLike,0.07); this.like = new Like(); } public void generateLikes(Random random, final Forum forum, final Message message, LikeType type, PersonActivityExporter exporter) throws IOException { int numMembers = forum.memberships().size(); int numLikes = likesGenerator_.getValue(random); numLikes = numLikes >= numMembers ? numMembers : numLikes; ArrayList<ForumMembership> memberships = forum.memberships(); int startIndex = 0; if( numLikes < numMembers ) { startIndex = random.nextInt(numMembers - numLikes); } for (int i = 0; i < numLikes; i++) { ForumMembership membership = memberships.get(startIndex+i); long minDate = message.creationDate() > memberships.get(startIndex+i).creationDate() ? message.creationDate() : membership.creationDate(); //long date = Math.max(Dictionaries.dates.randomSevenDays(random),DatagenParams.deltaTime) + minDate; long date = Dictionaries.dates.randomDate(random, minDate, Dictionaries.dates.randomSevenDays(random) + minDate); /*if( date <= Dictionaries.dates.getEndDateTime() )*/ { assert((membership.person().creationDate() + DatagenParams.deltaTime) < date); like.user = membership.person().accountId(); like.userCreationDate = membership.person().creationDate(); like.messageId = message.messageId(); like.date = date; like.type = type; exporter.export(like); } } return; } }