/*
* 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.geode.cache.snapshot;
import com.examples.snapshot.MyDataSerializer;
import com.examples.snapshot.MyDataSerializer.MyObjectDataSerializable2;
import com.examples.snapshot.MyObject;
import com.examples.snapshot.MyObjectDataSerializable;
import com.examples.snapshot.MyObjectPdx;
import com.examples.snapshot.MyObjectPdx.MyEnumPdx;
import com.examples.snapshot.MyPdxSerializer.MyObjectPdx2;
import org.apache.geode.DataSerializer;
import org.apache.geode.cache.Cache;
import org.apache.geode.cache.EvictionAction;
import org.apache.geode.cache.EvictionAttributes;
import org.apache.geode.cache.Region;
import org.apache.geode.cache.RegionShortcut;
public class RegionGenerator {
public enum RegionType {
REPLICATE, REPLICATE_PERSISTENT, REPLICATE_PERSISTENT_OVERFLOW, PARTITION, PARTITION_PERSISTENT, PARTITION_PERSISTENT_OVERFLOW;
public static RegionType[] persistentValues() {
return new RegionType[] {REPLICATE_PERSISTENT, REPLICATE_PERSISTENT_OVERFLOW,
PARTITION_PERSISTENT, PARTITION_PERSISTENT_OVERFLOW};
}
}
public enum SerializationType {
SERIALIZABLE, DATA_SERIALIZABLE, DATA_SERIALIZER, PDX, PDX_SERIALIZER;
public static SerializationType[] offlineValues() {
return new SerializationType[] {SERIALIZABLE, DATA_SERIALIZABLE, DATA_SERIALIZER};
}
}
public RegionGenerator() {
DataSerializer.register(MyDataSerializer.class);
}
public <K, V> Region<K, V> createRegion(Cache c, String diskStore, RegionType type, String name) {
Region<Integer, MyObject> r = c.getRegion(name);
switch (type) {
case REPLICATE:
return c.<K, V>createRegionFactory(RegionShortcut.REPLICATE).create(name);
case REPLICATE_PERSISTENT:
return c.<K, V>createRegionFactory(RegionShortcut.REPLICATE_PERSISTENT)
.setDiskStoreName(diskStore).create(name);
case REPLICATE_PERSISTENT_OVERFLOW:
return c.<K, V>createRegionFactory(RegionShortcut.REPLICATE_PERSISTENT_OVERFLOW)
.setEvictionAttributes(
EvictionAttributes.createLIFOEntryAttributes(1, EvictionAction.OVERFLOW_TO_DISK))
.setDiskStoreName(diskStore).create(name);
case PARTITION:
return c.<K, V>createRegionFactory(RegionShortcut.PARTITION).create(name);
case PARTITION_PERSISTENT:
return c.<K, V>createRegionFactory(RegionShortcut.PARTITION_PERSISTENT)
.setDiskStoreName(diskStore).create(name);
case PARTITION_PERSISTENT_OVERFLOW:
return c.<K, V>createRegionFactory(RegionShortcut.PARTITION_PERSISTENT_OVERFLOW)
.setEvictionAttributes(
EvictionAttributes.createLIFOEntryAttributes(5, EvictionAction.OVERFLOW_TO_DISK))
.setDiskStoreName(diskStore).create(name);
}
throw new IllegalArgumentException();
}
public MyObject createData(SerializationType type, int f1, String f2) {
switch (type) {
case SERIALIZABLE:
return new MyObject(f1, f2);
case DATA_SERIALIZABLE:
return new MyObjectDataSerializable(f1, f2);
case DATA_SERIALIZER:
return new MyObjectDataSerializable2(f1, f2);
case PDX:
return new MyObjectPdx(f1, f2, MyEnumPdx.const1);
case PDX_SERIALIZER:
return new MyObjectPdx2(f1, f2);
}
throw new IllegalArgumentException();
}
}