/* * Copyright (C) 2015 SoftIndex LLC. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package io.datakernel.cube; import io.datakernel.aggregation.annotation.Key; import io.datakernel.aggregation.annotation.Measure; import io.datakernel.serializer.annotations.Serialize; import java.util.List; import java.util.Random; import static com.google.common.collect.Lists.newArrayList; /** * Represents a log item (or fact). * * @Serialize annotation is used to mark fields that are to be serialized. * Such fields must also be declared 'public' for serializer to work. */ public class LogItem { /* Dimensions */ @Key @Serialize(order = 0) public int date = randomInt(16570, 16580); @Key @Serialize(order = 1) public int advertiser = randomInt(0, 10); @Key @Serialize(order = 2) public int campaign = randomInt(0, 10); @Key @Serialize(order = 3) public int banner = randomInt(0, 10); @Measure @Serialize(order = 4) public long impressions; @Measure @Serialize(order = 5) public long clicks; @Measure @Serialize(order = 6) public long conversions; @Measure @Serialize(order = 7) public double revenue; public LogItem() { } public LogItem(int date, int advertiser, int campaign, int banner, long impressions, long clicks, long conversions, double revenue) { this.date = date; this.advertiser = advertiser; this.campaign = campaign; this.banner = banner; this.impressions = impressions; this.clicks = clicks; this.conversions = conversions; this.revenue = revenue; } public LogItem(long impressions, long clicks, long conversions, double revenue) { this.impressions = impressions; this.clicks = clicks; this.conversions = conversions; this.revenue = revenue; } /* Static factory methods for random facts */ public static LogItem randomImpressionFact() { return new LogItem(1, 0, 0, 0); } public static LogItem randomClickFact() { return new LogItem(0, 1, 0, 0); } public static LogItem randomConversionFact() { return new LogItem(0, 0, 1, randomDouble(0, 10)); } public static List<LogItem> getListOfRandomLogItems(int numberOfItems) { List<LogItem> logItems = newArrayList(); for (int i = 0; i < numberOfItems; ++i) { int type = randomInt(0, 2); if (type == 0) { logItems.add(randomImpressionFact()); } else if (type == 1) { logItems.add(randomClickFact()); } else if (type == 2) { logItems.add(randomConversionFact()); } } return logItems; } private final static Random RANDOM = new Random(); public static int randomInt(int min, int max) { return RANDOM.nextInt((max - min) + 1) + min; } public static double randomDouble(double min, double max) { return min + (max - min) * RANDOM.nextDouble(); } }