/*
* Copyright 2014 Red Hat, Inc. and/or its affiliates.
*
* Licensed 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.kie.workbench.common.services.datamodeller.parser.descr;
import java.util.List;
public class TypeDescr extends ElementDescriptor implements HasClassOrInterfaceType, HasPrimitiveType, HasDimensions {
public TypeDescr( ) {
super( ElementType.TYPE );
}
public TypeDescr( String text, int start, int stop ) {
this( text, start, stop, -1, -1 );
}
public TypeDescr( String text, int start, int stop, int line, int position ) {
super( ElementType.TYPE, text, start, stop, line, position );
}
public boolean isPrimitiveType( ) {
return getPrimitiveType( ) != null;
}
public boolean isClassOrInterfaceType( ) {
return getClassOrInterfaceType( ) != null;
}
public boolean isVoidType( ) {
return getVoidType( ) != null;
}
public ClassOrInterfaceTypeDescr getClassOrInterfaceType( ) {
return ( ClassOrInterfaceTypeDescr ) getElements( ).getFirst( ElementType.CLASS_OR_INTERFACE_TYPE );
}
public void setClassOrInterfaceType( ClassOrInterfaceTypeDescr classOrInterfaceType ) {
getElements( ).removeFirst( ElementType.CLASS_OR_INTERFACE_TYPE );
getElements( ).add( classOrInterfaceType );
}
public PrimitiveTypeDescr getPrimitiveType( ) {
return ( PrimitiveTypeDescr ) getElements( ).getFirst( ElementType.PRIMITIVE_TYPE );
}
public void setPrimitiveType( PrimitiveTypeDescr primitiveType ) {
getElements( ).removeFirst( ElementType.PRIMITIVE_TYPE );
getElements( ).add( primitiveType );
}
public void setVoidType( JavaTokenDescr voidToken ) {
getElements( ).removeFirst( ElementType.JAVA_VOID );
getElements( ).add( voidToken );
}
public JavaTokenDescr getVoidType( ) {
return ( JavaTokenDescr ) getElements( ).getFirst( ElementType.JAVA_VOID );
}
@Override
public int getDimensionsCount( ) {
List<ElementDescriptor> dimensions = getElements( ).getElementsByType( ElementType.DIMENSION );
return dimensions.size( );
}
@Override
public TypeDescr addDimension( DimensionDescr dimensionDescr ) {
getElements( ).add( dimensionDescr );
return this;
}
public String getName() {
if (isPrimitiveType()) {
return getPrimitiveType().getName();
} else if (isClassOrInterfaceType()) {
return getClassOrInterfaceType().getClassName();
} else if (isVoidType()) {
return getVoidType().getText();
}
return null;
}
}