* @return a TransposePathElement
*/
public static TransposePathElement parse( String key ) {
if ( key == null || key.length() < 2 ) {
throw new SpecException( "'Transpose Input' key '@', can not be null or of length 1. Offending key : " + key );
}
if ( '@' != key.charAt( 0 ) ) {
throw new SpecException( "'Transpose Input' key must start with an '@'. Offending key : " + key );
}
// Strip off the leading '@' as we don't need it anymore.
String meat = key.substring( 1 );
if ( meat.contains( "@" ) ) {
throw new SpecException( "@ pathElement can not contain a nested @." );
}
if ( meat.contains( "*" ) || meat.contains( "[]" ) ) {
throw new SpecException( "'Transpose Input' can not contain expansion wildcards (* and []). Offending key : " + key );
}
// Check to see if the key is wrapped by parens
if ( meat.startsWith( "(" ) ) {
if ( meat.endsWith( ")" ) ) {
meat = meat.substring( 1, meat.length() - 1 );
}
else {
throw new SpecException( "@ path element that starts with '(' must have a matching ')'. Offending key : " + key );
}
}
return innerParse( key, meat );
}