You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@bigtop.apache.org by rn...@apache.org on 2015/08/25 16:21:42 UTC
[08/11] bigtop git commit: BIGTOP-1984. Extract samplers library from
BigPetStore data generator
http://git-wip-us.apache.org/repos/asf/bigtop/blob/15af83eb/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/transaction/CategoryWeightFunction.java
----------------------------------------------------------------------
diff --git a/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/transaction/CategoryWeightFunction.java b/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/transaction/CategoryWeightFunction.java
deleted file mode 100644
index 09b7327..0000000
--- a/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/transaction/CategoryWeightFunction.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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 org.apache.bigtop.bigpetstore.datagenerator.generators.transaction;
-
-import org.apache.bigtop.bigpetstore.datagenerator.framework.pdfs.ExponentialPDF;
-import org.apache.bigtop.bigpetstore.datagenerator.framework.pdfs.ProbabilityDensityFunction;
-import org.apache.bigtop.bigpetstore.datagenerator.framework.wfs.ConditionalWeightFunction;
-import org.apache.bigtop.bigpetstore.datagenerator.framework.wfs.WeightFunction;
-
-public class CategoryWeightFunction implements ConditionalWeightFunction<Double, Double>
-{
- private final ProbabilityDensityFunction<Double> pdf;
-
- public CategoryWeightFunction(double averagePurchaseTriggerTime)
- {
- double lambda = 1.0 / averagePurchaseTriggerTime;
- pdf = new ExponentialPDF(lambda);
- }
-
- @Override
- public double weight(Double exhaustionTime, Double transactionTime)
- {
- double remainingTime = Math.max(0.0, exhaustionTime - transactionTime);
- return pdf.probability(remainingTime);
- }
-}
http://git-wip-us.apache.org/repos/asf/bigtop/blob/15af83eb/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/transaction/CustomerInventory.java
----------------------------------------------------------------------
diff --git a/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/transaction/CustomerInventory.java b/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/transaction/CustomerInventory.java
deleted file mode 100644
index f0f538a..0000000
--- a/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/transaction/CustomerInventory.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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 org.apache.bigtop.bigpetstore.datagenerator.generators.transaction;
-
-import java.util.Map;
-
-import org.apache.bigtop.bigpetstore.datagenerator.Constants;
-import org.apache.bigtop.bigpetstore.datagenerator.datamodels.Product;
-
-import com.google.common.collect.ImmutableMap;
-import com.google.common.collect.Maps;
-
-public class CustomerInventory
-{
- final private ImmutableMap<String, ProductCategoryInventory> productCategoryInventories;
-
- public CustomerInventory(Map<String, ProductCategoryInventory> productCategoryInventories)
- {
- this.productCategoryInventories = ImmutableMap.copyOf(productCategoryInventories);
- }
-
- public void simulatePurchase(double time, Product product) throws Exception
- {
- String category = product.getFieldValueAsString(Constants.PRODUCT_CATEGORY);
- ProductCategoryInventory inventory = productCategoryInventories.get(category);
- inventory.simulatePurchase(time, product);
- }
-
- public ImmutableMap<String, Double> getInventoryAmounts(double time)
- {
- Map<String, Double> amounts = Maps.newHashMap();
- for(String category : productCategoryInventories.keySet())
- {
- double amount = productCategoryInventories.get(category).findRemainingAmount(time);
- amounts.put(category, amount);
- }
-
- return ImmutableMap.copyOf(amounts);
- }
-
- public ImmutableMap<String, Double> getExhaustionTimes()
- {
- Map<String, Double> times = Maps.newHashMap();
- for(String category : productCategoryInventories.keySet())
- {
- double time = productCategoryInventories.get(category).findExhaustionTime();
- times.put(category, time);
- }
-
- return ImmutableMap.copyOf(times);
- }
-}
http://git-wip-us.apache.org/repos/asf/bigtop/blob/15af83eb/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/transaction/CustomerInventoryBuilder.java
----------------------------------------------------------------------
diff --git a/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/transaction/CustomerInventoryBuilder.java b/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/transaction/CustomerInventoryBuilder.java
deleted file mode 100644
index 80ed944..0000000
--- a/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/transaction/CustomerInventoryBuilder.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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 org.apache.bigtop.bigpetstore.datagenerator.generators.transaction;
-
-import java.util.Collection;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.bigtop.bigpetstore.datagenerator.datamodels.inputs.ProductCategory;
-import org.apache.bigtop.bigpetstore.datagenerator.framework.SeedFactory;
-
-import com.google.common.collect.Lists;
-import com.google.common.collect.Maps;
-
-public class CustomerInventoryBuilder
-{
- final private List<ProductCategory> productCategories;
- final private SeedFactory seedFactory;
- final private CustomerTransactionParameters parameters;
-
- public CustomerInventoryBuilder(CustomerTransactionParameters parameters,
- SeedFactory seedFactory)
- {
- productCategories = Lists.newArrayList();
- this.seedFactory = seedFactory;
- this.parameters = parameters;
- }
-
- public void addProductCategory(ProductCategory productCategory)
- {
- this.productCategories.add(productCategory);
- }
-
- public void addAllProductCategories(Collection<ProductCategory> productCategories)
- {
- this.productCategories.addAll(productCategories);
- }
-
- public CustomerInventory build()
- {
- Map<String, ProductCategoryInventory> inventories = Maps.newHashMap();
- for(ProductCategory productCategory : productCategories)
- {
- if(parameters.countPetsBySpecies(productCategory.getApplicableSpecies()) > 0)
- {
- ProductCategoryInventory inventory = new ProductCategoryInventory(productCategory,
- parameters, seedFactory);
- inventories.put(productCategory.getCategoryLabel(), inventory);
- }
- }
-
- return new CustomerInventory(inventories);
- }
-}
-
-
http://git-wip-us.apache.org/repos/asf/bigtop/blob/15af83eb/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/transaction/CustomerTransactionParameters.java
----------------------------------------------------------------------
diff --git a/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/transaction/CustomerTransactionParameters.java b/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/transaction/CustomerTransactionParameters.java
deleted file mode 100644
index 9267635..0000000
--- a/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/transaction/CustomerTransactionParameters.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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 org.apache.bigtop.bigpetstore.datagenerator.generators.transaction;
-
-import java.util.Collection;
-import java.util.Set;
-
-import org.apache.bigtop.bigpetstore.datagenerator.datamodels.PetSpecies;
-
-import com.google.common.collect.ImmutableMultiset;
-import com.google.common.collect.Multiset;
-import com.google.common.collect.Sets;
-
-public class CustomerTransactionParameters
-{
- final ImmutableMultiset<PetSpecies> petCounts;
- final double averageTransactionTriggerTime;
- final double averagePurchaseTriggerTime;
-
- public CustomerTransactionParameters(Multiset<PetSpecies> petCounts,
- double averageTransactionTriggerTime, double averagePurchaseTriggerTime)
- {
- this.petCounts = ImmutableMultiset.copyOf(petCounts);
- this.averageTransactionTriggerTime = averageTransactionTriggerTime;
- this.averagePurchaseTriggerTime = averagePurchaseTriggerTime;
- }
-
- public double getAverageTransactionTriggerTime()
- {
- return averageTransactionTriggerTime;
- }
-
- public double getAveragePurchaseTriggerTime()
- {
- return averagePurchaseTriggerTime;
- }
-
- public int countPetsBySpecies(PetSpecies species)
- {
- return petCounts.count(species);
- }
-
- public int countPetsBySpecies(Collection<PetSpecies> allSpecies)
- {
- int count = 0;
- Set<PetSpecies> speciesSet = Sets.newHashSet(allSpecies);
- for(PetSpecies species : speciesSet)
- {
- count += countPetsBySpecies(species);
- }
-
- return count;
- }
-
- public int countPets()
- {
- return petCounts.size();
- }
-
-}
http://git-wip-us.apache.org/repos/asf/bigtop/blob/15af83eb/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/transaction/CustomerTransactionParametersBuilder.java
----------------------------------------------------------------------
diff --git a/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/transaction/CustomerTransactionParametersBuilder.java b/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/transaction/CustomerTransactionParametersBuilder.java
deleted file mode 100644
index 9adfa4c..0000000
--- a/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/transaction/CustomerTransactionParametersBuilder.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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 org.apache.bigtop.bigpetstore.datagenerator.generators.transaction;
-
-import org.apache.bigtop.bigpetstore.datagenerator.datamodels.PetSpecies;
-
-import com.google.common.collect.HashMultiset;
-import com.google.common.collect.Multiset;
-
-public class CustomerTransactionParametersBuilder
-{
- private Multiset<PetSpecies> petCounts;
- private double averageTransactionTriggerTime;
- private double averagePurchaseTriggerTime;
-
- public CustomerTransactionParametersBuilder()
- {
- this.petCounts = HashMultiset.create();
- this.averagePurchaseTriggerTime = 0.0;
- this.averageTransactionTriggerTime = 0.0;
- }
-
- public void addPet(PetSpecies species)
- {
- this.petCounts.add(species);
- }
-
- public void setAverageTransactionTriggerTime(
- double averageTransactionTriggerTime)
- {
- this.averageTransactionTriggerTime = averageTransactionTriggerTime;
- }
-
- public void setAveragePurchaseTriggerTime(double averagePurchaseTriggerTime)
- {
- this.averagePurchaseTriggerTime = averagePurchaseTriggerTime;
- }
-
- public CustomerTransactionParameters build()
- {
- return new CustomerTransactionParameters(this.petCounts,
- this.averageTransactionTriggerTime,
- this.averagePurchaseTriggerTime);
- }
-}
http://git-wip-us.apache.org/repos/asf/bigtop/blob/15af83eb/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/transaction/CustomerTransactionParametersSampler.java
----------------------------------------------------------------------
diff --git a/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/transaction/CustomerTransactionParametersSampler.java b/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/transaction/CustomerTransactionParametersSampler.java
deleted file mode 100644
index 8495fd9..0000000
--- a/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/transaction/CustomerTransactionParametersSampler.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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 org.apache.bigtop.bigpetstore.datagenerator.generators.transaction;
-
-import org.apache.bigtop.bigpetstore.datagenerator.datamodels.PetSpecies;
-import org.apache.bigtop.bigpetstore.datagenerator.framework.samplers.Sampler;
-
-public class CustomerTransactionParametersSampler implements Sampler<CustomerTransactionParameters>
-{
- final private Sampler<Integer> nPetsSampler;
- final private Sampler<PetSpecies> petSpeciesSampler;
- final private Sampler<Double> purchaseTriggerTimeSampler;
- final private Sampler<Double> transactionTriggerTimeSampler;
-
- public CustomerTransactionParametersSampler(Sampler<Integer> nPetsSampler,
- Sampler<PetSpecies> petSpeciesSampler,
- Sampler<Double> purchaseTriggerTimeSampler,
- Sampler<Double> transactionTriggerTimeSampler)
- {
-
- this.nPetsSampler = nPetsSampler;
- this.petSpeciesSampler = petSpeciesSampler;
- this.purchaseTriggerTimeSampler = purchaseTriggerTimeSampler;
- this.transactionTriggerTimeSampler = transactionTriggerTimeSampler;
- }
-
- protected void generatePets(CustomerTransactionParametersBuilder builder) throws Exception
- {
- int nPets = this.nPetsSampler.sample();
-
- for(int i = 0; i < nPets; i++)
- {
- PetSpecies species = this.petSpeciesSampler.sample();
- builder.addPet(species);
- }
- }
-
- public CustomerTransactionParameters sample() throws Exception
- {
- CustomerTransactionParametersBuilder builder = new CustomerTransactionParametersBuilder();
-
- this.generatePets(builder);
- builder.setAveragePurchaseTriggerTime(this.purchaseTriggerTimeSampler.sample());
- builder.setAverageTransactionTriggerTime(this.transactionTriggerTimeSampler.sample());
-
- return builder.build();
- }
-}
http://git-wip-us.apache.org/repos/asf/bigtop/blob/15af83eb/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/transaction/CustomerTransactionParametersSamplerBuilder.java
----------------------------------------------------------------------
diff --git a/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/transaction/CustomerTransactionParametersSamplerBuilder.java b/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/transaction/CustomerTransactionParametersSamplerBuilder.java
deleted file mode 100644
index 249a456..0000000
--- a/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/transaction/CustomerTransactionParametersSamplerBuilder.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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 org.apache.bigtop.bigpetstore.datagenerator.generators.transaction;
-
-import java.util.Arrays;
-
-import org.apache.bigtop.bigpetstore.datagenerator.Constants;
-import org.apache.bigtop.bigpetstore.datagenerator.datamodels.PetSpecies;
-import org.apache.bigtop.bigpetstore.datagenerator.framework.SeedFactory;
-import org.apache.bigtop.bigpetstore.datagenerator.framework.samplers.BoundedMultiModalGaussianSampler;
-import org.apache.bigtop.bigpetstore.datagenerator.framework.samplers.RouletteWheelSampler;
-import org.apache.bigtop.bigpetstore.datagenerator.framework.samplers.Sampler;
-import org.apache.bigtop.bigpetstore.datagenerator.framework.samplers.UniformIntSampler;
-
-public class CustomerTransactionParametersSamplerBuilder
-{
- final private SeedFactory seedFactory;
-
- public CustomerTransactionParametersSamplerBuilder(SeedFactory seedFactory)
- {
- this.seedFactory = seedFactory;
- }
-
- public Sampler<CustomerTransactionParameters> build()
- {
- Sampler<Integer> nPetsSampler = new UniformIntSampler(Constants.MIN_PETS, Constants.MAX_PETS, seedFactory);
-
- Sampler<PetSpecies> petSpeciesSampler = RouletteWheelSampler.createUniform(Arrays.asList(PetSpecies.values()), seedFactory);
-
- Sampler<Double> transactionTriggerTimeSampler = new BoundedMultiModalGaussianSampler(Constants.TRANSACTION_TRIGGER_TIME_GAUSSIANS,
- Constants.TRANSACTION_TRIGGER_TIME_MIN, Constants.TRANSACTION_TRIGGER_TIME_MAX,
- seedFactory);
-
- Sampler<Double> purchaseTriggerTimeSampler = new BoundedMultiModalGaussianSampler(Constants.PURCHASE_TRIGGER_TIME_GAUSSIANS,
- Constants.PURCHASE_TRIGGER_TIME_MIN, Constants.PURCHASE_TRIGGER_TIME_MAX,
- seedFactory);
-
- return new CustomerTransactionParametersSampler(nPetsSampler, petSpeciesSampler,
- transactionTriggerTimeSampler, purchaseTriggerTimeSampler);
- }
-
-}
http://git-wip-us.apache.org/repos/asf/bigtop/blob/15af83eb/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/transaction/ProductCategoryInventory.java
----------------------------------------------------------------------
diff --git a/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/transaction/ProductCategoryInventory.java b/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/transaction/ProductCategoryInventory.java
deleted file mode 100644
index 8d43b82..0000000
--- a/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/transaction/ProductCategoryInventory.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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 org.apache.bigtop.bigpetstore.datagenerator.generators.transaction;
-
-import org.apache.bigtop.bigpetstore.datagenerator.Constants;
-import org.apache.bigtop.bigpetstore.datagenerator.datamodels.Product;
-import org.apache.bigtop.bigpetstore.datagenerator.datamodels.inputs.ProductCategory;
-import org.apache.bigtop.bigpetstore.datagenerator.framework.SeedFactory;
-
-public class ProductCategoryInventory
-{
- private ProductCategoryUsageTrajectory trajectory;
- private ProductCategoryUsageSimulator simulator;
-
- public ProductCategoryInventory(ProductCategory productCategory, CustomerTransactionParameters parameters,
- SeedFactory seedFactory)
- {
-
- double amountUsedAverage = productCategory.getBaseAmountUsedAverage() * parameters.countPetsBySpecies(productCategory.getApplicableSpecies());
- double amountUsedVariance = productCategory.getBaseAmountUsedVariance() * parameters.countPetsBySpecies(productCategory.getApplicableSpecies());
-
- trajectory = new ProductCategoryUsageTrajectory(0.0, 0.0);
- simulator = new ProductCategoryUsageSimulator(productCategory.getDailyUsageRate(),
- amountUsedAverage, amountUsedVariance, seedFactory);
- }
-
- public void simulatePurchase(double time, Product product) throws Exception
- {
- double amountPurchased = product.getFieldValueAsDouble(Constants.PRODUCT_QUANTITY);
-
- double amountRemainingBeforePurchase = trajectory.amountAtTime(time);
-
- trajectory = simulator.simulate(time, amountRemainingBeforePurchase + amountPurchased);
- }
-
- public double findExhaustionTime()
- {
- return trajectory.getLastTime();
- }
-
- public double findRemainingAmount(double time)
- {
- return trajectory.amountAtTime(time);
- }
-}
http://git-wip-us.apache.org/repos/asf/bigtop/blob/15af83eb/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/transaction/ProductCategoryUsageSimulator.java
----------------------------------------------------------------------
diff --git a/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/transaction/ProductCategoryUsageSimulator.java b/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/transaction/ProductCategoryUsageSimulator.java
deleted file mode 100644
index b09d395..0000000
--- a/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/transaction/ProductCategoryUsageSimulator.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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 org.apache.bigtop.bigpetstore.datagenerator.generators.transaction;
-
-import org.apache.bigtop.bigpetstore.datagenerator.framework.SeedFactory;
-import org.apache.bigtop.bigpetstore.datagenerator.framework.samplers.ExponentialSampler;
-import org.apache.bigtop.bigpetstore.datagenerator.framework.samplers.GaussianSampler;
-import org.apache.bigtop.bigpetstore.datagenerator.framework.samplers.Sampler;
-
-public class ProductCategoryUsageSimulator
-{
- final private double amountUsedAverage;
- final private double amountUsedVariance;
-
- final private Sampler<Double> timestepSampler;
- final private Sampler<Double> R;
-
- public ProductCategoryUsageSimulator(double dailyUsageRate, double amountUsedAverage,
- double amountUsedVariance, SeedFactory seedFactory)
- {
- this.amountUsedAverage = amountUsedAverage;
- this.amountUsedVariance = amountUsedVariance;
-
- timestepSampler = new ExponentialSampler(dailyUsageRate, seedFactory);
- R = new GaussianSampler(0.0, 1.0, seedFactory);
- }
-
- private void step(ProductCategoryUsageTrajectory trajectory) throws Exception
- {
- // given in days since last usage
- double timestep = timestepSampler.sample();
-
- double r = R.sample();
-
- // given in units per day
- double usageAmount = this.amountUsedAverage * timestep +
- Math.sqrt(this.amountUsedVariance * timestep) * r;
-
- // can't use a negative amount
- usageAmount = Math.max(usageAmount, 0.0);
-
- double remainingAmount = Math.max(0.0, trajectory.getLastAmount() - usageAmount);
- double time = trajectory.getLastTime() + timestep;
-
- trajectory.append(time, remainingAmount);
- }
-
- public ProductCategoryUsageTrajectory simulate(double initialTime, double initialAmount) throws Exception
- {
- ProductCategoryUsageTrajectory trajectory = new ProductCategoryUsageTrajectory(initialTime, initialAmount);
-
- while(trajectory.getLastAmount() > 0.0)
- {
- step(trajectory);
- }
-
- return trajectory;
- }
-}
http://git-wip-us.apache.org/repos/asf/bigtop/blob/15af83eb/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/transaction/ProductCategoryUsageTrajectory.java
----------------------------------------------------------------------
diff --git a/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/transaction/ProductCategoryUsageTrajectory.java b/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/transaction/ProductCategoryUsageTrajectory.java
deleted file mode 100644
index f3c20c7..0000000
--- a/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/transaction/ProductCategoryUsageTrajectory.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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 org.apache.bigtop.bigpetstore.datagenerator.generators.transaction;
-
-import java.util.List;
-
-import org.apache.commons.lang3.tuple.Pair;
-
-import com.google.common.collect.Lists;
-
-public class ProductCategoryUsageTrajectory
-{
- final private List<Pair<Double, Double>> trajectory;
-
- public ProductCategoryUsageTrajectory(double initialTime, double initialAmount)
- {
- trajectory = Lists.newArrayList();
- this.append(initialTime, initialAmount);
- }
-
- public void append(double time, double amount)
- {
- trajectory.add(Pair.of(time, amount));
- }
-
- public double getLastAmount()
- {
- return trajectory.get(trajectory.size() - 1).getValue();
- }
-
- public double getLastTime()
- {
- return trajectory.get(trajectory.size() - 1).getKey();
- }
-
- public double amountAtTime(double time)
- {
- Pair<Double, Double> previous = null;
- for(Pair<Double, Double> entry : trajectory)
- {
- if(entry.getKey() > time)
- break;
- previous = entry;
- }
-
- if(previous == null)
- return 0.0;
-
- return previous.getValue();
- }
-
- public Pair<Double, Double> getStep(int idx)
- {
- return trajectory.get(idx);
- }
-
- public int size()
- {
- return trajectory.size();
- }
-}
http://git-wip-us.apache.org/repos/asf/bigtop/blob/15af83eb/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/transaction/ProposedPurchaseTimeSampler.java
----------------------------------------------------------------------
diff --git a/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/transaction/ProposedPurchaseTimeSampler.java b/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/transaction/ProposedPurchaseTimeSampler.java
deleted file mode 100644
index 3fa2ef9..0000000
--- a/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/transaction/ProposedPurchaseTimeSampler.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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 org.apache.bigtop.bigpetstore.datagenerator.generators.transaction;
-
-import org.apache.bigtop.bigpetstore.datagenerator.framework.samplers.Sampler;
-
-public class ProposedPurchaseTimeSampler implements Sampler<Double>
-{
- final CustomerInventory customerInventory;
- final Sampler<Double> arrivalTimeSampler;
-
- public ProposedPurchaseTimeSampler(CustomerInventory customerInventory,
- Sampler<Double> arrivalTimeSampler)
- {
- this.customerInventory = customerInventory;
- this.arrivalTimeSampler = arrivalTimeSampler;
- }
-
- protected double categoryProposedTime(double exhaustionTime) throws Exception
- {
- return Math.max(exhaustionTime - arrivalTimeSampler.sample(), 0.0);
- }
-
- public Double sample() throws Exception
- {
- double minProposedTime = Double.MAX_VALUE;
- for(Double exhaustionTime : this.customerInventory.getExhaustionTimes().values())
- {
- double proposedTime = this.categoryProposedTime(exhaustionTime);
- minProposedTime = Math.min(proposedTime, minProposedTime);
- }
-
- return minProposedTime;
- }
-
-}
http://git-wip-us.apache.org/repos/asf/bigtop/blob/15af83eb/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/transaction/TransactionPurchasesHiddenMarkovModel.java
----------------------------------------------------------------------
diff --git a/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/transaction/TransactionPurchasesHiddenMarkovModel.java b/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/transaction/TransactionPurchasesHiddenMarkovModel.java
deleted file mode 100644
index 83924e3..0000000
--- a/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/transaction/TransactionPurchasesHiddenMarkovModel.java
+++ /dev/null
@@ -1,108 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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 org.apache.bigtop.bigpetstore.datagenerator.generators.transaction;
-
-import java.util.List;
-import java.util.Map;
-
-import org.apache.bigtop.bigpetstore.datagenerator.Constants;
-import org.apache.bigtop.bigpetstore.datagenerator.datamodels.Product;
-import org.apache.bigtop.bigpetstore.datagenerator.framework.SeedFactory;
-import org.apache.bigtop.bigpetstore.datagenerator.framework.samplers.ConditionalSampler;
-import org.apache.bigtop.bigpetstore.datagenerator.framework.samplers.RouletteWheelSampler;
-import org.apache.bigtop.bigpetstore.datagenerator.framework.samplers.Sampler;
-import org.apache.bigtop.bigpetstore.datagenerator.framework.wfs.ConditionalWeightFunction;
-
-import com.google.common.collect.ImmutableMap;
-import com.google.common.collect.Lists;
-import com.google.common.collect.Maps;
-
-public class TransactionPurchasesHiddenMarkovModel implements ConditionalSampler<List<Product>, Double>
-{
-
- protected final static String STOP_STATE = "STOP";
-
- final ConditionalSampler<Product, String> purchasingProcesses;
- final ConditionalWeightFunction<Double, Double> categoryWF;
- final CustomerInventory inventory;
-
- final SeedFactory seedFactory;
-
- public TransactionPurchasesHiddenMarkovModel(ConditionalSampler<Product, String> purchasingProcesses,
- ConditionalWeightFunction<Double, Double> categoryWF, CustomerInventory inventory,
- SeedFactory seedFactory)
- {
- this.purchasingProcesses = purchasingProcesses;
- this.inventory = inventory;
- this.categoryWF = categoryWF;
-
- this.seedFactory = seedFactory;
- }
-
- protected String chooseCategory(double transactionTime, int numPurchases) throws Exception
- {
- ImmutableMap<String, Double> exhaustionTimes = this.inventory.getExhaustionTimes();
- Map<String, Double> weights = Maps.newHashMap();
-
- for(Map.Entry<String, Double> entry : exhaustionTimes.entrySet())
- {
- String category = entry.getKey();
- double weight = this.categoryWF.weight(entry.getValue(), transactionTime);
- weights.put(category, weight);
- }
-
- if(numPurchases > 0)
- {
- weights.put(STOP_STATE, Constants.STOP_CATEGORY_WEIGHT);
- }
-
- Sampler<String> sampler = RouletteWheelSampler.create(weights, seedFactory);
-
- return sampler.sample();
- }
-
- protected Product chooseProduct(String category) throws Exception
- {
- return this.purchasingProcesses.sample(category);
- }
-
- public List<Product> sample(Double transactionTime) throws Exception
- {
- int numPurchases = 0;
-
- List<Product> purchasedProducts = Lists.newArrayList();
-
- String category;
- while(true)
- {
- category = this.chooseCategory(transactionTime, numPurchases);
-
- if(category.equals(STOP_STATE))
- {
- break;
- }
-
- Product product = this.chooseProduct(category);
-
- purchasedProducts.add(product);
-
- this.inventory.simulatePurchase(transactionTime, product);
- numPurchases += 1;
- }
-
- return purchasedProducts;
- }
-}
http://git-wip-us.apache.org/repos/asf/bigtop/blob/15af83eb/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/transaction/TransactionPurchasesSamplerBuilder.java
----------------------------------------------------------------------
diff --git a/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/transaction/TransactionPurchasesSamplerBuilder.java b/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/transaction/TransactionPurchasesSamplerBuilder.java
deleted file mode 100644
index 4400151..0000000
--- a/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/transaction/TransactionPurchasesSamplerBuilder.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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 org.apache.bigtop.bigpetstore.datagenerator.generators.transaction;
-
-import java.util.Collection;
-import java.util.List;
-
-import org.apache.bigtop.bigpetstore.datagenerator.datamodels.Product;
-import org.apache.bigtop.bigpetstore.datagenerator.datamodels.inputs.ProductCategory;
-import org.apache.bigtop.bigpetstore.datagenerator.framework.SeedFactory;
-import org.apache.bigtop.bigpetstore.datagenerator.framework.samplers.ConditionalSampler;
-import org.apache.bigtop.bigpetstore.datagenerator.framework.wfs.ConditionalWeightFunction;
-import org.apache.bigtop.bigpetstore.datagenerator.generators.purchase.PurchasingModel;
-import org.apache.bigtop.bigpetstore.datagenerator.generators.purchase.PurchasingProcesses;
-
-public class TransactionPurchasesSamplerBuilder
-{
- final SeedFactory seedFactory;
- final Collection<ProductCategory> productCategories;
- final PurchasingModel purchasingProfile;
-
- protected CustomerTransactionParameters transactionParameters;
- protected CustomerInventory inventory;
-
- public TransactionPurchasesSamplerBuilder(Collection<ProductCategory> productCategories,
- PurchasingModel purchasingProfile,
- SeedFactory seedFactory)
- {
- this.seedFactory = seedFactory;
- this.productCategories = productCategories;
- this.purchasingProfile = purchasingProfile;
- }
-
- public void setTransactionParameters(
- CustomerTransactionParameters transactionParameters)
- {
- this.transactionParameters = transactionParameters;
- }
-
- public void setInventory(CustomerInventory inventory)
- {
- this.inventory = inventory;
- }
-
- public ConditionalSampler<List<Product>, Double> build() throws Exception
- {
- PurchasingProcesses processes = purchasingProfile.buildProcesses(seedFactory);
-
- ConditionalWeightFunction<Double, Double> categoryWF =
- new CategoryWeightFunction(transactionParameters.getAveragePurchaseTriggerTime());
-
- ConditionalSampler<List<Product>, Double> sampler = new TransactionPurchasesHiddenMarkovModel(processes,
- categoryWF, inventory, this.seedFactory);
-
- return sampler;
- }
-}
http://git-wip-us.apache.org/repos/asf/bigtop/blob/15af83eb/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/transaction/TransactionSampler.java
----------------------------------------------------------------------
diff --git a/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/transaction/TransactionSampler.java b/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/transaction/TransactionSampler.java
deleted file mode 100644
index b19ae38..0000000
--- a/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/transaction/TransactionSampler.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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 org.apache.bigtop.bigpetstore.datagenerator.generators.transaction;
-
-import java.util.List;
-
-import org.apache.bigtop.bigpetstore.datagenerator.datamodels.Customer;
-import org.apache.bigtop.bigpetstore.datagenerator.datamodels.Product;
-import org.apache.bigtop.bigpetstore.datagenerator.datamodels.Transaction;
-import org.apache.bigtop.bigpetstore.datagenerator.framework.samplers.ConditionalSampler;
-import org.apache.bigtop.bigpetstore.datagenerator.framework.samplers.Sampler;
-
-public class TransactionSampler implements Sampler<Transaction>
-{
- private final Sampler<Double> timeSampler;
- private final ConditionalSampler<List<Product>, Double> purchasesSampler;
- private final Sampler<Integer> idSampler;
- private final Customer customer;
-
- public TransactionSampler(Customer customer, Sampler<Double> timeSampler,
- ConditionalSampler<List<Product>, Double> purchasesSampler,
- Sampler<Integer> idSampler)
- {
- this.timeSampler = timeSampler;
- this.customer = customer;
- this.purchasesSampler = purchasesSampler;
- this.idSampler = idSampler;
- }
-
-
- public Transaction sample() throws Exception
- {
- Double transactionTime = timeSampler.sample();
- List<Product> purchase = purchasesSampler.sample(transactionTime);
- Integer id = idSampler.sample();
-
- Transaction transaction = new Transaction(id, customer, customer.getStore(),
- transactionTime, purchase);
-
- return transaction;
- }
-
-}
http://git-wip-us.apache.org/repos/asf/bigtop/blob/15af83eb/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/transaction/TransactionSamplerBuilder.java
----------------------------------------------------------------------
diff --git a/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/transaction/TransactionSamplerBuilder.java b/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/transaction/TransactionSamplerBuilder.java
deleted file mode 100644
index 748b4db..0000000
--- a/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/transaction/TransactionSamplerBuilder.java
+++ /dev/null
@@ -1,95 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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 org.apache.bigtop.bigpetstore.datagenerator.generators.transaction;
-
-import java.util.Collection;
-import java.util.List;
-
-import org.apache.bigtop.bigpetstore.datagenerator.datamodels.Customer;
-import org.apache.bigtop.bigpetstore.datagenerator.datamodels.Product;
-import org.apache.bigtop.bigpetstore.datagenerator.datamodels.Transaction;
-import org.apache.bigtop.bigpetstore.datagenerator.datamodels.inputs.ProductCategory;
-import org.apache.bigtop.bigpetstore.datagenerator.framework.SeedFactory;
-import org.apache.bigtop.bigpetstore.datagenerator.framework.samplers.ConditionalSampler;
-import org.apache.bigtop.bigpetstore.datagenerator.framework.samplers.Sampler;
-import org.apache.bigtop.bigpetstore.datagenerator.framework.samplers.SequenceSampler;
-import org.apache.bigtop.bigpetstore.datagenerator.generators.purchase.PurchasingModel;
-
-public class TransactionSamplerBuilder
-{
- private final Collection<ProductCategory> productCategories;
- private final Customer customer;
- private final PurchasingModel purchasingProfile;
- private final SeedFactory seedFactory;
-
- CustomerTransactionParameters parameters;
- CustomerInventory inventory;
-
- public TransactionSamplerBuilder(Collection<ProductCategory> productCategories,
- Customer customer,
- PurchasingModel purchasingProfile,
- SeedFactory seedFactory) throws Exception
- {
- this.customer = customer;
- this.seedFactory = seedFactory;
- this.purchasingProfile = purchasingProfile;
- this.productCategories = productCategories;
- }
-
- protected void buildParameters() throws Exception
- {
- CustomerTransactionParametersSamplerBuilder builder = new CustomerTransactionParametersSamplerBuilder(seedFactory);
- parameters = builder.build().sample();
- }
-
- protected ConditionalSampler<List<Product>, Double> buildPurchasesSampler() throws Exception
- {
- TransactionPurchasesSamplerBuilder builder = new TransactionPurchasesSamplerBuilder(productCategories,
- purchasingProfile, seedFactory);
-
- builder.setTransactionParameters(parameters);
- builder.setInventory(inventory);
-
- return builder.build();
- }
-
- protected Sampler<Double> buildTimeSampler()
- {
- TransactionTimeSamplerBuilder builder = new TransactionTimeSamplerBuilder(seedFactory);
- builder.setCustomerTransactionParameters(parameters);
- builder.setCustomerInventory(inventory);
-
- return builder.build();
- }
-
- protected void buildCustomerInventory()
- {
- CustomerInventoryBuilder inventoryBuilder = new CustomerInventoryBuilder(parameters,
- seedFactory);
- inventoryBuilder.addAllProductCategories(productCategories);
- inventory = inventoryBuilder.build();
- }
-
- public Sampler<Transaction> build() throws Exception
- {
- buildParameters();
- buildCustomerInventory();
-
- Sampler<Double> timeSampler = buildTimeSampler();
-
- return new TransactionSampler(customer, timeSampler, buildPurchasesSampler(), new SequenceSampler());
- }
-}
http://git-wip-us.apache.org/repos/asf/bigtop/blob/15af83eb/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/transaction/TransactionTimePDF.java
----------------------------------------------------------------------
diff --git a/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/transaction/TransactionTimePDF.java b/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/transaction/TransactionTimePDF.java
deleted file mode 100644
index b2b284f..0000000
--- a/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/transaction/TransactionTimePDF.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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 org.apache.bigtop.bigpetstore.datagenerator.generators.transaction;
-
-import org.apache.bigtop.bigpetstore.datagenerator.framework.pdfs.ConditionalProbabilityDensityFunction;
-
-public class TransactionTimePDF implements ConditionalProbabilityDensityFunction<Double, Double>
-{
- public double probability(Double proposedTime, Double lastTransactionTime)
- {
- if(proposedTime >= lastTransactionTime)
- {
- return 1.0;
- }
-
- return 0.0;
- }
-}
http://git-wip-us.apache.org/repos/asf/bigtop/blob/15af83eb/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/transaction/TransactionTimeSamplerBuilder.java
----------------------------------------------------------------------
diff --git a/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/transaction/TransactionTimeSamplerBuilder.java b/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/transaction/TransactionTimeSamplerBuilder.java
deleted file mode 100644
index 261d5a3..0000000
--- a/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/transaction/TransactionTimeSamplerBuilder.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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 org.apache.bigtop.bigpetstore.datagenerator.generators.transaction;
-
-import org.apache.bigtop.bigpetstore.datagenerator.framework.SeedFactory;
-import org.apache.bigtop.bigpetstore.datagenerator.framework.samplers.ExponentialSampler;
-import org.apache.bigtop.bigpetstore.datagenerator.framework.samplers.Sampler;
-import org.apache.bigtop.bigpetstore.datagenerator.framework.samplers.StatefulMonteCarloSampler;
-
-public class TransactionTimeSamplerBuilder
-{
- private final SeedFactory seedFactory;
- private CustomerInventory customerInventory;
- private CustomerTransactionParameters transactionParameters;
-
- public TransactionTimeSamplerBuilder(SeedFactory seedFactory)
- {
- this.seedFactory = seedFactory;
- }
-
- public void setCustomerInventory(CustomerInventory inventory)
- {
- this.customerInventory = inventory;
- }
-
- public void setCustomerTransactionParameters(CustomerTransactionParameters parameters)
- {
- this.transactionParameters = parameters;
- }
-
- public Sampler<Double> build()
- {
- double lambda = 1.0 / transactionParameters.getAverageTransactionTriggerTime();
- Sampler<Double> arrivalTimeSampler = new ExponentialSampler(lambda, seedFactory);
- Sampler<Double> proposedTimeSampler = new ProposedPurchaseTimeSampler(customerInventory,
- arrivalTimeSampler);
-
- return new StatefulMonteCarloSampler<Double>(proposedTimeSampler,
- new TransactionTimePDF(),
- 0.0,
- seedFactory);
- }
-}
http://git-wip-us.apache.org/repos/asf/bigtop/blob/15af83eb/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/datagenerators/bigpetstore/Constants.java
----------------------------------------------------------------------
diff --git a/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/datagenerators/bigpetstore/Constants.java b/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/datagenerators/bigpetstore/Constants.java
new file mode 100644
index 0000000..21827d5
--- /dev/null
+++ b/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/datagenerators/bigpetstore/Constants.java
@@ -0,0 +1,99 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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 org.apache.bigtop.datagenerators.bigpetstore;
+
+import java.io.File;
+import java.util.List;
+import java.util.Set;
+
+import org.apache.commons.lang3.tuple.Pair;
+
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableSet;
+
+public class Constants
+{
+ public static enum PurchasingModelType
+ {
+ MULTINOMIAL,
+ MARKOV;
+ }
+
+ public static enum ProductsCollectionSize
+ {
+ SMALL,
+ MEDIUM;
+ }
+
+ public static final File COORDINATES_FILE = new File("zips.csv");
+ public static final File INCOMES_FILE = new File("ACS_12_5YR_S1903/ACS_12_5YR_S1903_with_ann.csv");
+ public static final File POPULATION_FILE = new File("population_data.csv");
+
+ public static final File NAMEDB_FILE = new File("namedb/data/data.dat");
+
+ public static final ProductsCollectionSize PRODUCTS_COLLECTION = ProductsCollectionSize.MEDIUM;
+
+ public static final double INCOME_SCALING_FACTOR = 100.0;
+
+ public static final int MIN_PETS = 1;
+ public static final int MAX_PETS = 10;
+
+ public static final List<Pair<Double, Double>> TRANSACTION_TRIGGER_TIME_GAUSSIANS = ImmutableList.of(Pair.of(5.0, 2.0));
+ public static final List<Pair<Double, Double>> PURCHASE_TRIGGER_TIME_GAUSSIANS = ImmutableList.of(Pair.of(10.0, 4.0));
+
+ public static final double TRANSACTION_TRIGGER_TIME_MAX = 10.0;
+ public static final double TRANSACTION_TRIGGER_TIME_MIN = 1.0;
+
+ public static final double PURCHASE_TRIGGER_TIME_MAX = 20.0;
+ public static final double PURCHASE_TRIGGER_TIME_MIN = 1.0;
+
+ public static final double AVERAGE_CUSTOMER_STORE_DISTANCE = 5.0; // miles
+
+ public static final PurchasingModelType PURCHASING_MODEL_TYPE = PurchasingModelType.MULTINOMIAL;
+
+ public static final List<Pair<Double, Double>> PRODUCT_MSM_FIELD_WEIGHT_GAUSSIANS = ImmutableList.of(Pair.of(0.15, 0.1), Pair.of(0.85, 0.1));
+ public static final double PRODUCT_MSM_FIELD_WEIGHT_LOWERBOUND = 0.05;
+ public static final double PRODUCT_MSM_FIELD_WEIGHT_UPPERBOUND = 0.95;
+
+ public static final List<Pair<Double, Double>> PRODUCT_MSM_FIELD_SIMILARITY_WEIGHT_GAUSSIANS = ImmutableList.of(Pair.of(0.15, 0.1), Pair.of(0.85, 0.1));
+ public static final double PRODUCT_MSM_FIELD_SIMILARITY_WEIGHT_LOWERBOUND = 0.05;
+ public static final double PRODUCT_MSM_FIELD_SIMILARITY_WEIGHT_UPPERBOUND = 0.95;
+
+ public static final List<Pair<Double, Double>> PRODUCT_MSM_LOOPBACK_WEIGHT_GAUSSIANS = ImmutableList.of(Pair.of(0.25, 0.1), Pair.of(0.75, 0.1));
+ public static final double PRODUCT_MSM_LOOPBACK_WEIGHT_LOWERBOUND = 0.05;
+ public static final double PRODUCT_MSM_LOOPBACK_WEIGHT_UPPERBOUND = 0.95;
+
+ public static final double PRODUCT_MULTINOMIAL_POSITIVE_WEIGHT = 10.0;
+ public static final double PRODUCT_MULTINOMIAL_NEUTRAL_WEIGHT = 1.0;
+ public static final double PRODUCT_MULTINOMIAL_NEGATIVE_WEIGHT = 0.1;
+ public static final int PRODUCT_MULTINOMIAL_POSITIVE_COUNT_MIN = 1;
+ public static final double PRODUCT_MULTINOMIAL_POSITIVE_FREQUENCY = 0.1; // 10%
+
+ public static final String PRODUCT_QUANTITY = "quantity";
+ public static final String PRODUCT_CATEGORY = "category";
+ public static final String PRODUCT_UNIT_PRICE = "unitPrice";
+ public static final String PRODUCT_PRICE = "price";
+
+ /*
+ * Until we have a more intelligent way (e.g., based on range) of dealing with prices,
+ * let's exclude them.
+ */
+ public static final Set<String> PRODUCT_MODEL_EXCLUDED_FIELDS = ImmutableSet.of(PRODUCT_CATEGORY,
+ PRODUCT_UNIT_PRICE,
+ PRODUCT_PRICE);
+
+ public static final double STOP_CATEGORY_WEIGHT = 0.01;
+}
http://git-wip-us.apache.org/repos/asf/bigtop/blob/15af83eb/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/datagenerators/bigpetstore/CustomerGenerator.java
----------------------------------------------------------------------
diff --git a/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/datagenerators/bigpetstore/CustomerGenerator.java b/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/datagenerators/bigpetstore/CustomerGenerator.java
new file mode 100644
index 0000000..7fc2cbe
--- /dev/null
+++ b/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/datagenerators/bigpetstore/CustomerGenerator.java
@@ -0,0 +1,41 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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 org.apache.bigtop.datagenerators.bigpetstore;
+
+import java.util.List;
+
+import org.apache.bigtop.datagenerators.bigpetstore.datamodels.Customer;
+import org.apache.bigtop.datagenerators.bigpetstore.datamodels.Store;
+import org.apache.bigtop.datagenerators.bigpetstore.datamodels.inputs.InputData;
+import org.apache.bigtop.datagenerators.bigpetstore.generators.customer.CustomerSamplerBuilder;
+import org.apache.bigtop.datagenerators.samplers.SeedFactory;
+import org.apache.bigtop.datagenerators.samplers.samplers.Sampler;
+
+public class CustomerGenerator
+{
+ final Sampler<Customer> sampler;
+
+ public CustomerGenerator(InputData inputData, List<Store> stores, SeedFactory seedFactory)
+ {
+ CustomerSamplerBuilder builder = new CustomerSamplerBuilder(stores, inputData, seedFactory);
+ sampler = builder.build();
+ }
+
+ public Customer generate() throws Exception
+ {
+ return sampler.sample();
+ }
+}
http://git-wip-us.apache.org/repos/asf/bigtop/blob/15af83eb/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/datagenerators/bigpetstore/DataLoader.java
----------------------------------------------------------------------
diff --git a/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/datagenerators/bigpetstore/DataLoader.java b/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/datagenerators/bigpetstore/DataLoader.java
new file mode 100644
index 0000000..d3393fe
--- /dev/null
+++ b/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/datagenerators/bigpetstore/DataLoader.java
@@ -0,0 +1,57 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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 org.apache.bigtop.datagenerators.bigpetstore;
+
+import java.io.BufferedInputStream;
+import java.io.File;
+import java.io.InputStream;
+import java.util.List;
+
+import org.apache.bigtop.datagenerators.bigpetstore.datamodels.inputs.InputData;
+import org.apache.bigtop.datagenerators.bigpetstore.datamodels.inputs.Names;
+import org.apache.bigtop.datagenerators.bigpetstore.datamodels.inputs.ZipcodeRecord;
+import org.apache.bigtop.datagenerators.bigpetstore.datareaders.NameReader;
+import org.apache.bigtop.datagenerators.bigpetstore.datareaders.ZipcodeReader;
+
+public class DataLoader
+{
+ private InputStream getResource(File filename) throws Exception
+ {
+ InputStream stream = getClass().getResourceAsStream("/input_data/" + filename);
+ return new BufferedInputStream(stream);
+ }
+
+ public InputData loadData() throws Exception
+ {
+
+ System.out.println("Reading zipcode data");
+ ZipcodeReader zipcodeReader = new ZipcodeReader();
+ zipcodeReader.setCoordinatesFile(getResource(Constants.COORDINATES_FILE));
+ zipcodeReader.setIncomesFile(getResource(Constants.INCOMES_FILE));
+ zipcodeReader.setPopulationFile(getResource(Constants.POPULATION_FILE));
+ List<ZipcodeRecord> zipcodeTable = zipcodeReader.readData();
+ System.out.println("Read " + zipcodeTable.size() + " zipcode entries");
+
+ System.out.println("Reading name data");
+ NameReader nameReader = new NameReader(getResource(Constants.NAMEDB_FILE));
+ Names names = nameReader.readData();
+ System.out.println("Read " + names.getFirstNames().size() + " first names and " + names.getLastNames().size() + " last names");
+
+ InputData inputData = new InputData(zipcodeTable, names);
+
+ return inputData;
+ }
+}
http://git-wip-us.apache.org/repos/asf/bigtop/blob/15af83eb/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/datagenerators/bigpetstore/ProductGenerator.java
----------------------------------------------------------------------
diff --git a/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/datagenerators/bigpetstore/ProductGenerator.java b/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/datagenerators/bigpetstore/ProductGenerator.java
new file mode 100644
index 0000000..d6a0412
--- /dev/null
+++ b/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/datagenerators/bigpetstore/ProductGenerator.java
@@ -0,0 +1,50 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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 org.apache.bigtop.datagenerators.bigpetstore;
+
+import java.util.List;
+
+import org.apache.bigtop.datagenerators.bigpetstore.Constants.ProductsCollectionSize;
+import org.apache.bigtop.datagenerators.bigpetstore.datamodels.inputs.ProductCategory;
+import org.apache.bigtop.datagenerators.bigpetstore.generators.products.collections.MediumProductCollection;
+import org.apache.bigtop.datagenerators.bigpetstore.generators.products.collections.SmallProductCollection;
+
+public class ProductGenerator
+{
+ ProductsCollectionSize collection;
+
+ public ProductGenerator(ProductsCollectionSize collection)
+ {
+ this.collection = collection;
+ }
+
+ public List<ProductCategory> generate()
+ {
+ List<ProductCategory> categories;
+
+ if(collection.equals(ProductsCollectionSize.SMALL))
+ {
+ SmallProductCollection collection = new SmallProductCollection();
+ categories = collection.generateProductCategory();
+ } else
+ {
+ MediumProductCollection collection = new MediumProductCollection();
+ categories = collection.generateProductCategory();
+ }
+
+ return categories;
+ }
+}
http://git-wip-us.apache.org/repos/asf/bigtop/blob/15af83eb/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/datagenerators/bigpetstore/PurchasingModelGenerator.java
----------------------------------------------------------------------
diff --git a/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/datagenerators/bigpetstore/PurchasingModelGenerator.java b/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/datagenerators/bigpetstore/PurchasingModelGenerator.java
new file mode 100644
index 0000000..21f82a5
--- /dev/null
+++ b/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/datagenerators/bigpetstore/PurchasingModelGenerator.java
@@ -0,0 +1,40 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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 org.apache.bigtop.datagenerators.bigpetstore;
+
+import java.util.Collection;
+
+import org.apache.bigtop.datagenerators.bigpetstore.datamodels.inputs.ProductCategory;
+import org.apache.bigtop.datagenerators.bigpetstore.generators.purchase.PurchasingModel;
+import org.apache.bigtop.datagenerators.bigpetstore.generators.purchase.PurchasingModelSamplerBuilder;
+import org.apache.bigtop.datagenerators.samplers.SeedFactory;
+import org.apache.bigtop.datagenerators.samplers.samplers.Sampler;
+
+public class PurchasingModelGenerator
+{
+ final Sampler<? extends PurchasingModel> sampler;
+
+ public PurchasingModelGenerator(Collection<ProductCategory> productCategories, SeedFactory seedFactory) throws Exception
+ {
+ PurchasingModelSamplerBuilder builder = new PurchasingModelSamplerBuilder(productCategories, seedFactory);
+ sampler = builder.build();
+ }
+
+ public PurchasingModel generate() throws Exception
+ {
+ return sampler.sample();
+ }
+}
http://git-wip-us.apache.org/repos/asf/bigtop/blob/15af83eb/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/datagenerators/bigpetstore/StoreGenerator.java
----------------------------------------------------------------------
diff --git a/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/datagenerators/bigpetstore/StoreGenerator.java b/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/datagenerators/bigpetstore/StoreGenerator.java
new file mode 100644
index 0000000..60a150e
--- /dev/null
+++ b/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/datagenerators/bigpetstore/StoreGenerator.java
@@ -0,0 +1,38 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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 org.apache.bigtop.datagenerators.bigpetstore;
+
+import org.apache.bigtop.datagenerators.bigpetstore.datamodels.Store;
+import org.apache.bigtop.datagenerators.bigpetstore.datamodels.inputs.InputData;
+import org.apache.bigtop.datagenerators.bigpetstore.generators.store.StoreSamplerBuilder;
+import org.apache.bigtop.datagenerators.samplers.SeedFactory;
+import org.apache.bigtop.datagenerators.samplers.samplers.Sampler;
+
+public class StoreGenerator
+{
+ final Sampler<Store> sampler;
+
+ public StoreGenerator(InputData inputData, SeedFactory seedFactory)
+ {
+ StoreSamplerBuilder builder = new StoreSamplerBuilder(inputData.getZipcodeTable(), seedFactory);
+ sampler = builder.build();
+ }
+
+ public Store generate() throws Exception
+ {
+ return sampler.sample();
+ }
+}
http://git-wip-us.apache.org/repos/asf/bigtop/blob/15af83eb/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/datagenerators/bigpetstore/TransactionGenerator.java
----------------------------------------------------------------------
diff --git a/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/datagenerators/bigpetstore/TransactionGenerator.java b/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/datagenerators/bigpetstore/TransactionGenerator.java
new file mode 100644
index 0000000..7f56093
--- /dev/null
+++ b/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/datagenerators/bigpetstore/TransactionGenerator.java
@@ -0,0 +1,43 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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 org.apache.bigtop.datagenerators.bigpetstore;
+
+import java.util.Collection;
+
+import org.apache.bigtop.datagenerators.bigpetstore.datamodels.Customer;
+import org.apache.bigtop.datagenerators.bigpetstore.datamodels.Transaction;
+import org.apache.bigtop.datagenerators.bigpetstore.datamodels.inputs.ProductCategory;
+import org.apache.bigtop.datagenerators.bigpetstore.generators.purchase.PurchasingModel;
+import org.apache.bigtop.datagenerators.bigpetstore.generators.transaction.TransactionSamplerBuilder;
+import org.apache.bigtop.datagenerators.samplers.SeedFactory;
+import org.apache.bigtop.datagenerators.samplers.samplers.Sampler;
+
+public class TransactionGenerator
+{
+ Sampler<Transaction> sampler;
+
+ public TransactionGenerator(Customer customer, PurchasingModel profile,
+ Collection<ProductCategory> productCategories, SeedFactory seedFactory) throws Exception
+ {
+ sampler = new TransactionSamplerBuilder(productCategories,
+ customer, profile, seedFactory).build();
+ }
+
+ public Transaction generate() throws Exception
+ {
+ return sampler.sample();
+ }
+}
http://git-wip-us.apache.org/repos/asf/bigtop/blob/15af83eb/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/datagenerators/bigpetstore/cli/Driver.java
----------------------------------------------------------------------
diff --git a/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/datagenerators/bigpetstore/cli/Driver.java b/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/datagenerators/bigpetstore/cli/Driver.java
new file mode 100644
index 0000000..623b947
--- /dev/null
+++ b/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/datagenerators/bigpetstore/cli/Driver.java
@@ -0,0 +1,315 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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 org.apache.bigtop.datagenerators.bigpetstore.cli;
+
+import java.io.BufferedOutputStream;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.OutputStream;
+import java.util.Collection;
+import java.util.List;
+
+import org.apache.bigtop.datagenerators.bigpetstore.DataLoader;
+import org.apache.bigtop.datagenerators.bigpetstore.datamodels.Customer;
+import org.apache.bigtop.datagenerators.bigpetstore.datamodels.Product;
+import org.apache.bigtop.datagenerators.bigpetstore.datamodels.Store;
+import org.apache.bigtop.datagenerators.bigpetstore.datamodels.Transaction;
+import org.apache.bigtop.datagenerators.bigpetstore.datamodels.inputs.InputData;
+import org.apache.bigtop.datagenerators.bigpetstore.datamodels.inputs.ProductCategory;
+import org.apache.bigtop.datagenerators.bigpetstore.generators.purchase.PurchasingModel;
+import org.apache.commons.lang3.tuple.Pair;
+
+
+public class Driver
+{
+ int nStores;
+ int nCustomers;
+ int nPurchasingModels;
+ double simulationTime;
+ long seed;
+ File outputDir;
+
+ static final int NPARAMS = 6;
+
+ private void printUsage()
+ {
+ String usage = "BigPetStore Data Generator\n" +
+ "\n" +
+ "Usage: java -jar bps-data-generator-v0.2.java outputDir nStores nCustomers nPurchasingModels simulationLength seed\n" +
+ "\n" +
+ "outputDir - (string) directory to write files\n" +
+ "nStores - (int) number of stores to generate\n" +
+ "nCustomers - (int) number of customers to generate\n" +
+ "nPurchasingModels - (int) number of purchasing models to generate\n" +
+ "simulationLength - (float) number of days to simulate\n" +
+ "seed - (long) seed for RNG. If not given, one is reandomly generated.\n";
+
+ System.out.println(usage);
+ }
+
+ public void parseArgs(String[] args)
+ {
+ if(args.length != NPARAMS && args.length != (NPARAMS - 1))
+ {
+ printUsage();
+ System.exit(1);
+ }
+
+ int i = -1;
+
+ outputDir = new File(args[++i]);
+ if(! outputDir.exists())
+ {
+ System.err.println("Given path (" + args[i] + ") does not exist.\n");
+ printUsage();
+ System.exit(1);
+ }
+
+ if(! outputDir.isDirectory())
+ {
+ System.err.println("Given path (" + args[i] + ") is not a directory.\n");
+ printUsage();
+ System.exit(1);
+ }
+
+ try
+ {
+ nStores = Integer.parseInt(args[++i]);
+ }
+ catch(Exception e)
+ {
+ System.err.println("Unable to parse '" + args[i] + "' as an integer for nStores.\n");
+ printUsage();
+ System.exit(1);
+ }
+
+ try
+ {
+ nCustomers = Integer.parseInt(args[++i]);
+ }
+ catch(Exception e)
+ {
+ System.err.println("Unable to parse '" + args[i] + "' as an integer for nCustomers.\n");
+ printUsage();
+ System.exit(1);
+ }
+
+ try
+ {
+ nPurchasingModels = Integer.parseInt(args[++i]);
+ }
+ catch(Exception e)
+ {
+ System.err.println("Unable to parse '" + args[i] + "' as an integer for nPurchasingModels.\n");
+ printUsage();
+ System.exit(1);
+ }
+
+ try
+ {
+ simulationTime = Double.parseDouble(args[++i]);
+ }
+ catch(Exception e)
+ {
+ System.err.println("Unable to parse '" + args[i] + "' as a float for simulationLength.\n");
+ printUsage();
+ System.exit(1);
+ }
+
+ try
+ {
+ seed = Long.parseLong(args[++i]);
+ }
+ catch(Exception e)
+ {
+ System.err.println("Unable to parse '" + args[i] + "' as a long for the seed.\n");
+ printUsage();
+ System.exit(1);
+ }
+ }
+
+ private void writeTransactions(Collection<Transaction> transactions) throws Exception
+ {
+ File outputFile = new File(outputDir.toString() + File.separator + "transactions.txt");
+ System.out.println(outputFile.toString());
+ OutputStream outputStream = new BufferedOutputStream(new FileOutputStream(outputFile));
+
+ for(Transaction transaction : transactions)
+ {
+ for(Product product : transaction.getProducts())
+ {
+ String record = transaction.getId() + ",";
+ record += transaction.getDateTime() + ",";
+ record += transaction.getStore().getId() + ",";
+ record += transaction.getStore().getLocation().getZipcode() + ",";
+ record += transaction.getStore().getLocation().getCity() + ",";
+ record += transaction.getStore().getLocation().getState() + ",";
+ record += transaction.getCustomer().getId() + ",";
+ Pair<String, String> name = transaction.getCustomer().getName();
+ record += name.getLeft() + " " + name.getRight() + ",";
+ record += transaction.getCustomer().getLocation().getZipcode() + ",";
+ record += transaction.getCustomer().getLocation().getCity() + ",";
+ record += transaction.getCustomer().getLocation().getState() + ",";
+ record += product.toString() + "\n";
+
+ outputStream.write(record.getBytes());
+ }
+ }
+
+ outputStream.close();
+ }
+
+ private void writeCustomers(Collection<Customer> customers) throws Exception
+ {
+ File outputFile = new File(outputDir.toString() + File.separator + "customers.txt");
+ System.out.println(outputFile.toString());
+ OutputStream outputStream = new BufferedOutputStream(new FileOutputStream(outputFile));
+
+ for(Customer customer : customers)
+ {
+ String record = customer.getId() + ",";
+ Pair<String, String> name = customer.getName();
+ record += name.getLeft() + "," + name.getRight() + ",";
+ record += customer.getLocation().getZipcode() + ",";
+ record += customer.getLocation().getCity() + ",";
+ record += customer.getLocation().getState() + "\n";
+
+ outputStream.write(record.getBytes());
+ }
+
+ outputStream.close();
+ }
+
+ private void writeStores(Collection<Store> stores) throws Exception
+ {
+ File outputFile = new File(outputDir.toString() + File.separator + "stores.txt");
+ System.out.println(outputFile.toString());
+ OutputStream outputStream = new BufferedOutputStream(new FileOutputStream(outputFile));
+
+ for(Store store : stores)
+ {
+ String record = store.getId() + ",";
+ record += store.getLocation().getZipcode() + ",";
+ record += store.getLocation().getCity() + ",";
+ record += store.getLocation().getState() + "\n";
+
+ outputStream.write(record.getBytes());
+ }
+
+ outputStream.close();
+ }
+
+ private void writeProducts(Collection<ProductCategory> productCategories) throws Exception
+ {
+ File outputFile = new File(outputDir.toString() + File.separator + "products.txt");
+ System.out.println(outputFile.toString());
+ OutputStream outputStream = new BufferedOutputStream(new FileOutputStream(outputFile));
+
+ for(ProductCategory category : productCategories)
+ {
+
+ for(Product product : category.getProducts())
+ {
+ String record = category.getCategoryLabel() + ",";
+ record += product.toString() + "\n";
+
+ outputStream.write(record.getBytes());
+ }
+ }
+
+ outputStream.close();
+ }
+
+ private void writePurchasingProfiles(List<ProductCategory> productCategories, List<PurchasingModel> profiles) throws Exception
+ {
+ File outputFile = new File(outputDir.toString() + File.separator + "purchasing_profiles.txt");
+ System.out.println(outputFile.toString());
+ OutputStream outputStream = new BufferedOutputStream(new FileOutputStream(outputFile));
+
+ for(ProductCategory category : productCategories)
+ {
+ int i = 0;
+ for(PurchasingModel model : profiles)
+ {
+ Object productModel = model.getProfile(category.getCategoryLabel());
+ String record = productModel.toString();
+
+ outputStream.write(record.getBytes());
+
+ i += 1;
+ }
+ }
+
+ outputStream.close();
+ }
+
+ public Simulation buildSimulation(InputData inputData)
+ {
+ return new Simulation(inputData, nStores, nCustomers, nPurchasingModels, simulationTime, seed);
+ }
+
+ private void run(InputData inputData) throws Exception
+ {
+ Simulation simulation = buildSimulation(inputData);
+
+ simulation.simulate();
+
+ writeStores(simulation.getStores());
+ writeCustomers(simulation.getCustomers());
+ writeProducts(simulation.getProductCategories());
+ writePurchasingProfiles(simulation.getProductCategories(), simulation.getPurchasingProfiles());
+ writeTransactions(simulation.getTransactions());
+ }
+ public void run(String[] args) throws Exception
+ {
+ parseArgs(args);
+
+ InputData inputData = (new DataLoader()).loadData();
+
+ run(inputData);
+ }
+
+ public static void main(String[] args) throws Exception
+ {
+ Driver driver = new Driver();
+ driver.run(args);
+ }
+
+ public Double getSimulationLength()
+ {
+ return simulationTime;
+ }
+
+ public int getNCustomers()
+ {
+ return nCustomers;
+ }
+
+ public long getSeed()
+ {
+ return seed;
+ }
+
+ public int getNStores()
+ {
+ return nStores;
+ }
+
+ public File getOutputDir()
+ {
+ return outputDir;
+ }
+}