/* * 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.ignite.yardstick.cache.load.model; import java.util.UUID; import org.apache.ignite.yardstick.cache.load.model.key.Identifier; import org.apache.ignite.yardstick.cache.load.model.key.Mark; import org.apache.ignite.yardstick.cache.load.model.value.Car; import org.apache.ignite.yardstick.cache.load.model.value.Color; import org.apache.ignite.yardstick.cache.load.model.value.Truck; import org.apache.ignite.yardstick.cache.model.Account; import org.apache.ignite.yardstick.cache.model.Organization; import org.apache.ignite.yardstick.cache.model.Person; import org.apache.ignite.yardstick.cache.model.Person1; import org.apache.ignite.yardstick.cache.model.Person2; import org.apache.ignite.yardstick.cache.model.Person8; /** * Util class for model. */ public class ModelUtil { /** * Classes of keys. */ private static Class[] keyClasses = { Double.class, Identifier.class, Mark.class, Integer.class, UUID.class, String.class }; /** * Classes of values. */ private static Class[] valClasses = { // Car.class, // Truck.class, Person.class, Organization.class, Account.class, Person1.class, Person2.class, Person8.class }; /** * Simple of classes. * Upper approximate size of value 24 bytes. */ private static Class[] simpleClasses = { Account.class, Person1.class, Person2.class, }; /** * Fat of classes. * Upper approximate size of value 128 bytes. */ private static Class[] fatClasses = { Person.class, Person8.class, Organization.class }; /** * @param clazz Checked class. * @return Result. */ public static boolean canCreateInstance(Class clazz) { for (Class c: keyClasses) { if (c.equals(clazz)) return true; } for (Class c: valClasses) { if (c.equals(clazz)) return true; } return false; } /** * @param c model class * @param id object id * @return object from model */ public static Object create(Class c, int id) { Object res = null; switch (c.getSimpleName()) { case "Double": res = id; break; case "Identifier": res = new Identifier(id, "id " + id); break; case "Mark": res = new Mark(id, UUID.nameUUIDFromBytes(Integer.toString(id).getBytes())); break; case "Integer": res = id; break; case "UUID": res = UUID.nameUUIDFromBytes(Integer.toString(id).getBytes()); break; case "Car": int colorCnt = Color.values().length; res = new Car(id, "Mark " + id, id / 2.123 * 100, Color.values()[id % colorCnt]); break; case "Truck": int colors = Color.values().length; res = new Truck(id, "Mark " + id, id / 2.123 * 100, Color.values()[id % colors], id / 4.123 * 100); break; case "Person": res = new Person(id, id+1, "First Name " + id, "Last Name " + id, id / 2.123 * 100); break; case "Organization": res = new Organization(id, "Organization " + id); break; case "Account": res = new Account(id); break; case "Person1": res = new Person1(id); break; case "Person2": res = new Person2(id); break; case "Person8": res = new Person8(id); break; case "String": res = String.valueOf(id); } return res; } /** * @return array of key cache classes */ public static Class[] keyClasses() { return keyClasses; } /** * @return Array of cache value classes */ public static Class[] valueClasses() { return valClasses; } /** * @return Array of cache value simple classes. */ public static Class[] simpleValueClasses() { return simpleClasses; } /** * @return Array of cache value fat classes. */ public static Class[] fatValueClasses() { return fatClasses; } }