http://git-wip-us.apache.org/repos/asf/bigtop/blob/3bbbb557/bigtop-bigpetstore/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/products/ProductCategoryBuilder.java ---------------------------------------------------------------------- diff --git a/bigtop-bigpetstore/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/products/ProductCategoryBuilder.java b/bigtop-bigpetstore/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/products/ProductCategoryBuilder.java deleted file mode 100644 index df8ae12..0000000 --- a/bigtop-bigpetstore/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/products/ProductCategoryBuilder.java +++ /dev/null @@ -1,195 +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.products; - -import java.util.Arrays; -import java.util.Collection; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.Vector; - -import org.apache.bigtop.bigpetstore.datagenerator.Constants; -import org.apache.bigtop.bigpetstore.datagenerator.datamodels.PetSpecies; -import org.apache.bigtop.bigpetstore.datagenerator.datamodels.Product; -import org.apache.bigtop.bigpetstore.datagenerator.datamodels.inputs.ProductCategory; -import org.apache.bigtop.bigpetstore.datagenerator.generators.products.rules.AlwaysTrueRule; -import org.apache.bigtop.bigpetstore.datagenerator.generators.products.rules.NotRule; -import org.apache.bigtop.bigpetstore.datagenerator.generators.products.rules.OrRule; -import org.apache.bigtop.bigpetstore.datagenerator.generators.products.rules.Rule; - -import com.google.common.collect.Lists; -import com.google.common.collect.Maps; -import com.google.common.collect.Sets; - -public class ProductCategoryBuilder -{ - String categoryLabel; - Set<PetSpecies> applicableSpecies; - Boolean triggerTransaction; - Double dailyUsageRate; - Double amountUsedPerPetAverage; - Double amountUsedPerPetVariance; - Double triggerTransactionRate; - Double triggerPurchaseRate; - List<Rule> exclusionRules; - Map<String, Collection<ProductFieldValue>> productFieldValues; - Double basePrice; - List<Product> products; - - public ProductCategoryBuilder() - { - applicableSpecies = Sets.newHashSet(); - - dailyUsageRate = 0.0; - amountUsedPerPetAverage = 0.0; - amountUsedPerPetVariance = 0.0; - triggerTransactionRate = 0.0; - triggerPurchaseRate = 0.0; - triggerTransaction = false; - categoryLabel = null; - exclusionRules = new Vector<Rule>(); - productFieldValues = Maps.newHashMap(); - basePrice = 1.0; - products = Lists.newArrayList(); - } - - public void setCategory(String category) - { - this.categoryLabel = category; - } - - public void setTriggerTransaction(Boolean triggerTransaction) - { - this.triggerTransaction = triggerTransaction; - } - - public void setDailyUsageRate(Double dailyUsageRate) - { - this.dailyUsageRate = dailyUsageRate; - } - - public void setAmountUsedPetPetAverage(Double baseAmountUsedAverage) - { - this.amountUsedPerPetAverage = baseAmountUsedAverage; - } - - public void setAmountUsedPetPetVariance(Double baseAmountUsedVariance) - { - this.amountUsedPerPetVariance = baseAmountUsedVariance; - } - - public void setTriggerTransactionRate(Double triggerTransactionRate) - { - this.triggerTransactionRate = triggerTransactionRate; - } - - public void setTriggerPurchaseRate(Double triggerPurchaseRate) - { - this.triggerPurchaseRate = triggerPurchaseRate; - } - - public void addApplicableSpecies(PetSpecies species) - { - this.applicableSpecies.add(species); - } - - public void addProduct(Product product) - { - products.add(product); - } - - public void addExclusionRule(Rule rule) - { - this.exclusionRules.add(rule); - } - - public void addPropertyValues(String fieldName, ProductFieldValue ... values) - { - this.productFieldValues.put(fieldName, Arrays.asList(values)); - } - - public void setBasePrice(double basePrice) - { - this.basePrice = basePrice; - } - - - protected List<Product> generateProducts() - { - Rule combinedRules = new NotRule(new AlwaysTrueRule()); - if(exclusionRules.size() == 1) - { - combinedRules = exclusionRules.get(0); - } - else if(exclusionRules.size() > 1) - { - combinedRules = new OrRule(exclusionRules.toArray(new Rule[] {})); - } - - Iterator<Product> productIterator = new ProductIterator(productFieldValues, combinedRules, - basePrice, categoryLabel); - - while(productIterator.hasNext()) - { - products.add(productIterator.next()); - } - - return products; - } - - public void validateProducts() - { - for(Product product : products) - { - if(!product.getFieldNames().contains(Constants.PRODUCT_CATEGORY)) - { - throw new IllegalStateException("Product must have field " + Constants.PRODUCT_CATEGORY); - } - - if(!product.getFieldNames().contains(Constants.PRODUCT_QUANTITY)) - { - throw new IllegalStateException("Product must have field " + Constants.PRODUCT_QUANTITY); - } - - if(!product.getFieldNames().contains(Constants.PRODUCT_PRICE)) - { - throw new IllegalStateException("Product must have field " + Constants.PRODUCT_PRICE); - } - - if(!product.getFieldNames().contains(Constants.PRODUCT_UNIT_PRICE)) - { - throw new IllegalStateException("Product must have field " + Constants.PRODUCT_UNIT_PRICE); - } - } - } - - public ProductCategory build() - { - List<Product> products = generateProducts(); - - Set<String> fieldNames = Sets.newHashSet(); - for(Product product : products) - { - fieldNames.addAll(product.getFieldNames()); - } - - return new ProductCategory(categoryLabel, applicableSpecies, fieldNames, triggerTransaction, - dailyUsageRate, amountUsedPerPetAverage, amountUsedPerPetVariance, triggerTransactionRate, - triggerPurchaseRate, products); - } -}
http://git-wip-us.apache.org/repos/asf/bigtop/blob/3bbbb557/bigtop-bigpetstore/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/products/ProductFieldValue.java ---------------------------------------------------------------------- diff --git a/bigtop-bigpetstore/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/products/ProductFieldValue.java b/bigtop-bigpetstore/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/products/ProductFieldValue.java deleted file mode 100644 index fe4d7fa..0000000 --- a/bigtop-bigpetstore/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/products/ProductFieldValue.java +++ /dev/null @@ -1,45 +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.products; - -public class ProductFieldValue -{ - Object value; - double add; - double multiply; - - public ProductFieldValue(Object value, double add, double multiply) - { - this.value = value; - this.add = add; - this.multiply = multiply; - } - - public Object getValue() - { - return value; - } - - public double getAdd() - { - return add; - } - - public double getMultiply() - { - return multiply; - } -} http://git-wip-us.apache.org/repos/asf/bigtop/blob/3bbbb557/bigtop-bigpetstore/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/products/ProductFilterIterator.java ---------------------------------------------------------------------- diff --git a/bigtop-bigpetstore/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/products/ProductFilterIterator.java b/bigtop-bigpetstore/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/products/ProductFilterIterator.java deleted file mode 100644 index c0e285d..0000000 --- a/bigtop-bigpetstore/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/products/ProductFilterIterator.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.products; - -import java.util.Iterator; - -import org.apache.bigtop.bigpetstore.datagenerator.datamodels.Product; -import org.apache.bigtop.bigpetstore.datagenerator.generators.products.rules.Rule; - -public class ProductFilterIterator implements Iterator<Product> -{ - Rule rule; - Iterator<Product> products; - Product buffer; - - public ProductFilterIterator(Rule rule, Iterator<Product> products) - { - this.rule = rule; - this.products = products; - this.buffer = getNext(); - } - - private Product getNext() - { - while(products.hasNext()) - { - Product product = products.next(); - - if(!rule.ruleMatches(product)) - { - return product; - } - } - - return null; - } - - @Override - public boolean hasNext() - { - return buffer != null; - } - - @Override - public Product next() - { - Product previous = buffer; - buffer = getNext(); - - return previous; - } - - @Override - public void remove() - { - throw new UnsupportedOperationException("ProductFilter does not support remove()"); - } - -} http://git-wip-us.apache.org/repos/asf/bigtop/blob/3bbbb557/bigtop-bigpetstore/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/products/ProductIterator.java ---------------------------------------------------------------------- diff --git a/bigtop-bigpetstore/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/products/ProductIterator.java b/bigtop-bigpetstore/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/products/ProductIterator.java deleted file mode 100644 index ccfef56..0000000 --- a/bigtop-bigpetstore/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/products/ProductIterator.java +++ /dev/null @@ -1,78 +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.products; - -import java.util.Collection; -import java.util.Iterator; -import java.util.Map; - -import org.apache.bigtop.bigpetstore.datagenerator.datamodels.Product; -import org.apache.bigtop.bigpetstore.datagenerator.generators.products.cartesian.CartesianProduct; -import org.apache.bigtop.bigpetstore.datagenerator.generators.products.cartesian.CartesianProductBase; -import org.apache.bigtop.bigpetstore.datagenerator.generators.products.cartesian.CartesianProductField; -import org.apache.bigtop.bigpetstore.datagenerator.generators.products.rules.Rule; - -public class ProductIterator implements Iterator<Product> -{ - - Iterator<Product> productIterator; - - public ProductIterator(Map<String, Collection<ProductFieldValue>> fieldValues, Rule matcher, - double basePrice, String productCategory) - { - productIterator = new ProductFilterIterator(matcher, - new ProductBuilderIterator(basePrice, productCategory, - buildCartesianProductIterator(fieldValues))); - } - - public Iterator<Map<String, ProductFieldValue>> - buildCartesianProductIterator(Map<String, Collection<ProductFieldValue>> fieldValues) - { - CartesianProduct<ProductFieldValue> product = null; - for(Map.Entry<String, Collection<ProductFieldValue>> pair : fieldValues.entrySet()) - { - if(product == null) - { - product = new CartesianProductBase<ProductFieldValue>(pair.getKey(), pair.getValue()); - } else - { - product = new CartesianProductField<ProductFieldValue>(pair.getKey(), pair.getValue(), product); - } - - } - - return product; - } - - @Override - public boolean hasNext() - { - return productIterator.hasNext(); - } - - @Override - public Product next() - { - return productIterator.next(); - } - - @Override - public void remove() - { - throw new UnsupportedOperationException("ProductIterator does not support remove()"); - } - -} http://git-wip-us.apache.org/repos/asf/bigtop/blob/3bbbb557/bigtop-bigpetstore/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/products/cartesian/CartesianProduct.java ---------------------------------------------------------------------- diff --git a/bigtop-bigpetstore/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/products/cartesian/CartesianProduct.java b/bigtop-bigpetstore/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/products/cartesian/CartesianProduct.java deleted file mode 100644 index f688980..0000000 --- a/bigtop-bigpetstore/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/products/cartesian/CartesianProduct.java +++ /dev/null @@ -1,24 +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.products.cartesian; - -import java.util.Iterator; -import java.util.Map; - -public interface CartesianProduct<T> extends Iterator<Map<String, T>> -{ - -} http://git-wip-us.apache.org/repos/asf/bigtop/blob/3bbbb557/bigtop-bigpetstore/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/products/cartesian/CartesianProductBase.java ---------------------------------------------------------------------- diff --git a/bigtop-bigpetstore/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/products/cartesian/CartesianProductBase.java b/bigtop-bigpetstore/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/products/cartesian/CartesianProductBase.java deleted file mode 100644 index 7b0934c..0000000 --- a/bigtop-bigpetstore/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/products/cartesian/CartesianProductBase.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.products.cartesian; - -import java.util.Collection; -import java.util.HashMap; -import java.util.Iterator; -import java.util.Map; - - -public class CartesianProductBase<T> implements CartesianProduct<T> -{ - String fieldName; - Iterator<T> fieldValues; - - public CartesianProductBase(String fieldName, Collection<T> fieldValues) - { - this.fieldName = fieldName; - this.fieldValues = fieldValues.iterator(); - } - - - @Override - public boolean hasNext() - { - return fieldValues.hasNext(); - } - - @Override - public Map<String, T> next() - { - Map<String, T> map = new HashMap<String, T>(); - map.put(fieldName, fieldValues.next()); - - return map; - } - - @Override - public void remove() - { - throw new UnsupportedOperationException("CartesianProductBase does not support remove()"); - } -} http://git-wip-us.apache.org/repos/asf/bigtop/blob/3bbbb557/bigtop-bigpetstore/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/products/cartesian/CartesianProductField.java ---------------------------------------------------------------------- diff --git a/bigtop-bigpetstore/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/products/cartesian/CartesianProductField.java b/bigtop-bigpetstore/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/products/cartesian/CartesianProductField.java deleted file mode 100644 index 166efc8..0000000 --- a/bigtop-bigpetstore/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/products/cartesian/CartesianProductField.java +++ /dev/null @@ -1,79 +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.products.cartesian; - -import java.util.Collection; -import java.util.HashMap; -import java.util.Iterator; -import java.util.Map; -import java.util.NoSuchElementException; - -public class CartesianProductField<T> implements CartesianProduct<T> -{ - String fieldName; - Iterator<T> fieldValuesIterator; - Collection<T> fieldValues; - CartesianProduct<T> previous; - Map<String, T> baseValue; - - public CartesianProductField(String fieldName, Collection<T> fieldValues, CartesianProduct<T> previous) - { - this.fieldValues = fieldValues; - this.fieldName = fieldName; - this.previous = previous; - } - - @Override - public boolean hasNext() - { - return previous.hasNext() || (fieldValuesIterator != null && fieldValuesIterator.hasNext()); - } - - @Override - public Map<String, T> next() - { - if(fieldValuesIterator != null) - { - Map<String, T> map = new HashMap<String, T>(baseValue); - map.put(fieldName, fieldValuesIterator.next()); - - if(!fieldValuesIterator.hasNext()) - { - fieldValuesIterator = null; - } - - return map; - } else if(previous.hasNext()) - { - baseValue = previous.next(); - fieldValuesIterator = fieldValues.iterator(); - - Map<String, T> map = new HashMap<String, T>(baseValue); - map.put(fieldName, fieldValuesIterator.next()); - - return map; - } - - throw new NoSuchElementException(); - } - - @Override - public void remove() - { - throw new UnsupportedOperationException("CartesianProductBase does not support remove()"); - } - -} http://git-wip-us.apache.org/repos/asf/bigtop/blob/3bbbb557/bigtop-bigpetstore/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/products/collections/MediumProductCollection.java ---------------------------------------------------------------------- diff --git a/bigtop-bigpetstore/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/products/collections/MediumProductCollection.java b/bigtop-bigpetstore/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/products/collections/MediumProductCollection.java deleted file mode 100644 index 2ec72d1..0000000 --- a/bigtop-bigpetstore/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/products/collections/MediumProductCollection.java +++ /dev/null @@ -1,275 +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.products.collections; - -import java.util.List; - -import org.apache.bigtop.bigpetstore.datagenerator.datamodels.PetSpecies; -import org.apache.bigtop.bigpetstore.datagenerator.datamodels.inputs.ProductCategory; -import org.apache.bigtop.bigpetstore.datagenerator.generators.products.ProductCategoryBuilder; -import org.apache.bigtop.bigpetstore.datagenerator.generators.products.ProductFieldValue; -import org.apache.bigtop.bigpetstore.datagenerator.generators.products.rules.AndRule; -import org.apache.bigtop.bigpetstore.datagenerator.generators.products.rules.FieldPredicate; -import org.apache.bigtop.bigpetstore.datagenerator.generators.products.rules.NotRule; -import org.apache.bigtop.bigpetstore.datagenerator.generators.products.rules.OrRule; - -import com.google.common.collect.Lists; - -public class MediumProductCollection -{ - private ProductCategory createDogFood() - { - ProductCategoryBuilder builder = new ProductCategoryBuilder(); - - builder.addApplicableSpecies(PetSpecies.DOG); - builder.setCategory("dry dog food"); - builder.setTriggerTransaction(true); - builder.setDailyUsageRate(2.0); - builder.setAmountUsedPetPetAverage(0.25); - builder.setAmountUsedPetPetVariance(0.1); - builder.setTriggerTransactionRate(2.0); - builder.setTriggerPurchaseRate(7.0); - builder.setBasePrice(2.0); - - builder.addPropertyValues("brand", - new ProductFieldValue("Wellfed", 0.67, 1.0), - new ProductFieldValue("Happy Pup", 0.67, 1.0), - new ProductFieldValue("Dog Days", 1.0, 1.0), - new ProductFieldValue("Chef Corgi", 0.0, 1.0)); - - builder.addPropertyValues("meat", - new ProductFieldValue("Chicken", 0.0, 1.0), - new ProductFieldValue("Pork", 0.0, 1.0), - new ProductFieldValue("Lamb", 0.1, 1.0), - new ProductFieldValue("Salmon", 0.25, 1.0), - new ProductFieldValue("Venison", 0.5, 1.0), - new ProductFieldValue("Rabbit", 0.5, 1.0), - new ProductFieldValue("Vegetarian", 0.0, 1.0)); - - builder.addPropertyValues("grain", - new ProductFieldValue("Corn", 0.0, 1.0), - new ProductFieldValue("Potatoes", 0.1, 1.0), - new ProductFieldValue("Barley", 0.1, 1.0), - new ProductFieldValue("Rice", 0.0, 1.0), - new ProductFieldValue("Soy", 0.1, 1.0)); - - builder.addPropertyValues("lifestage", - new ProductFieldValue("Senior", 0.0, 1.0), - new ProductFieldValue("Puppy", 0.0, 1.0), - new ProductFieldValue("Adult", 0.0, 1.0)); - - builder.addPropertyValues("organic", - new ProductFieldValue("false", 0.0, 1.0), - new ProductFieldValue("true", 0.0, 1.1)); - - builder.addPropertyValues("quantity", - new ProductFieldValue(4.5, 0.0, 4.5), - new ProductFieldValue(15.0, 0.0, 15.0), - new ProductFieldValue(30.0, 0.0, 30.0)); - - builder.addExclusionRule(new AndRule( - new FieldPredicate("brand", "Chef Corgi"), - new FieldPredicate("organic", "true"))); - - builder.addExclusionRule(new AndRule( - new FieldPredicate("brand", "Chef Corgi"), - new FieldPredicate("meat", "Vegetarian"))); - - builder.addExclusionRule(new AndRule( - new FieldPredicate("brand", "Dog Days"), - new FieldPredicate("organic", "false"))); - - builder.addExclusionRule(new AndRule( - new FieldPredicate("grain", "Corn"), - new OrRule( - new FieldPredicate("organic", "true"), - new FieldPredicate("meat", "Venison"), - new FieldPredicate("meat", "Rabbit"), - new FieldPredicate("meat", "Lamb"), - new FieldPredicate("meat", "Salmon")))); - - builder.addExclusionRule(new AndRule( - new FieldPredicate("organic", "true"), - new FieldPredicate("meat", "Pork"))); - - builder.addExclusionRule(new AndRule( - new NotRule(new FieldPredicate("grain", "Corn")), - new FieldPredicate("meat", "Pork"))); - - builder.addExclusionRule(new AndRule( - new OrRule( - new FieldPredicate("brand", "Chef Corgi"), - new FieldPredicate("brand", "Happy Pup")), - new OrRule( - new FieldPredicate("meat", "Rabbit"), - new FieldPredicate("meat", "Venison")) - )); - - return builder.build(); - } - - private ProductCategory createCatFood() - { - ProductCategoryBuilder builder = new ProductCategoryBuilder(); - - builder.addApplicableSpecies(PetSpecies.CAT); - builder.setCategory("dry cat food"); - builder.setTriggerTransaction(true); - builder.setDailyUsageRate(2.0); - builder.setAmountUsedPetPetAverage(0.1); - builder.setAmountUsedPetPetVariance(0.05); - builder.setTriggerTransactionRate(2.0); - builder.setTriggerPurchaseRate(7.0); - builder.setBasePrice(2.14); - - builder.addPropertyValues("brand", - new ProductFieldValue("Wellfed", 0.67, 1.0), - new ProductFieldValue("Feisty Feline", 0.72, 1.0), - new ProductFieldValue("Pretty Cat", 0.0, 1.0)); - - builder.addPropertyValues("meat", - new ProductFieldValue("Tuna", 0.0, 1.0), - new ProductFieldValue("Chicken", 0.0, 1.0), - new ProductFieldValue("Turkey", 0.0, 1.0), - new ProductFieldValue("Salmon", 0.1, 1.0)); - - builder.addPropertyValues("lifestyle", - new ProductFieldValue("Indoor", 0.0, 1.0), - new ProductFieldValue("Outdoor", 0.0, 1.0), - new ProductFieldValue("Weight Management", 0.1, 1.0)); - - builder.addPropertyValues("lifestage", - new ProductFieldValue("Senior", 0.0, 1.0), - new ProductFieldValue("Kitten", 0.0, 1.0), - new ProductFieldValue("Adult", 0.0, 1.0)); - - builder.addPropertyValues("organic", - new ProductFieldValue("true", 0.0, 1.1), - new ProductFieldValue("false", 0.0, 1.0)); - - builder.addPropertyValues("quantity", - new ProductFieldValue(7.0, 0.0, 7.0), - new ProductFieldValue(15.0, 0.0, 15.0)); - - builder.addPropertyValues("hairball management", - new ProductFieldValue("true", 0.1, 1.0), - new ProductFieldValue("false", 0.0, 1.0)); - - builder.addExclusionRule(new AndRule( - new FieldPredicate("brand", "Pretty Cat"), - new FieldPredicate("organic", "true"))); - - builder.addExclusionRule(new AndRule( - new FieldPredicate("brand", "Feisty Feline"), - new FieldPredicate("organic", "false"))); - - return builder.build(); - } - - private ProductCategory createKittyLitter() - { - ProductCategoryBuilder builder = new ProductCategoryBuilder(); - - builder.addApplicableSpecies(PetSpecies.CAT); - builder.setCategory("kitty litter"); - builder.setTriggerTransaction(true); - builder.setDailyUsageRate(1.0); - builder.setAmountUsedPetPetAverage(0.1); - builder.setAmountUsedPetPetVariance(0.05); - builder.setTriggerTransactionRate(2.0); - builder.setTriggerPurchaseRate(7.0); - builder.setBasePrice(1.43); - - builder.addPropertyValues("brand", - new ProductFieldValue("Pretty Cat", 0.0, 1.0), - new ProductFieldValue("Feisty Feline", 0.1, 1.0)); - - builder.addPropertyValues("material", - new ProductFieldValue("clay", 0.0, 1.0), - new ProductFieldValue("pellets", 0.1, 1.0)); - - builder.addPropertyValues("clumping", - new ProductFieldValue("true", 0.0, 1.0), - new ProductFieldValue("false", 0.0, 1.0)); - - builder.addPropertyValues("odor control", - new ProductFieldValue("true", 0.1, 1.0), - new ProductFieldValue("false", 0.0, 1.0)); - - builder.addPropertyValues("quantity", - new ProductFieldValue(7.0, 0.0, 7.0), - new ProductFieldValue(14.0, 0.0, 14.0), - new ProductFieldValue(28.0, 0.0, 28.0)); - - return builder.build(); - } - - private ProductCategory createPoopBags() - { - ProductCategoryBuilder builder = new ProductCategoryBuilder(); - - builder.addApplicableSpecies(PetSpecies.DOG); - builder.setCategory("poop bags"); - builder.setTriggerTransaction(true); - builder.setDailyUsageRate(2.0); - builder.setAmountUsedPetPetAverage(1.0); - builder.setAmountUsedPetPetVariance(0.5); - builder.setTriggerTransactionRate(2.0); - builder.setTriggerPurchaseRate(7.0); - builder.setBasePrice(0.17); - - builder.addPropertyValues("brand", - new ProductFieldValue("Chef Corgi", 0.0, 1.0), - new ProductFieldValue("Happy Pup", 0.67, 1.0), - new ProductFieldValue("Dog Days", 1.0, 1.0)); - - builder.addPropertyValues("color", - new ProductFieldValue("blue", 0.0, 1.0), - new ProductFieldValue("multicolor (pastels)", 0.0, 1.0), - new ProductFieldValue("multicolor (solids)", 0.0, 1.0), - new ProductFieldValue("designs", 0.0, 1.0)); - - builder.addPropertyValues("recycled material", - new ProductFieldValue("false", 0.0, 60.0), - new ProductFieldValue("true", 0.1, 120.0)); - - builder.addPropertyValues("quantity", - new ProductFieldValue(60.0, 0.0, 60.0), - new ProductFieldValue(120.0, 0.0, 120.0)); - - builder.addExclusionRule(new AndRule( - new FieldPredicate("brand", "Chef Corgi"), - new FieldPredicate("recycled material", "true"))); - - builder.addExclusionRule(new AndRule( - new FieldPredicate("brand", "Dog Days"), - new FieldPredicate("recycled material", "false"))); - - return builder.build(); - } - - public List<ProductCategory> generateProductCategory() - { - List<ProductCategory> productCategories = Lists.newArrayList(); - - productCategories.add(this.createDogFood()); - productCategories.add(this.createCatFood()); - productCategories.add(this.createKittyLitter()); - productCategories.add(this.createPoopBags()); - - return productCategories; - } -} http://git-wip-us.apache.org/repos/asf/bigtop/blob/3bbbb557/bigtop-bigpetstore/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/products/collections/SmallProductCollection.java ---------------------------------------------------------------------- diff --git a/bigtop-bigpetstore/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/products/collections/SmallProductCollection.java b/bigtop-bigpetstore/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/products/collections/SmallProductCollection.java deleted file mode 100644 index 8ca71ef..0000000 --- a/bigtop-bigpetstore/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/products/collections/SmallProductCollection.java +++ /dev/null @@ -1,162 +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.products.collections; - -import java.util.List; - -import org.apache.bigtop.bigpetstore.datagenerator.datamodels.PetSpecies; -import org.apache.bigtop.bigpetstore.datagenerator.datamodels.inputs.ProductCategory; -import org.apache.bigtop.bigpetstore.datagenerator.generators.products.ProductCategoryBuilder; -import org.apache.bigtop.bigpetstore.datagenerator.generators.products.ProductFieldValue; - -import com.google.common.collect.Lists; - -public class SmallProductCollection -{ - private ProductCategory createDogFood() - { - ProductCategoryBuilder builder = new ProductCategoryBuilder(); - - builder.addApplicableSpecies(PetSpecies.DOG); - builder.setCategory("dry dog food"); - builder.setTriggerTransaction(true); - builder.setDailyUsageRate(2.0); - builder.setAmountUsedPetPetAverage(0.25); - builder.setAmountUsedPetPetVariance(0.1); - builder.setTriggerTransactionRate(2.0); - builder.setTriggerPurchaseRate(7.0); - builder.setBasePrice(2.0); - - builder.addPropertyValues("brand", - new ProductFieldValue("Wellfed", 0.0, 1.0), - new ProductFieldValue("Happy Pup", 0.67, 1.0), - new ProductFieldValue("Dog Days", 1.0, 1.0)); - - builder.addPropertyValues("flavor", - new ProductFieldValue("Chicken", 0.0, 1.0), - new ProductFieldValue("Pork", 0.0, 1.0), - new ProductFieldValue("Lamb & Rice", 0.0, 1.0), - new ProductFieldValue("Fish & Potato", 0.0, 1.0)); - - builder.addPropertyValues("quantity", - new ProductFieldValue(4.5, 0.0, 4.5), - new ProductFieldValue(15.0, 0.0, 15.0), - new ProductFieldValue(30.0, 0.0, 30.0)); - - return builder.build(); - } - - private ProductCategory createCatFood() - { - ProductCategoryBuilder builder = new ProductCategoryBuilder(); - - builder.addApplicableSpecies(PetSpecies.CAT); - builder.setCategory("dry cat food"); - builder.setTriggerTransaction(true); - builder.setDailyUsageRate(2.0); - builder.setAmountUsedPetPetAverage(0.1); - builder.setAmountUsedPetPetVariance(0.05); - builder.setTriggerTransactionRate(2.0); - builder.setTriggerPurchaseRate(7.0); - builder.setBasePrice(2.14); - - builder.addPropertyValues("brand", - new ProductFieldValue("Wellfed", 0.0, 1.0), - new ProductFieldValue("Pretty Cat", 0.72, 1.0), - new ProductFieldValue("Feisty Feline", 0.0, 1.0)); - - builder.addPropertyValues("flavor", - new ProductFieldValue("Tuna", 0.0, 1.0), - new ProductFieldValue("Chicken & Rice", 0.0, 1.0)); - - builder.addPropertyValues("quantity", - new ProductFieldValue(7.0, 0.0, 7.0), - new ProductFieldValue(15.0, 0.0, 15.0)); - - builder.addPropertyValues("hairball management", - new ProductFieldValue("true", 0.0, 1.0), - new ProductFieldValue("false", 0.0, 1.0)); - - return builder.build(); - } - - private ProductCategory createKittyLitter() - { - ProductCategoryBuilder builder = new ProductCategoryBuilder(); - - builder.addApplicableSpecies(PetSpecies.CAT); - builder.setCategory("kitty litter"); - builder.setTriggerTransaction(true); - builder.setDailyUsageRate(1.0); - builder.setAmountUsedPetPetAverage(0.1); - builder.setAmountUsedPetPetVariance(0.05); - builder.setTriggerTransactionRate(2.0); - builder.setTriggerPurchaseRate(7.0); - builder.setBasePrice(1.43); - - builder.addPropertyValues("brand", - new ProductFieldValue("Pretty Cat", 0.0, 1.0), - new ProductFieldValue("Feisty Feline", 0.07, 1.0)); - - builder.addPropertyValues("quantity", - new ProductFieldValue(7.0, 0.0, 7.0), - new ProductFieldValue(14.0, 0.0, 14.0), - new ProductFieldValue(28.0, 0.0, 28.0)); - - return builder.build(); - } - - private ProductCategory createPoopBags() - { - ProductCategoryBuilder builder = new ProductCategoryBuilder(); - - builder.addApplicableSpecies(PetSpecies.DOG); - builder.setCategory("poop bags"); - builder.setTriggerTransaction(true); - builder.setDailyUsageRate(2.0); - builder.setAmountUsedPetPetAverage(1.0); - builder.setAmountUsedPetPetVariance(0.5); - builder.setTriggerTransactionRate(2.0); - builder.setTriggerPurchaseRate(7.0); - builder.setBasePrice(0.17); - - builder.addPropertyValues("brand", - new ProductFieldValue("Happy Pup", 0.0, 1.0), - new ProductFieldValue("Dog Days", 0.04, 1.0)); - - builder.addPropertyValues("color", - new ProductFieldValue("blue", 0.0, 1.0), - new ProductFieldValue("multicolor", 0.0, 1.0)); - - builder.addPropertyValues("quantity", - new ProductFieldValue(60.0, 0.0, 60.0), - new ProductFieldValue(120.0, 0.0, 120.0)); - - return builder.build(); - } - - public List<ProductCategory> generateProductCategory() - { - List<ProductCategory> productCategories = Lists.newArrayList(); - - productCategories.add(this.createDogFood()); - productCategories.add(this.createCatFood()); - productCategories.add(this.createKittyLitter()); - productCategories.add(this.createPoopBags()); - - return productCategories; - } -} http://git-wip-us.apache.org/repos/asf/bigtop/blob/3bbbb557/bigtop-bigpetstore/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/products/rules/AlwaysTrueRule.java ---------------------------------------------------------------------- diff --git a/bigtop-bigpetstore/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/products/rules/AlwaysTrueRule.java b/bigtop-bigpetstore/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/products/rules/AlwaysTrueRule.java deleted file mode 100644 index d973346..0000000 --- a/bigtop-bigpetstore/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/products/rules/AlwaysTrueRule.java +++ /dev/null @@ -1,29 +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.products.rules; - -import org.apache.bigtop.bigpetstore.datagenerator.datamodels.Product; - -public class AlwaysTrueRule implements Rule -{ - - @Override - public boolean ruleMatches(Product product) throws IllegalArgumentException - { - return true; - } - -} http://git-wip-us.apache.org/repos/asf/bigtop/blob/3bbbb557/bigtop-bigpetstore/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/products/rules/AndRule.java ---------------------------------------------------------------------- diff --git a/bigtop-bigpetstore/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/products/rules/AndRule.java b/bigtop-bigpetstore/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/products/rules/AndRule.java deleted file mode 100644 index 4be89be..0000000 --- a/bigtop-bigpetstore/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/products/rules/AndRule.java +++ /dev/null @@ -1,50 +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.products.rules; - -import java.util.Arrays; -import java.util.LinkedList; -import java.util.List; - -import org.apache.bigtop.bigpetstore.datagenerator.datamodels.Product; - -public class AndRule implements Rule -{ - List<Rule> rules; - - public AndRule(Rule rule1, Rule rule2, Rule ... rules) - { - this.rules = new LinkedList<Rule>(Arrays.asList(rules)); - this.rules.add(rule1); - this.rules.add(rule2); - } - - @Override - public boolean ruleMatches(Product product) throws IllegalArgumentException - { - boolean matches = true; - for(Rule rule : rules) - { - if(! rule.ruleMatches(product)) - { - matches = false; - } - } - - return matches; - } - -} http://git-wip-us.apache.org/repos/asf/bigtop/blob/3bbbb557/bigtop-bigpetstore/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/products/rules/FieldPredicate.java ---------------------------------------------------------------------- diff --git a/bigtop-bigpetstore/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/products/rules/FieldPredicate.java b/bigtop-bigpetstore/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/products/rules/FieldPredicate.java deleted file mode 100644 index 37e7c12..0000000 --- a/bigtop-bigpetstore/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/products/rules/FieldPredicate.java +++ /dev/null @@ -1,48 +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.products.rules; - -import java.util.Arrays; -import java.util.Collection; - -import org.apache.bigtop.bigpetstore.datagenerator.datamodels.Product; - -public class FieldPredicate implements Rule -{ - String fieldName; - Collection<String> allowedValues; - - public FieldPredicate(String fieldName, String ... allowedValues) - { - this.fieldName = fieldName; - this.allowedValues = Arrays.asList(allowedValues); - } - - @Override - public boolean ruleMatches(Product product) - { - if(! product.getFieldNames().contains(fieldName)) - { - throw new IllegalArgumentException("Product (" + product.toString() + - ") does not contain field name (" + fieldName + ")"); - } - - Object seenValue = product.getFieldValue(fieldName); - - return allowedValues.contains(seenValue); - } - -} http://git-wip-us.apache.org/repos/asf/bigtop/blob/3bbbb557/bigtop-bigpetstore/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/products/rules/NotRule.java ---------------------------------------------------------------------- diff --git a/bigtop-bigpetstore/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/products/rules/NotRule.java b/bigtop-bigpetstore/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/products/rules/NotRule.java deleted file mode 100644 index ffac751..0000000 --- a/bigtop-bigpetstore/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/products/rules/NotRule.java +++ /dev/null @@ -1,36 +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.products.rules; - -import org.apache.bigtop.bigpetstore.datagenerator.datamodels.Product; - -public class NotRule implements Rule -{ - Rule rule; - - public NotRule(Rule rule) - { - this.rule = rule; - } - - - @Override - public boolean ruleMatches(Product product) throws IllegalArgumentException - { - return ! rule.ruleMatches(product); - } - -} http://git-wip-us.apache.org/repos/asf/bigtop/blob/3bbbb557/bigtop-bigpetstore/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/products/rules/OrRule.java ---------------------------------------------------------------------- diff --git a/bigtop-bigpetstore/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/products/rules/OrRule.java b/bigtop-bigpetstore/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/products/rules/OrRule.java deleted file mode 100644 index c3ed549..0000000 --- a/bigtop-bigpetstore/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/products/rules/OrRule.java +++ /dev/null @@ -1,43 +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.products.rules; - -import org.apache.bigtop.bigpetstore.datagenerator.datamodels.Product; - -public class OrRule implements Rule -{ - Rule[] rules; - - public OrRule(Rule ... rules) - { - this.rules = rules; - } - - @Override - public boolean ruleMatches(Product product) throws IllegalArgumentException - { - for(Rule rule : rules) - { - if(rule.ruleMatches(product)) - { - return true; - } - } - - return false; - } - -} http://git-wip-us.apache.org/repos/asf/bigtop/blob/3bbbb557/bigtop-bigpetstore/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/products/rules/Rule.java ---------------------------------------------------------------------- diff --git a/bigtop-bigpetstore/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/products/rules/Rule.java b/bigtop-bigpetstore/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/products/rules/Rule.java deleted file mode 100644 index 4aa7945..0000000 --- a/bigtop-bigpetstore/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/products/rules/Rule.java +++ /dev/null @@ -1,23 +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.products.rules; - -import org.apache.bigtop.bigpetstore.datagenerator.datamodels.Product; - -public interface Rule -{ - public boolean ruleMatches(Product product) throws IllegalArgumentException; -} http://git-wip-us.apache.org/repos/asf/bigtop/blob/3bbbb557/bigtop-bigpetstore/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/purchase/MarkovModelProductCategorySampler.java ---------------------------------------------------------------------- diff --git a/bigtop-bigpetstore/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/purchase/MarkovModelProductCategorySampler.java b/bigtop-bigpetstore/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/purchase/MarkovModelProductCategorySampler.java deleted file mode 100644 index c842ff1..0000000 --- a/bigtop-bigpetstore/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/purchase/MarkovModelProductCategorySampler.java +++ /dev/null @@ -1,119 +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.purchase; - -import java.util.Map; - -import org.apache.bigtop.bigpetstore.datagenerator.datamodels.Product; -import org.apache.bigtop.bigpetstore.datagenerator.datamodels.inputs.ProductCategory; -import org.apache.bigtop.bigpetstore.datagenerator.framework.markovmodels.MarkovModel; -import org.apache.bigtop.bigpetstore.datagenerator.framework.markovmodels.MarkovModelBuilder; -import org.apache.bigtop.bigpetstore.datagenerator.framework.samplers.Sampler; - -import com.google.common.collect.Maps; - -public class MarkovModelProductCategorySampler implements Sampler<MarkovModel<Product>> -{ - final ProductCategory productCategory; - final Sampler<Double> fieldSimilarityWeightSampler; - final Sampler<Double> loopbackWeightSampler; - - final Map<String, Double> fieldWeights; - Map<String, Double> fieldSimilarityWeights; - double loopbackWeight; - - public MarkovModelProductCategorySampler(ProductCategory productCategory, - Map<String, Double> fieldWeights, Sampler<Double> fieldSimilarityWeightSampler, - Sampler<Double> loopbackWeightSampler) - { - this.productCategory = productCategory; - - this.fieldSimilarityWeightSampler = fieldSimilarityWeightSampler; - this.fieldWeights = fieldWeights; - this.loopbackWeightSampler = loopbackWeightSampler; - } - - protected void generateWeights() throws Exception - { - fieldSimilarityWeights = Maps.newHashMap(); - - for(String fieldName : productCategory.getFieldNames()) - { - fieldSimilarityWeights.put(fieldName,fieldSimilarityWeightSampler.sample()); - } - - loopbackWeight = loopbackWeightSampler.sample(); - } - - protected double productPairWeight(Product product1, Product product2) - { - double weightSum = 0.0; - for(String fieldName : productCategory.getFieldNames()) - { - double fieldWeight = this.fieldWeights.get(fieldName); - - if(product1.getFieldValue(fieldName).equals(product2.getFieldValue(fieldName))) - { - fieldWeight *= this.fieldSimilarityWeights.get(fieldName); - } - else - { - fieldWeight *= (1.0 - this.fieldSimilarityWeights.get(fieldName)); - } - - weightSum += fieldWeight; - } - return weightSum; - } - - public MarkovModel<Product> sample() throws Exception - { - generateWeights(); - - MarkovModelBuilder<Product> builder = new MarkovModelBuilder<Product>(); - - for(Product product1 : productCategory.getProducts()) - { - builder.addStartState(product1, 1.0); - - double weightSum = 0.0; - for(Product product2 : productCategory.getProducts()) - { - if(!product1.equals(product2)) - { - weightSum += productPairWeight(product1, product2); - } - } - - for(Product product2 : productCategory.getProducts()) - { - double weight = 0.0; - if(!product1.equals(product2)) - { - weight = (1.0 - loopbackWeight) * productPairWeight(product1, product2) / weightSum; - } - else - { weight = loopbackWeight; - - } - - builder.addTransition(product1, product2, weight); - } - } - - return builder.build(); - } -} http://git-wip-us.apache.org/repos/asf/bigtop/blob/3bbbb557/bigtop-bigpetstore/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/purchase/MarkovPurchasingModel.java ---------------------------------------------------------------------- diff --git a/bigtop-bigpetstore/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/purchase/MarkovPurchasingModel.java b/bigtop-bigpetstore/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/purchase/MarkovPurchasingModel.java deleted file mode 100644 index 8b22660..0000000 --- a/bigtop-bigpetstore/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/purchase/MarkovPurchasingModel.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.purchase; - -import java.util.Map; - -import org.apache.bigtop.bigpetstore.datagenerator.datamodels.Product; -import org.apache.bigtop.bigpetstore.datagenerator.framework.SeedFactory; -import org.apache.bigtop.bigpetstore.datagenerator.framework.markovmodels.MarkovModel; -import org.apache.bigtop.bigpetstore.datagenerator.framework.markovmodels.MarkovProcess; -import org.apache.bigtop.bigpetstore.datagenerator.framework.samplers.Sampler; - -import com.google.common.collect.ImmutableMap; -import com.google.common.collect.ImmutableSet; -import com.google.common.collect.Maps; - -public class MarkovPurchasingModel implements PurchasingModel<MarkovModel<Product>> -{ - - private static final long serialVersionUID = 3098355461347511619L; - ImmutableMap<String, MarkovModel<Product>> productCategoryProfiles; - - public MarkovPurchasingModel(Map<String, MarkovModel<Product>> productCategoryProfiles) - { - this.productCategoryProfiles = ImmutableMap.copyOf(productCategoryProfiles); - } - - @Override - public ImmutableSet<String> getProductCategories() - { - return productCategoryProfiles.keySet(); - } - - @Override - public MarkovModel<Product> getProfile(String productCategory) - { - return productCategoryProfiles.get(productCategory); - } - - @Override - public PurchasingProcesses buildProcesses(SeedFactory seedFactory) - { - Map<String, Sampler<Product>> processes = Maps.newHashMap(); - for(String category : getProductCategories()) - { - MarkovModel<Product> model = getProfile(category); - processes.put(category, new MarkovProcess<Product>(model, seedFactory)); - } - - return new PurchasingProcesses(processes); - } -} http://git-wip-us.apache.org/repos/asf/bigtop/blob/3bbbb557/bigtop-bigpetstore/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/purchase/MarkovPurchasingModelSampler.java ---------------------------------------------------------------------- diff --git a/bigtop-bigpetstore/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/purchase/MarkovPurchasingModelSampler.java b/bigtop-bigpetstore/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/purchase/MarkovPurchasingModelSampler.java deleted file mode 100644 index 6291213..0000000 --- a/bigtop-bigpetstore/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/purchase/MarkovPurchasingModelSampler.java +++ /dev/null @@ -1,47 +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.purchase; - -import java.util.Map; - -import org.apache.bigtop.bigpetstore.datagenerator.datamodels.Product; -import org.apache.bigtop.bigpetstore.datagenerator.datamodels.inputs.ProductCategory; -import org.apache.bigtop.bigpetstore.datagenerator.framework.markovmodels.MarkovModel; -import org.apache.bigtop.bigpetstore.datagenerator.framework.samplers.Sampler; - -import com.google.common.collect.Maps; - -public class MarkovPurchasingModelSampler implements Sampler<MarkovPurchasingModel> -{ - final Map<ProductCategory, Sampler<MarkovModel<Product>>> categorySamplers; - - public MarkovPurchasingModelSampler(Map<ProductCategory, Sampler<MarkovModel<Product>>> categorySamplers) - { - this.categorySamplers = categorySamplers; - } - - public MarkovPurchasingModel sample() throws Exception - { - Map<String, MarkovModel<Product>> markovModels = Maps.newHashMap(); - for(ProductCategory productCategory : categorySamplers.keySet()) - { - Sampler<MarkovModel<Product>> sampler = categorySamplers.get(productCategory); - markovModels.put(productCategory.getCategoryLabel(), sampler.sample()); - } - - return new MarkovPurchasingModel(markovModels); - } -} http://git-wip-us.apache.org/repos/asf/bigtop/blob/3bbbb557/bigtop-bigpetstore/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/purchase/MultinomialPurchasingModel.java ---------------------------------------------------------------------- diff --git a/bigtop-bigpetstore/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/purchase/MultinomialPurchasingModel.java b/bigtop-bigpetstore/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/purchase/MultinomialPurchasingModel.java deleted file mode 100644 index 336a898..0000000 --- a/bigtop-bigpetstore/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/purchase/MultinomialPurchasingModel.java +++ /dev/null @@ -1,67 +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.purchase; - -import java.util.Map; - -import org.apache.bigtop.bigpetstore.datagenerator.datamodels.Product; -import org.apache.bigtop.bigpetstore.datagenerator.framework.SeedFactory; -import org.apache.bigtop.bigpetstore.datagenerator.framework.pdfs.MultinomialPDF; -import org.apache.bigtop.bigpetstore.datagenerator.framework.samplers.RouletteWheelSampler; -import org.apache.bigtop.bigpetstore.datagenerator.framework.samplers.Sampler; - -import com.google.common.collect.ImmutableMap; -import com.google.common.collect.ImmutableSet; -import com.google.common.collect.Maps; - -public class MultinomialPurchasingModel implements PurchasingModel<MultinomialPDF<Product>> -{ - - private static final long serialVersionUID = 5863830733003282570L; - - private final ImmutableMap<String, MultinomialPDF<Product>> productPDFs; - - public MultinomialPurchasingModel(Map<String, MultinomialPDF<Product>> productPDFs) - { - this.productPDFs = ImmutableMap.copyOf(productPDFs); - } - - @Override - public ImmutableSet<String> getProductCategories() - { - return productPDFs.keySet(); - } - - @Override - public MultinomialPDF<Product> getProfile(String category) - { - return productPDFs.get(category); - } - - @Override - public PurchasingProcesses buildProcesses(SeedFactory seedFactory) - { - Map<String, Sampler<Product>> processes = Maps.newHashMap(); - for(String category : getProductCategories()) - { - MultinomialPDF<Product> pdf = productPDFs.get(category); - processes.put(category, RouletteWheelSampler.create(pdf, seedFactory)); - } - - return new PurchasingProcesses(processes); - } - -} http://git-wip-us.apache.org/repos/asf/bigtop/blob/3bbbb557/bigtop-bigpetstore/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/purchase/MultinomialPurchasingModelSampler.java ---------------------------------------------------------------------- diff --git a/bigtop-bigpetstore/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/purchase/MultinomialPurchasingModelSampler.java b/bigtop-bigpetstore/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/purchase/MultinomialPurchasingModelSampler.java deleted file mode 100644 index 7fcfbe5..0000000 --- a/bigtop-bigpetstore/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/purchase/MultinomialPurchasingModelSampler.java +++ /dev/null @@ -1,143 +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.purchase; - -import java.util.Collection; -import java.util.List; -import java.util.Map; -import java.util.Vector; - -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; -import org.apache.bigtop.bigpetstore.datagenerator.framework.pdfs.MultinomialPDF; -import org.apache.bigtop.bigpetstore.datagenerator.framework.samplers.Sampler; -import org.apache.bigtop.bigpetstore.datagenerator.framework.samplers.UniformIntSampler; -import org.apache.bigtop.bigpetstore.datagenerator.framework.samplers.UniformSampler; -import org.apache.commons.lang3.tuple.Pair; - -import com.google.common.collect.HashMultimap; -import com.google.common.collect.ImmutableMap; -import com.google.common.collect.Maps; -import com.google.common.collect.Multimap; - -public class MultinomialPurchasingModelSampler implements Sampler<MultinomialPurchasingModel> -{ - private final SeedFactory seedFactory; - private final Collection<ProductCategory> productCategories; - - public MultinomialPurchasingModelSampler(Collection<ProductCategory> productCategories, SeedFactory seedFactory) - { - this.seedFactory = seedFactory; - this.productCategories = productCategories; - } - - protected <T> List<T> shuffle(Collection<T> input) throws Exception - { - Vector<T> shuffled = new Vector<>(input); - for(int i = 0; i < input.size() - 1; i++) - { - int swapIdx = new UniformIntSampler(i, input.size() - 1, seedFactory).sample(); - T tmp = shuffled.get(i); - shuffled.set(i, shuffled.get(swapIdx)); - shuffled.set(swapIdx, tmp); - } - - return shuffled; - } - - protected Map<Pair<String, Object>, Double> generateFieldValueWeights(ProductCategory productCategory) throws Exception - { - // Get all values for each field by iterating over all products - Multimap<String, Object> allFieldValues = HashMultimap.create(); - for(String fieldName : productCategory.getFieldNames()) - { - if(!Constants.PRODUCT_MODEL_EXCLUDED_FIELDS.contains(fieldName)) - { - for(Product p : productCategory.getProducts()) - { - Object fieldValue = p.getFieldValue(fieldName); - allFieldValues.put(fieldName, fieldValue); - } - } - } - - Sampler<Double> sampler = new UniformSampler(seedFactory); - - // shuffle field values - Map<Pair<String, Object>, Double> fieldValueWeights = Maps.newHashMap(); - for(Map.Entry<String, Collection<Object>> entry : allFieldValues.asMap().entrySet()) - { - String fieldName = entry.getKey(); - List<Object> shuffled = shuffle(entry.getValue()); - - for(int i = 0; i < shuffled.size(); i++) - { - double weight = Constants.PRODUCT_MULTINOMIAL_POSITIVE_WEIGHT; - if ((i + 1) > Constants.PRODUCT_MULTINOMIAL_POSITIVE_COUNT_MIN) - { - double r = sampler.sample(); - if (r >= Constants.PRODUCT_MULTINOMIAL_POSITIVE_FREQUENCY) - { - weight = Constants.PRODUCT_MULTINOMIAL_NEGATIVE_WEIGHT; - } - } - - Object fieldValue = shuffled.get(i); - fieldValueWeights.put(Pair.of(fieldName, fieldValue), weight); - } - } - - - return ImmutableMap.copyOf(fieldValueWeights); - } - - protected Map<Product, Double> generateProductWeights(Map<Pair<String, Object>, Double> fieldValueWeights, - ProductCategory productCategory) throws Exception - { - Map<Product, Double> productWeights = Maps.newHashMap(); - for(Product p : productCategory.getProducts()) - { - double weight = 1.0; - for(String fieldName : productCategory.getFieldNames()) - { - if(!Constants.PRODUCT_MODEL_EXCLUDED_FIELDS.contains(fieldName)) - { - Object fieldValue = p.getFieldValue(fieldName); - Pair<String, Object> key = Pair.of(fieldName, fieldValue); - weight *= fieldValueWeights.get(key); - } - } - productWeights.put(p, weight); - } - - return productWeights; - } - - public MultinomialPurchasingModel sample() throws Exception - { - Map<String, MultinomialPDF<Product>> pdfs = Maps.newHashMap(); - for(ProductCategory productCategory : productCategories) - { - Map<Pair<String, Object>, Double> fieldWeights = this.generateFieldValueWeights(productCategory); - Map<Product, Double> productWeights = this.generateProductWeights(fieldWeights, productCategory); - pdfs.put(productCategory.getCategoryLabel(), new MultinomialPDF<Product>(productWeights)); - } - - return new MultinomialPurchasingModel(pdfs); - } -} http://git-wip-us.apache.org/repos/asf/bigtop/blob/3bbbb557/bigtop-bigpetstore/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/purchase/PurchasingModel.java ---------------------------------------------------------------------- diff --git a/bigtop-bigpetstore/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/purchase/PurchasingModel.java b/bigtop-bigpetstore/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/purchase/PurchasingModel.java deleted file mode 100644 index d460c3b..0000000 --- a/bigtop-bigpetstore/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/purchase/PurchasingModel.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.purchase; - -import java.io.Serializable; - -import org.apache.bigtop.bigpetstore.datagenerator.framework.SeedFactory; - -import com.google.common.collect.ImmutableSet; - -public interface PurchasingModel<T> extends Serializable -{ - public ImmutableSet<String> getProductCategories(); - - public T getProfile(String category); - - public PurchasingProcesses buildProcesses(SeedFactory seedFactory); -} http://git-wip-us.apache.org/repos/asf/bigtop/blob/3bbbb557/bigtop-bigpetstore/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/purchase/PurchasingModelSamplerBuilder.java ---------------------------------------------------------------------- diff --git a/bigtop-bigpetstore/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/purchase/PurchasingModelSamplerBuilder.java b/bigtop-bigpetstore/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/purchase/PurchasingModelSamplerBuilder.java deleted file mode 100644 index 43808c7..0000000 --- a/bigtop-bigpetstore/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/purchase/PurchasingModelSamplerBuilder.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.purchase; - -import java.util.Collection; -import java.util.HashSet; -import java.util.Map; -import java.util.Set; - -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; -import org.apache.bigtop.bigpetstore.datagenerator.framework.markovmodels.MarkovModel; -import org.apache.bigtop.bigpetstore.datagenerator.framework.samplers.BoundedMultiModalGaussianSampler; -import org.apache.bigtop.bigpetstore.datagenerator.framework.samplers.Sampler; - -import com.google.common.collect.ImmutableList; -import com.google.common.collect.Maps; - -public class PurchasingModelSamplerBuilder -{ - final ImmutableList<ProductCategory> productCategories; - final SeedFactory seedFactory; - - public PurchasingModelSamplerBuilder(Collection<ProductCategory> productCategories, SeedFactory seedFactory) - { - this.productCategories = ImmutableList.copyOf(productCategories); - this.seedFactory = seedFactory; - } - - protected Map<String, Double> generateFieldWeights(Sampler<Double> fieldWeightSampler) throws Exception - { - Set<String> fieldNames = new HashSet<String>(); - for(ProductCategory pc : productCategories) - { - for(String fieldName : pc.getFieldNames()) - { - fieldNames.add(fieldName); - } - } - - Map<String, Double> fieldWeights = Maps.newHashMap(); - for(String fieldName : fieldNames) - { - double weight = fieldWeightSampler.sample(); - fieldWeights.put(fieldName, weight); - } - - return fieldWeights; - } - - public Sampler<MarkovPurchasingModel> buildMarkovPurchasingModel() throws Exception - { - - Sampler<Double> fieldWeightSampler = new BoundedMultiModalGaussianSampler(Constants.PRODUCT_MSM_FIELD_WEIGHT_GAUSSIANS, - Constants.PRODUCT_MSM_FIELD_WEIGHT_LOWERBOUND, - Constants.PRODUCT_MSM_FIELD_WEIGHT_UPPERBOUND, - seedFactory); - - Sampler<Double> fieldSimilarityWeightSampler = new BoundedMultiModalGaussianSampler(Constants.PRODUCT_MSM_FIELD_SIMILARITY_WEIGHT_GAUSSIANS, - Constants.PRODUCT_MSM_FIELD_SIMILARITY_WEIGHT_LOWERBOUND, - Constants.PRODUCT_MSM_FIELD_SIMILARITY_WEIGHT_UPPERBOUND, - seedFactory); - - Sampler<Double> loopbackWeightSampler = new BoundedMultiModalGaussianSampler(Constants.PRODUCT_MSM_LOOPBACK_WEIGHT_GAUSSIANS, - Constants.PRODUCT_MSM_LOOPBACK_WEIGHT_LOWERBOUND, - Constants.PRODUCT_MSM_LOOPBACK_WEIGHT_UPPERBOUND, - seedFactory); - - Map<String, Double> fieldWeights = generateFieldWeights(fieldWeightSampler); - - Map<ProductCategory, Sampler<MarkovModel<Product>>> categorySamplers = Maps.newHashMap(); - for(ProductCategory productCategory : productCategories) - { - MarkovModelProductCategorySampler sampler = new MarkovModelProductCategorySampler(productCategory, - fieldWeights, fieldSimilarityWeightSampler, loopbackWeightSampler); - categorySamplers.put(productCategory, sampler); - } - - return new MarkovPurchasingModelSampler(categorySamplers); - } - - public Sampler<? extends PurchasingModel> build() throws Exception - { - if(Constants.PURCHASING_MODEL_TYPE.equals(Constants.PurchasingModelType.MARKOV)) - { - return buildMarkovPurchasingModel(); - } - else - { - return new MultinomialPurchasingModelSampler(productCategories, seedFactory); - } - } -} http://git-wip-us.apache.org/repos/asf/bigtop/blob/3bbbb557/bigtop-bigpetstore/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/purchase/PurchasingProcesses.java ---------------------------------------------------------------------- diff --git a/bigtop-bigpetstore/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/purchase/PurchasingProcesses.java b/bigtop-bigpetstore/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/purchase/PurchasingProcesses.java deleted file mode 100644 index d9a9849..0000000 --- a/bigtop-bigpetstore/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/purchase/PurchasingProcesses.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.purchase; - -import java.util.Map; - -import org.apache.bigtop.bigpetstore.datagenerator.datamodels.Product; -import org.apache.bigtop.bigpetstore.datagenerator.framework.samplers.ConditionalSampler; -import org.apache.bigtop.bigpetstore.datagenerator.framework.samplers.Sampler; - -import com.google.common.collect.ImmutableMap; - -public class PurchasingProcesses implements ConditionalSampler<Product, String> -{ - ImmutableMap<String, Sampler<Product>> processes; - - public PurchasingProcesses(Map<String, Sampler<Product>> processes) - { - this.processes = ImmutableMap.copyOf(processes); - } - - public Product sample(String productCategory) throws Exception - { - return this.processes.get(productCategory).sample(); - } -} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/bigtop/blob/3bbbb557/bigtop-bigpetstore/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/store/StoreLocationIncomePDF.java ---------------------------------------------------------------------- diff --git a/bigtop-bigpetstore/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/store/StoreLocationIncomePDF.java b/bigtop-bigpetstore/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/store/StoreLocationIncomePDF.java deleted file mode 100644 index 345956f..0000000 --- a/bigtop-bigpetstore/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/store/StoreLocationIncomePDF.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.store; - -import java.util.List; - -import org.apache.bigtop.bigpetstore.datagenerator.datamodels.inputs.ZipcodeRecord; -import org.apache.bigtop.bigpetstore.datagenerator.framework.pdfs.ProbabilityDensityFunction; - -public class StoreLocationIncomePDF implements ProbabilityDensityFunction<ZipcodeRecord> -{ - double incomeNormalizationFactor; - double minIncome; - double k; - - public StoreLocationIncomePDF(List<ZipcodeRecord> zipcodeTable, double incomeScalingFactor) - { - - double maxIncome = 0.0; - minIncome = Double.MAX_VALUE; - - for(ZipcodeRecord record : zipcodeTable) - { - maxIncome = Math.max(maxIncome, record.getMedianHouseholdIncome()); - minIncome = Math.min(minIncome, record.getMedianHouseholdIncome()); - } - - k = Math.log(incomeScalingFactor) / (maxIncome - minIncome); - - incomeNormalizationFactor = 0.0d; - for(ZipcodeRecord record : zipcodeTable) - { - double weight = incomeWeight(record); - incomeNormalizationFactor += weight; - } - } - - private double incomeWeight(ZipcodeRecord record) - { - return Math.exp(k * (record.getMedianHouseholdIncome() - minIncome)); - } - - - @Override - public double probability(ZipcodeRecord datum) - { - double weight = incomeWeight(datum); - - return weight / this.incomeNormalizationFactor; - } - -} http://git-wip-us.apache.org/repos/asf/bigtop/blob/3bbbb557/bigtop-bigpetstore/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/store/StoreLocationPopulationPDF.java ---------------------------------------------------------------------- diff --git a/bigtop-bigpetstore/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/store/StoreLocationPopulationPDF.java b/bigtop-bigpetstore/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/store/StoreLocationPopulationPDF.java deleted file mode 100644 index 8c6f43c..0000000 --- a/bigtop-bigpetstore/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/store/StoreLocationPopulationPDF.java +++ /dev/null @@ -1,43 +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.store; - -import java.util.List; - -import org.apache.bigtop.bigpetstore.datagenerator.datamodels.inputs.ZipcodeRecord; -import org.apache.bigtop.bigpetstore.datagenerator.framework.pdfs.ProbabilityDensityFunction; - -public class StoreLocationPopulationPDF implements ProbabilityDensityFunction<ZipcodeRecord> -{ - double populationSum = 0.0; - - public StoreLocationPopulationPDF(List<ZipcodeRecord> zipcodeTable) - { - long populationSum = 0L; - for(ZipcodeRecord record : zipcodeTable) - { - populationSum += record.getPopulation(); - } - - this.populationSum = ((double) populationSum); - } - - public double probability(ZipcodeRecord record) - { - return ((double) record.getPopulation()) / populationSum; - } - -}
