/* * 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 org.kie.workbench.common.services.datamodeller.parser.JavaParser; import org.kie.workbench.common.services.datamodeller.parser.JavaParserBase.ParserMode; import org.kie.workbench.common.services.datamodeller.parser.JavaParserFactory; import org.kie.workbench.common.services.datamodeller.parser.util.ParserUtil; public class DescriptorFactoryImpl implements DescriptorFactory { public static DescriptorFactory getInstance( ) { return new DescriptorFactoryImpl( ); } @Override public MethodDescr createMethodDescr( String source ) throws Exception { return createMethodDescr( source, false ); } @Override public MethodDescr createMethodDescr( String source, boolean includeIndent ) throws Exception { JavaParser parser = JavaParserFactory.newParser( source, ParserMode.PARSE_METHOD ); //TODO add parse error controls MethodDescr methodDescr = parser.methodDeclaration().method; //TODO the parser should set the source for the elements ParserUtil.setSourceBufferTMP( methodDescr, parser.getSourceBuffer( ) ); if (includeIndent) { ParserUtil.populateUnManagedElements( 0, parser.getSourceBuffer().length()-1, methodDescr ); } else { ParserUtil.populateUnManagedElements( methodDescr ); } ParserUtil.setSourceBufferTMP( methodDescr, parser.getSourceBuffer( ) ); return methodDescr; } @Override public FieldDescr createFieldDescr( String source ) throws Exception { return createFieldDescr( source, false ); } @Override public FieldDescr createFieldDescr( String source, boolean includeIndent ) throws Exception { JavaParser parser = JavaParserFactory.newParser( source, ParserMode.PARSE_FIELD ); //TODO add parse error controls FieldDescr fieldDescr = parser.fieldDeclaration().field; //TODO the parser should set the source for his children ParserUtil.setSourceBufferTMP( fieldDescr, parser.getSourceBuffer( ) ); if (includeIndent) { ParserUtil.populateUnManagedElements( 0, parser.getSourceBuffer().length()-1, fieldDescr ); } else { ParserUtil.populateUnManagedElements( fieldDescr ); } ParserUtil.setSourceBufferTMP( fieldDescr, parser.getSourceBuffer( ) ); return fieldDescr; } @Override public IdentifierDescr createIdentifierDescr( String source ) throws Exception { IdentifierDescr identifierDescr = new IdentifierDescr( source, 0, source.length()-1, 1, 0 ); identifierDescr.setSourceBuffer( new StringBuilder( source ) ); return identifierDescr; } @Override public TypeDescr createTypeDescr( String source ) throws Exception { JavaParser parser = JavaParserFactory.newParser( source, ParserMode.PARSE_TYPE ); //TODO add parse error controls TypeDescr result = parser.type().typeDescr; ParserUtil.setSourceBufferTMP( result, parser.getSourceBuffer() ); return result; } @Override public AnnotationDescr createAnnotationDescr( String source ) throws Exception { return createAnnotationDescr( source, false ); } @Override public AnnotationDescr createAnnotationDescr( String source, boolean includeIndent ) throws Exception { JavaParser parser = JavaParserFactory.newParser( source ); //TODO add parse error controls. AnnotationDescr annotationDescr = parser.annotation().annotationDescr; ParserUtil.setSourceBufferTMP( annotationDescr, parser.getSourceBuffer() ); if (includeIndent) { ParserUtil.populateUnManagedElements( 0, parser.getSourceBuffer().length()-1, annotationDescr ); } else { ParserUtil.populateUnManagedElements( annotationDescr ); } ParserUtil.setSourceBufferTMP( annotationDescr, parser.getSourceBuffer( ) ); return annotationDescr; } @Override public PackageDescr createPackageDescr( String source ) throws Exception { JavaParser parser = JavaParserFactory.newParser( source, ParserMode.PARSE_PACKAGE ); //TODO add parse error controls PackageDescr result = parser.packageDeclaration().packageDec; ParserUtil.setSourceBufferTMP( result, parser.getSourceBuffer() ); return result; } @Override public QualifiedNameDescr createQualifiedNameDescr( String source ) throws Exception { JavaParser parser = JavaParserFactory.newParser( source, ParserMode.PARSE_QUALIFIED_NAME); //TODO add parse error controls QualifiedNameDescr result = parser.qualifiedName().qnameDec; ParserUtil.setSourceBufferTMP( result, parser.getSourceBuffer() ); return result; } @Override public JavaTokenDescr createJavaTokenDescr( ElementDescriptor.ElementType tokenType, String source ) { JavaTokenDescr javaTokenDescr = new JavaTokenDescr( tokenType, source, 0, source.length()-1, 1, 0 ); javaTokenDescr.setSourceBuffer( new StringBuilder( source ) ); return javaTokenDescr; } @Override public JavaTokenDescr createExtendsTokenDescr() { return createJavaTokenDescr( ElementDescriptor.ElementType.JAVA_EXTENDS, "extends" ); } @Override public TextTokenElementDescr createTextTokenDescr( String text ) { TextTokenElementDescr textTokenDescr = new TextTokenElementDescr( text, 0, text.length()-1, 1, 0 ); textTokenDescr.setSourceBuffer( new StringBuilder( text ) ); return textTokenDescr; } }