Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
A
atlas
Project
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
dataplatform
atlas
Commits
43081eee
Commit
43081eee
authored
May 26, 2015
by
Shwetha G S
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #105 from shwethags/types
Enforce minimum data requirements for types
parents
f7d633de
aa27c1bf
Show whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
275 additions
and
15 deletions
+275
-15
pom.xml
typesystem/pom.xml
+0
-1
ParamChecker.java
...rc/main/java/org/apache/hadoop/metadata/ParamChecker.java
+148
-0
AttributeDefinition.java
...hadoop/metadata/typesystem/types/AttributeDefinition.java
+4
-7
EnumTypeDefinition.java
.../hadoop/metadata/typesystem/types/EnumTypeDefinition.java
+4
-2
EnumValue.java
...rg/apache/hadoop/metadata/typesystem/types/EnumValue.java
+3
-1
HierarchicalTypeDefinition.java
...metadata/typesystem/types/HierarchicalTypeDefinition.java
+1
-1
StructTypeDefinition.java
...adoop/metadata/typesystem/types/StructTypeDefinition.java
+12
-3
TypeSystem.java
...g/apache/hadoop/metadata/typesystem/types/TypeSystem.java
+1
-0
ValidationTest.java
...ache/hadoop/metadata/typesystem/types/ValidationTest.java
+102
-0
No files found.
typesystem/pom.xml
View file @
43081eee
...
@@ -128,7 +128,6 @@
...
@@ -128,7 +128,6 @@
<dependency>
<dependency>
<groupId>
commons-lang
</groupId>
<groupId>
commons-lang
</groupId>
<artifactId>
commons-lang
</artifactId>
<artifactId>
commons-lang
</artifactId>
<scope>
test
</scope>
</dependency>
</dependency>
</dependencies>
</dependencies>
...
...
typesystem/src/main/java/org/apache/hadoop/metadata/ParamChecker.java
0 → 100644
View file @
43081eee
/*
* 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
.
hadoop
.
metadata
;
import
java.util.Arrays
;
import
java.util.Collection
;
public
class
ParamChecker
{
/**
* Check that a value is not null. If null throws an IllegalArgumentException.
*
* @param obj value.
* @param name parameter name for the exception message.
* @return the given value.
*/
public
static
<
T
>
T
notNull
(
T
obj
,
String
name
)
{
if
(
obj
==
null
)
{
throw
new
IllegalArgumentException
(
name
+
" cannot be null"
);
}
return
obj
;
}
/**
* Check that a list is not null and that none of its elements is null. If null or if the list has emtpy elements
* throws an IllegalArgumentException.
* @param list the list of T.
* @param name parameter name for the exception message.
*/
public
static
<
T
>
Collection
<
T
>
notNullElements
(
Collection
<
T
>
list
,
String
name
)
{
notEmpty
(
list
,
name
);
for
(
T
ele
:
list
)
{
notNull
(
ele
,
String
.
format
(
"Collection %s element %s"
,
name
,
ele
));
}
return
list
;
}
/**
* Check that a list is not null and that none of its elements is null. If null or if the list has emtpy elements
* throws an IllegalArgumentException.
* @param array the array of T.
* @param name parameter name for the exception message.
*/
public
static
<
T
>
T
[]
notNullElements
(
T
[]
array
,
String
name
)
{
notEmpty
(
Arrays
.
asList
(
array
),
name
);
for
(
T
ele
:
array
)
{
notNull
(
ele
,
String
.
format
(
"Collection %s element %s"
,
name
,
ele
));
}
return
array
;
}
/**
* Check that a list is not null and not empty.
* @param list the list of T.
* @param name parameter name for the exception message.
*/
public
static
<
T
>
Collection
<
T
>
notEmpty
(
Collection
<
T
>
list
,
String
name
)
{
notNull
(
list
,
name
);
if
(
list
.
isEmpty
())
{
throw
new
IllegalArgumentException
(
String
.
format
(
"Collection %s is empty"
,
name
));
}
return
list
;
}
/**
* Check that a string is not null and not empty. If null or emtpy throws an IllegalArgumentException.
*
* @param value value.
* @param name parameter name for the exception message.
* @return the given value.
*/
public
static
String
notEmpty
(
String
value
,
String
name
)
{
return
notEmpty
(
value
,
name
,
null
);
}
/**
* Check that a string is not empty if its not null.
*
* @param value value.
* @param name parameter name for the exception message.
* @return the given value.
*/
public
static
String
notEmptyIfNotNull
(
String
value
,
String
name
)
{
return
notEmptyIfNotNull
(
value
,
name
,
null
);
}
/**
* Check that a string is not empty if its not null.
*
* @param value value.
* @param name parameter name for the exception message.
* @return the given value.
*/
public
static
String
notEmptyIfNotNull
(
String
value
,
String
name
,
String
info
)
{
if
(
value
==
null
)
{
return
value
;
}
if
(
value
.
trim
().
length
()
==
0
)
{
throw
new
IllegalArgumentException
(
name
+
" cannot be empty"
+
(
info
==
null
?
""
:
", "
+
info
));
}
return
value
.
trim
();
}
/**
* Check that a string is not null and not empty. If null or emtpy throws an IllegalArgumentException.
*
* @param value value.
* @param name parameter name for the exception message.
* @param info additional information to be printed with the exception message
* @return the given value.
*/
public
static
String
notEmpty
(
String
value
,
String
name
,
String
info
)
{
if
(
value
==
null
)
{
throw
new
IllegalArgumentException
(
name
+
" cannot be null"
+
(
info
==
null
?
""
:
", "
+
info
));
}
return
notEmptyIfNotNull
(
value
,
name
,
info
);
}
/**
* Check that a list is not null and that none of its elements is null. If null or if the list has emtpy elements
* throws an IllegalArgumentException.
* @param list the list of strings.
* @param name parameter name for the exception message.
*/
public
static
Collection
<
String
>
notEmptyElements
(
Collection
<
String
>
list
,
String
name
)
{
notEmpty
(
list
,
name
);
for
(
String
ele
:
list
)
{
notEmpty
(
ele
,
String
.
format
(
"list %s element %s"
,
name
,
ele
));
}
return
list
;
}
}
typesystem/src/main/java/org/apache/hadoop/metadata/typesystem/types/AttributeDefinition.java
View file @
43081eee
...
@@ -18,7 +18,7 @@
...
@@ -18,7 +18,7 @@
package
org
.
apache
.
hadoop
.
metadata
.
typesystem
.
types
;
package
org
.
apache
.
hadoop
.
metadata
.
typesystem
.
types
;
import
com.google.common.base.Preconditions
;
import
org.apache.hadoop.metadata.ParamChecker
;
public
final
class
AttributeDefinition
{
public
final
class
AttributeDefinition
{
...
@@ -44,16 +44,13 @@ public final class AttributeDefinition {
...
@@ -44,16 +44,13 @@ public final class AttributeDefinition {
public
AttributeDefinition
(
String
name
,
String
dataTypeName
,
public
AttributeDefinition
(
String
name
,
String
dataTypeName
,
Multiplicity
multiplicity
,
boolean
isComposite
,
boolean
isUnique
,
Multiplicity
multiplicity
,
boolean
isComposite
,
boolean
isUnique
,
boolean
isIndexable
,
String
reverseAttributeName
)
{
boolean
isIndexable
,
String
reverseAttributeName
)
{
Preconditions
.
checkNotNull
(
name
);
this
.
name
=
ParamChecker
.
notEmpty
(
name
,
"Attribute name"
);
Preconditions
.
checkNotNull
(
dataTypeName
);
this
.
dataTypeName
=
ParamChecker
.
notEmpty
(
dataTypeName
,
"Attribute type"
);
this
.
name
=
name
;
this
.
dataTypeName
=
dataTypeName
;
this
.
multiplicity
=
multiplicity
;
this
.
multiplicity
=
multiplicity
;
this
.
isComposite
=
isComposite
;
this
.
isComposite
=
isComposite
;
this
.
isUnique
=
isUnique
;
this
.
isUnique
=
isUnique
;
this
.
isIndexable
=
isIndexable
;
this
.
isIndexable
=
isIndexable
;
this
.
reverseAttributeName
=
reverseAttributeName
;
this
.
reverseAttributeName
=
ParamChecker
.
notEmptyIfNotNull
(
reverseAttributeName
,
"Reverse attribute name"
)
;
}
}
@Override
@Override
...
...
typesystem/src/main/java/org/apache/hadoop/metadata/typesystem/types/EnumTypeDefinition.java
View file @
43081eee
...
@@ -18,6 +18,8 @@
...
@@ -18,6 +18,8 @@
package
org
.
apache
.
hadoop
.
metadata
.
typesystem
.
types
;
package
org
.
apache
.
hadoop
.
metadata
.
typesystem
.
types
;
import
org.apache.hadoop.metadata.ParamChecker
;
import
java.util.Arrays
;
import
java.util.Arrays
;
public
final
class
EnumTypeDefinition
{
public
final
class
EnumTypeDefinition
{
...
@@ -26,8 +28,8 @@ public final class EnumTypeDefinition {
...
@@ -26,8 +28,8 @@ public final class EnumTypeDefinition {
public
final
EnumValue
[]
enumValues
;
public
final
EnumValue
[]
enumValues
;
public
EnumTypeDefinition
(
String
name
,
EnumValue
...
enumValues
)
{
public
EnumTypeDefinition
(
String
name
,
EnumValue
...
enumValues
)
{
this
.
name
=
name
;
this
.
name
=
ParamChecker
.
notEmpty
(
name
,
"Enum type name"
)
;
this
.
enumValues
=
enumValues
;
this
.
enumValues
=
ParamChecker
.
notNullElements
(
enumValues
,
"Enum values"
)
;
}
}
@Override
@Override
...
...
typesystem/src/main/java/org/apache/hadoop/metadata/typesystem/types/EnumValue.java
View file @
43081eee
...
@@ -18,13 +18,15 @@
...
@@ -18,13 +18,15 @@
package
org
.
apache
.
hadoop
.
metadata
.
typesystem
.
types
;
package
org
.
apache
.
hadoop
.
metadata
.
typesystem
.
types
;
import
org.apache.hadoop.metadata.ParamChecker
;
public
class
EnumValue
{
public
class
EnumValue
{
public
final
String
value
;
public
final
String
value
;
public
final
int
ordinal
;
public
final
int
ordinal
;
public
EnumValue
(
String
value
,
int
ordinal
)
{
public
EnumValue
(
String
value
,
int
ordinal
)
{
this
.
value
=
value
;
this
.
value
=
ParamChecker
.
notEmpty
(
value
,
"Enum value"
)
;
this
.
ordinal
=
ordinal
;
this
.
ordinal
=
ordinal
;
}
}
...
...
typesystem/src/main/java/org/apache/hadoop/metadata/typesystem/types/HierarchicalTypeDefinition.java
View file @
43081eee
...
@@ -47,7 +47,7 @@ public class HierarchicalTypeDefinition<T extends HierarchicalType> extends Stru
...
@@ -47,7 +47,7 @@ public class HierarchicalTypeDefinition<T extends HierarchicalType> extends Stru
public
HierarchicalTypeDefinition
(
Class
<
T
>
hierarchicalMetaType
,
public
HierarchicalTypeDefinition
(
Class
<
T
>
hierarchicalMetaType
,
String
typeName
,
ImmutableList
<
String
>
superTypes
,
String
typeName
,
ImmutableList
<
String
>
superTypes
,
AttributeDefinition
[]
attributeDefinitions
)
{
AttributeDefinition
[]
attributeDefinitions
)
{
super
(
typeName
,
attributeDefinitions
);
super
(
typeName
,
false
,
attributeDefinitions
);
hierarchicalMetaTypeName
=
hierarchicalMetaType
.
getName
();
hierarchicalMetaTypeName
=
hierarchicalMetaType
.
getName
();
this
.
superTypes
=
superTypes
==
null
?
ImmutableList
.<
String
>
of
()
:
superTypes
;
this
.
superTypes
=
superTypes
==
null
?
ImmutableList
.<
String
>
of
()
:
superTypes
;
}
}
...
...
typesystem/src/main/java/org/apache/hadoop/metadata/typesystem/types/StructTypeDefinition.java
View file @
43081eee
...
@@ -18,6 +18,8 @@
...
@@ -18,6 +18,8 @@
package
org
.
apache
.
hadoop
.
metadata
.
typesystem
.
types
;
package
org
.
apache
.
hadoop
.
metadata
.
typesystem
.
types
;
import
org.apache.hadoop.metadata.ParamChecker
;
import
java.util.Arrays
;
import
java.util.Arrays
;
public
class
StructTypeDefinition
{
public
class
StructTypeDefinition
{
...
@@ -25,12 +27,19 @@ public class StructTypeDefinition {
...
@@ -25,12 +27,19 @@ public class StructTypeDefinition {
public
final
String
typeName
;
public
final
String
typeName
;
public
final
AttributeDefinition
[]
attributeDefinitions
;
public
final
AttributeDefinition
[]
attributeDefinitions
;
public
StructTypeDefinition
(
String
typeName
,
protected
StructTypeDefinition
(
String
typeName
,
boolean
validate
,
AttributeDefinition
...
attributeDefinitions
)
{
AttributeDefinition
[]
attributeDefinitions
)
{
this
.
typeName
=
ParamChecker
.
notEmpty
(
typeName
,
"Struct type name"
);
this
.
typeName
=
typeName
;
if
(
attributeDefinitions
!=
null
&&
attributeDefinitions
.
length
!=
0
)
{
ParamChecker
.
notNullElements
(
attributeDefinitions
,
"Attribute definitions"
);
}
this
.
attributeDefinitions
=
attributeDefinitions
;
this
.
attributeDefinitions
=
attributeDefinitions
;
}
}
public
StructTypeDefinition
(
String
typeName
,
AttributeDefinition
[]
attributeDefinitions
)
{
this
.
typeName
=
ParamChecker
.
notEmpty
(
typeName
,
"Struct type name"
);
this
.
attributeDefinitions
=
ParamChecker
.
notNullElements
(
attributeDefinitions
,
"Attribute definitions"
);
}
@Override
@Override
public
boolean
equals
(
Object
o
)
{
public
boolean
equals
(
Object
o
)
{
if
(
this
==
o
)
return
true
;
if
(
this
==
o
)
return
true
;
...
...
typesystem/src/main/java/org/apache/hadoop/metadata/typesystem/types/TypeSystem.java
View file @
43081eee
...
@@ -291,6 +291,7 @@ public class TypeSystem {
...
@@ -291,6 +291,7 @@ public class TypeSystem {
throw
new
MetadataException
(
throw
new
MetadataException
(
String
.
format
(
"Redefinition of type %s not supported"
,
eDef
.
name
));
String
.
format
(
"Redefinition of type %s not supported"
,
eDef
.
name
));
}
}
EnumType
eT
=
new
EnumType
(
this
,
eDef
.
name
,
eDef
.
enumValues
);
EnumType
eT
=
new
EnumType
(
this
,
eDef
.
name
,
eDef
.
enumValues
);
types
.
put
(
eDef
.
name
,
eT
);
types
.
put
(
eDef
.
name
,
eT
);
typeCategoriesToTypeNamesMap
.
put
(
DataTypes
.
TypeCategory
.
ENUM
,
eDef
.
name
);
typeCategoriesToTypeNamesMap
.
put
(
DataTypes
.
TypeCategory
.
ENUM
,
eDef
.
name
);
...
...
typesystem/src/test/java/org/apache/hadoop/metadata/typesystem/types/ValidationTest.java
0 → 100644
View file @
43081eee
/*
* 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
.
hadoop
.
metadata
.
typesystem
.
types
;
import
com.google.common.collect.ImmutableList
;
import
org.apache.hadoop.metadata.typesystem.types.utils.TypesUtil
;
import
org.testng.annotations.DataProvider
;
import
org.testng.annotations.Test
;
public
class
ValidationTest
{
@DataProvider
(
name
=
"attributeData"
)
private
Object
[][]
createAttributeData
()
{
return
new
String
[][]{
{
null
,
"type"
},
{
""
,
"type"
},
{
"name"
,
null
},
{
"name"
,
""
}};
}
@Test
(
dataProvider
=
"attributeData"
,
expectedExceptions
=
{
IllegalArgumentException
.
class
})
public
void
testAttributes
(
String
name
,
String
type
)
{
TypesUtil
.
createRequiredAttrDef
(
name
,
type
);
}
@DataProvider
(
name
=
"enumValueData"
)
private
Object
[][]
createEnumValueData
()
{
return
new
String
[][]{{
null
},
{
""
}};
}
@Test
(
dataProvider
=
"enumValueData"
,
expectedExceptions
=
{
IllegalArgumentException
.
class
})
public
void
testEnumValue
(
String
name
)
{
new
EnumValue
(
name
,
1
);
}
@DataProvider
(
name
=
"enumTypeData"
)
private
Object
[][]
createEnumTypeData
()
{
EnumValue
value
=
new
EnumValue
(
"name"
,
1
);
return
new
Object
[][]{{
null
,
value
},
{
""
,
value
},
{
"name"
}};
}
@Test
(
dataProvider
=
"enumTypeData"
,
expectedExceptions
=
{
IllegalArgumentException
.
class
})
public
void
testEnumType
(
String
name
,
EnumValue
...
values
)
{
new
EnumTypeDefinition
(
name
,
values
);
}
@DataProvider
(
name
=
"structTypeData"
)
private
Object
[][]
createStructTypeData
()
{
AttributeDefinition
value
=
TypesUtil
.
createRequiredAttrDef
(
"name"
,
"type"
);
return
new
Object
[][]{{
null
,
value
},
{
""
,
value
},
{
"name"
}};
}
@Test
(
dataProvider
=
"structTypeData"
,
expectedExceptions
=
{
IllegalArgumentException
.
class
})
public
void
testStructType
(
String
name
,
AttributeDefinition
...
values
)
{
new
StructTypeDefinition
(
name
,
values
);
}
@DataProvider
(
name
=
"classTypeData"
)
private
Object
[][]
createClassTypeData
()
{
return
new
Object
[][]{{
null
},
{
""
}};
}
@Test
(
dataProvider
=
"classTypeData"
,
expectedExceptions
=
{
IllegalArgumentException
.
class
})
public
void
testClassType
(
String
name
)
{
AttributeDefinition
value
=
TypesUtil
.
createRequiredAttrDef
(
"name"
,
"type"
);;
TypesUtil
.
createClassTypeDef
(
name
,
ImmutableList
.
of
(
"super"
),
value
);
}
@Test
(
dataProvider
=
"classTypeData"
,
expectedExceptions
=
{
IllegalArgumentException
.
class
})
public
void
testTraitType
(
String
name
)
{
AttributeDefinition
value
=
TypesUtil
.
createRequiredAttrDef
(
"name"
,
"type"
);;
TypesUtil
.
createTraitTypeDef
(
name
,
ImmutableList
.
of
(
"super"
),
value
);
}
@Test
public
void
testValidTypes
()
{
AttributeDefinition
attribute
=
TypesUtil
.
createRequiredAttrDef
(
"name"
,
"type"
);
//class with no attributes
TypesUtil
.
createClassTypeDef
(
"name"
,
ImmutableList
.
of
(
"super"
));
//class with no super types
TypesUtil
.
createClassTypeDef
(
"name"
,
ImmutableList
.<
String
>
of
(),
attribute
);
//trait with no attributes
TypesUtil
.
createTraitTypeDef
(
"name"
,
ImmutableList
.
of
(
"super"
));
//trait with no super types
TypesUtil
.
createTraitTypeDef
(
"name"
,
ImmutableList
.<
String
>
of
(),
attribute
);
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment