/* * 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.ArrayList; import java.util.List; public class ClassDescr extends ModifiersContainerDescr { /* //TODO add: //List of implemented interfaces //Type annotations. */ public ClassDescr( ) { super( ElementType.CLASS ); } public ClassDescr( String text, int start, int line, int position ) { this( text, start, -1, line, position ); } public ClassDescr( String text, int start, int stop ) { this( text, start, stop, -1, -1 ); } public ClassDescr( String text, int start, int stop, int line, int position ) { super( ElementType.CLASS, text, start, stop, line, position ); } public String getName( ) { return getIdentifier( ) != null ? getIdentifier( ).getIdentifier( ) : null; } public IdentifierDescr getIdentifier( ) { return ( IdentifierDescr ) getElements( ).getFirst( ElementType.IDENTIFIER ); } public ClassDescr setIdentifier( IdentifierDescr identifier ) { getElements( ).removeFirst( ElementType.IDENTIFIER ); getElements( ).add( identifier ); return this; } public void addMember( ElementDescriptor member ) { getElements( ).add( member ); } public List<ElementDescriptor> getMembers( ) { return getElements( ); } public void addField( FieldDescr fieldDescr ) { int index = getElements( ).lastIndexOf( ElementType.FIELD ); if (index < 0) { index = getElements().indexOf( ElementType.JAVA_LBRACE ); } getElements( ).add( index + 1, fieldDescr ); } public void addMethod( MethodDescr methodDescr ) { int index = getElements( ).lastIndexOf( ElementType.METHOD ); if (index < 0) { index = getElements().lastIndexOf( ElementType.FIELD ); if (index < 0) { index = getElements().indexOf( ElementType.JAVA_LBRACE ); } } getElements( ).add( index + 1, methodDescr ); } public List<MethodDescr> getMethods( ) { List<MethodDescr> methods = new ArrayList<MethodDescr>( ); for ( ElementDescriptor member : getElements( ).getElementsByType( ElementType.METHOD ) ) { methods.add( ( MethodDescr ) member ); } return methods; } public MethodDescr getMethod( String methodIdentifier ) { if ( methodIdentifier == null ) { return null; } List<MethodDescr> methods = getMethods( ); IdentifierDescr identifier; for ( MethodDescr method : methods ) { identifier = method.getIdentifier( ); if ( identifier != null && methodIdentifier.equals( identifier.getIdentifier( ) ) ) { return method; } } return null; } public List<MethodDescr> getConstructors() { List<MethodDescr> allMethods = getMethods(); List<MethodDescr> constructors = new ArrayList<MethodDescr>( ); for (MethodDescr method : allMethods) { if (method.isConstructor()) { constructors.add( method ); } } return constructors; } public List<FieldDescr> getFields( ) { List<FieldDescr> fields = new ArrayList<FieldDescr>( ); for ( ElementDescriptor member : getElements( ).getElementsByType( ElementType.FIELD ) ) { fields.add( ( FieldDescr ) member ); } return fields; } public FieldDescr getField( String name ) { if ( name == null ) { return null; } List<FieldDescr> fields = getFields( ); for ( FieldDescr field : fields ) { if ( field.getVariableDeclaration( name ) != null ) { return field; } } return null; } public boolean removeField( FieldDescr field ) { return getElements( ).remove( field ); } public boolean removeField( String name ) { FieldDescr field = getField( name ); boolean result = false; if ( field != null ) { if ( field.getVariableDeclarations( ).size( ) <= 1 ) { result = getElements( ).remove( field ); } else { VariableDeclarationDescr variable = field.getVariableDeclaration( name ); result = variable != null ? field.removeVariableDeclaration( variable ) : false; if ( result ) { variable = field.getVariableDeclarations( ).get( 0 ); if ( variable.getStartComma( ) != null ) { variable.getElements( ).remove( variable.getStartComma( ) ); } } } } return result; } //TODO add method signature in order to support overloading //By now we remove all the methods with the given name since we are going to remove only setter and getters. public boolean removeMethod( String name ) { List<MethodDescr> methods = getMethods(); IdentifierDescr identifier; boolean result = false; if (methods != null) { for (MethodDescr methodDescr : methods) { if ( ((identifier = methodDescr.getIdentifier()) != null) && name.equals( identifier.getIdentifier() ) ) { if( getElements().remove( methodDescr ) ) { result = true; } } } } return result; } public JavaTokenDescr getClassToken( ) { return ( JavaTokenDescr ) getElements( ).getFirst( ElementType.JAVA_CLASS ); } public void setClassToken( JavaTokenDescr classToken ) { getElements( ).removeFirst( ElementType.JAVA_CLASS ); getElements( ).add( classToken ); } public JavaTokenDescr getExtendsToken( ) { return ( JavaTokenDescr ) getElements( ).getFirst( ElementType.JAVA_EXTENDS ); } public void setExtendsToken( JavaTokenDescr extendsToken ) { getElements( ).removeFirst( ElementType.JAVA_EXTENDS ); getElements( ).add( extendsToken ); } public boolean hasSuperClass() { return getSuperClass() != null; } public TypeDescr getSuperClass( ) { return ( TypeDescr ) getElements( ).getFirst( ElementType.TYPE ); } public void setSuperClass( TypeDescr superClass ) { getElements( ).removeFirst( ElementType.TYPE ); getElements( ).add( superClass ); } public JavaTokenDescr getImplementsToken( ) { return ( JavaTokenDescr ) getElements( ).getFirst( ElementType.JAVA_IMPLEMENTS ); } public void setImplementsToken( JavaTokenDescr implementsToken ) { getElements( ).removeFirst( ElementType.JAVA_IMPLEMENTS ); getElements( ).add( implementsToken ); } public JavaTokenDescr getBodyStartBrace( ) { return ( JavaTokenDescr ) getElements( ).getFirst( ElementType.JAVA_LBRACE ); } public void setBodyStartBrace( JavaTokenDescr bodyStart ) { getElements( ).removeFirst( ElementType.JAVA_LBRACE ); getElements( ).add( bodyStart ); } public JavaTokenDescr getBodyStopBrace( ) { return ( JavaTokenDescr ) getElements( ).getFirst( ElementType.JAVA_RBRACE ); } public void setBodyStopBrace( JavaTokenDescr bodyStop ) { getElements( ).removeFirst( ElementType.JAVA_RBRACE ); getElements( ).add( bodyStop ); } }