/******************************************************************************* * Copyright (c) 2010, 2011 Obeo. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Obeo - initial API and implementation *******************************************************************************/ package org.eclipse.mylyn.docs.intent.parser; import org.eclipse.emf.ecore.EObject; import org.eclipse.mylyn.docs.intent.parser.descriptionunit.DescriptionUnitParser; import org.eclipse.mylyn.docs.intent.parser.internal.IntentDocumentParser; import org.eclipse.mylyn.docs.intent.parser.modelingunit.ModelingUnitParserImpl; import org.eclipse.mylyn.docs.intent.parser.modelingunit.ParseException; import org.eclipse.mylyn.docs.intent.serializer.IntentPositionManager; /** * High-level parser that delegates the parsing to the correct parser according to the possible entry points * for a Modeling Unit. * * @author <a href="mailto:alex.lagarde@obeo.fr">Alex Lagarde</a> * @author <a href="mailto:william.piers@obeo.fr">William Piers</a> */ public class IntentParser { /** * The position manager that handle the mapping between Intent element to positions. */ private IntentPositionManager positionManager; /** * Parse the given content and return the described element. * * @param contentToParse * textual form of an Intent entity (can be a IntentDocument, a Section, a Chapter, a Modeling * Unit or a Description Unit). * @return the given content and return the described element * @throws ParseException * if the given content contain error or doesn't describe an Intent entity */ public EObject parse(String contentToParse) throws ParseException { return parse(contentToParse, null); } /** * Parse the given content and return the described element. * * @param contentToParse * textual form of an Intent entity (can be a IntentDocument, a Section, a Chapter, a Modeling * Unit or a Description Unit). * @param rootCompleteLevel * the root complete level * @return the given content and return the described element * @throws ParseException * if the given content contain error or doesn't describe an Intent entity */ public EObject parse(String contentToParse, String rootCompleteLevel) throws ParseException { IntentDocumentParser documentParser = new IntentDocumentParser(); ModelingUnitParserImpl modelingUnitParser = new ModelingUnitParserImpl(); DescriptionUnitParser descriptionUnitParser = new DescriptionUnitParser(); this.positionManager = new IntentPositionManager(); EObject generatedObject = null; try { // We have 3 possibilities for the type of the element to parse : // If it matches "@M (.*) M@", it's a modelingUnit if (modelingUnitParser.isParserFor(contentToParse)) { generatedObject = modelingUnitParser.parseString(0, contentToParse); } else { // If it starts with a IntentDocument's Keyword (like "Section, Document, Chapter..." if (documentParser.isParserFor(contentToParse)) { generatedObject = documentParser.parse(contentToParse, rootCompleteLevel); positionManager.addIntentPositionManagerInformations(documentParser.getPositionManager()); } else { // In the other cases, we consider that the given contentToParse is a DescriptionUnit generatedObject = descriptionUnitParser.parse(contentToParse); } } return generatedObject; } catch (ParseException e) { ParseException parseException = new ParseException(e.getMessage(), e.getErrorOffset(), e.getErrorLength()); parseException.setStackTrace(e.getStackTrace()); throw parseException; } } /** * Returns the position manager of this serializer. * * @return the position manager of this serializer. */ public IntentPositionManager getPositionManager() { return this.positionManager; } }