Consider this class definition for this discussion. You'll refer back to it (sometimes by line number).
public enum ReferenceType
{
SOURCE ( 0, true, null, null ),
MEMORY ( 1, false, null, null ),
PHOTO ( 2, false, null, null ),
STORY ( 3, false, null, null ),
OBITUARY ( 4, false, null, null ),
BOOK ( 5, true, null, null ),
DISCUSSION ( 6, false, null, null ),
DOCUMENT ( 7, false, null, null ),
EXTERNAL_PERSONA( 8, false,
new ArrayList< Permission >( Arrays.asList( Permission.AddDataPermission, Permission.AddPermission ) ),
new ArrayList< Permission >( Arrays.asList( Permission.AddDataPermission, Permission.AddPermission ) ) );
private final int refCode;
private final boolean isSource;
private final List< Permission > readPerm;
private final List< Permission > writePerm;
private ReferenceType( int sourceReferenceTypeCode,
boolean isSource,
List< Permission > readPerm,
List< Permission > writePerm )
{
this.refCode = sourceReferenceTypeCode;
this.isSource = isSource;
this.readPerm = readPerm;
this.writePerm = writePerm;
}
public static List< Permission > getReadPerm( ReferenceType type )
{
return type.readPerm;
}
public static List< Permission > getWritePerm( ReferenceType type )
{
return type.writePerm;
}
public static boolean readPermissionHolderForType( Permission permission, ReferenceType type )
{
return type.readPerm.contains( permission );
}
public static boolean writePermissionHolderForType( Permission permission, ReferenceType type )
{
return type.writePerm.contains( permission );
}
...
}
And here's a JUnit test...
public class TestReferenceType
{
@Test
public void testGetReadPerm()
{
List< Permission > holders = ReferenceType.getReadPerm( ReferenceType.ATTACHED_CMIS_PERSONA );
Assert.assertNotNull( holders );
System.out.println( "Permissions for " + ReferenceType.ATTACHED_CMIS_PERSONA );
for( Permission p : holders )
System.out.println( " " + p );
}
@Test
public void testCheckReadPermission_true()
{
boolean hasPermission = ReferenceType.readPermissionHolderForType( Permission.AddDataPermission,
ReferenceType.ATTACHED_CMIS_PERSONA );
Assert.assertTrue( hasPermission );
}
@Test
public void testCheckReadPermission_false()
{
boolean hasPermission = ReferenceType.readPermissionHolderForType( Permission.ActAsBulkMergePermission,
ReferenceType.ATTACHED_CMIS_PERSONA );
Assert.assertFalse( hasPermission );
}
@Test
public void testCheckWritePermission_true()
{
boolean hasPermission = ReferenceType.writePermissionHolderForType( Permission.AddDataPermission,
ReferenceType.ATTACHED_CMIS_PERSONA );
Assert.assertTrue( hasPermission );
}
@Test
public void testCheckWritePermission_false()
{
boolean hasPermission = ReferenceType.writePermissionHolderForType( Permission.ActAsBulkMergePermission,
ReferenceType.ATTACHED_CMIS_PERSONA );
Assert.assertFalse( hasPermission );
}
}
Here's another class to look at...
package com.etretatlogiciels.utilities;
import java.util.ArrayList;
import java.util.List;
public enum CassandraType
{
c_text, // UTF-8 encoded string
c_ascii, // US_ASCII 7-bit
c_varchar, // UTF-8 encoded string
c_int, // 32-bit signed
c_bigint, // 64-bit signed
c_smallint, // 2-byte signed
c_tinyint, // 1-byte signed
c_varint, // arbitrary-precision
c_decimal, // variable-precision
c_float, // 32-bit IEEEE-754
c_double, // 64-bit IEEEE-754
c_boolean, // true/false
c_counter, // distributed, 64-bit
c_date, // 32-bit day since Epoch
c_time, // 64-bit nanoseconds since midnight
c_timestamp, // 8 bytes since Epoch; date and time with millisecond precision
c_timeuuid, // ?
c_inet, // IPv4 or IPv6
c_tuple, // 2-3 fields
c_uuid, // 128-bit globally unique identifier
c_list, // collection of 1+ elements (performance impact)
c_map, // JSON-style array of literals
c_set, // collection of 1+ literal elements
c_blob, // arbitrary bytes (no validation), in hexadecimal
c_frozen, // multiple types in single value, treated as blob
;
/**
* Useful to determine whether potential enum type,
* in string form, is a Cassandra type.
*/
public static boolean contains( String type )
{
try
{
CassandraType.valueOf( type );
return true;
}
catch( IllegalArgumentException e )
{
return false;
}
}
/**
* Useful to determine whether potential type,
* in string form, is a Cassandra type.
*/
public static CassandraType stringToCassandraType( String string )
{
try
{
return CassandraType.valueOf( "c_" + string );
}
catch( IllegalArgumentException e )
{
return null;
}
}
/**
* Useful to return a list of Cassandra types.
*/
public static List< String > getCassandraTypes()
{
List< String > list = new ArrayList<>( CassandraType.values().length );
for( CassandraType type : CassandraType.values() )
list.add( type.name() );
return list;
}
}
And here's a JUnit test...
package com.etretatlogiciels.utilities;
import java.util.List;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
public class CassandraTypeTest
{
@Test
public void testStringToCassandraType() throws Exception
{
assertNotNull( CassandraType.stringToCassandraType( "text" ) );
assertNotNull( CassandraType.stringToCassandraType( "blob" ) );
assertNotNull( CassandraType.stringToCassandraType( "frozen" ) );
CassandraType type = CassandraType.stringToCassandraType( "boolean" );
assertTrue( type == CassandraType.c_boolean );
}
@Test
public void testList()
{
List< String > types = CassandraType.getCassandraTypes();
String values = String.join(",\n", types);
System.out.println( values );
}
}