Newer
Older
AlgebraicDataflowArchitectureModel / AlgebraicDataflowArchitectureModel / src / parser / ParserDTRAMForWebService.java
k-fujii on 18 Apr 2023 4 KB insert to check right bracket
package parser;

import java.io.BufferedReader;
import java.util.ArrayList;

import com.mxgraph.view.mxGraph;

import graphicalrefactor.editor.WebServiceEditor;
import models.dataConstraintModel.IdentifierTemplate;
import models.dataFlowModel.DataFlowModel;
import models.webServices.Service;
import models.webServices.WebServicesInfo;
import parser.Parser.TokenStream;
import parser.exceptions.ExpectedAssignment;
import parser.exceptions.ExpectedLeftCurlyBracket;
import parser.exceptions.ExpectedRightBracket;
import parser.exceptions.ParseException;
import parser.exceptions.webService.ExpectedBaseURL;
import parser.exceptions.webService.ExpectedResources;
import parser.exceptions.webService.ExpectedWebService;

public class ParserDTRAMForWebService extends ParserDTRAM {	
	
	public static final String SERVICES = "serviecs";
	public static final String SERVICE = "service";
	public static final String BASE_URL = "baseURL";
	public static final String RESOURCES = "resources";

	/**--------------------------------------------------------------------------------
	 * [Constructor]
	 * 
	 * @param reader
	 * 
	 */
	public ParserDTRAMForWebService(BufferedReader reader) {
		super(reader);
		
	}
	
	/**--------------------------------------------------------------------------------
	 * execute to parse the DTRAM file.
	 * 
	 * @param graph
	 */	
	public void doParseWebService(final WebServiceEditor editor, final DataFlowModel model)
		throws ExpectedWebService, ExpectedBaseURL, ExpectedResources, 
     		   ExpectedLeftCurlyBracket, ExpectedRightBracket, ExpectedAssignment
	{
		doParseWebService(stream, editor, model);
	}
	
	/**--------------------------------------------------------------------------------
	 * parse to Web service's options in the DTRAM file.
	 * 
	 * @param stream 
	 * 
	 */	
	public static void doParseWebService(
			final TokenStream stream, final WebServiceEditor editor, final DataFlowModel model)
		throws ExpectedWebService, ExpectedBaseURL, ExpectedResources, 
			   ExpectedLeftCurlyBracket, ExpectedRightBracket, ExpectedAssignment
	{
		 // check the token name is "services"
		if(!hasSpecificToken(stream.next(), SERVICES)) 
			throw new ExpectedWebService(stream.getLine());

		 // check the token is "{"
		if(!hasSpecificToken(stream.next(), LEFT_CURLY_BRACKET)) 
			throw new ExpectedLeftCurlyBracket(stream.getLine());
		
		while(hasSpecificToken(stream.next(), SERVICE)) {

			// it gets a service name here.
			String name = stream.next(); 
			
			 // check the token is "{"
			if(!hasSpecificToken(stream.next(), LEFT_CURLY_BRACKET)) 
				throw new ExpectedLeftCurlyBracket(stream.getLine());
			
			// check the token is "baseURL"
			if(!hasSpecificToken(stream.next(), BASE_URL)) 
				throw new ExpectedBaseURL(stream.getLine());
	
			// check the token is ":"
			if(!hasSpecificToken(stream.next(), COLON)) 
				throw new ExpectedAssignment(stream.getLine());

			// it gets a service's base URL here.
			String baseURL = stream.next();
			
			// check the token is "resources"
			if(!hasSpecificToken(stream.next(), RESOURCES)) 
				throw new ExpectedResources(stream.getLine());
			
			// check the token is ":"
			if(!hasSpecificToken(stream.next(), COLON)) 
				throw new ExpectedAssignment(stream.getLine());
			
			// get service
			Service service = new Service(name, baseURL);
			String resourceName = "";

			// if it doesn't have a token "COMMA",
			// then it's going to break for iteration.
			do {
				// get <IdentifireTemplate> here.		
				resourceName = stream.next();
				
				IdentifierTemplate identifierTemplate = model.getIdentifierTemplate(resourceName);
				service = service.addIdentifireTemplate(identifierTemplate);
			}
			while(hasSpecificToken(stream.next(), COMMA));
			
			// check the token is "}"
			if(!hasSpecificToken(stream.next(), RIGHT_CURLY_BRACKET)) 
				throw new ExpectedRightBracket(stream.getLine());
		}
		// check the token is "}"
		if(!hasSpecificToken(stream.next(), RIGHT_CURLY_BRACKET)) 
			throw new ExpectedRightBracket(stream.getLine());

	}

	/**--------------------------------------------------------------------------------
	 * checking the token has a token.
	 * 
	 * @param token
	 * @param specificTokenName
	 */	
	private static Boolean hasSpecificToken(final String token, final String specificTokenName) {
		return (token.equals(specificTokenName));
	}
	
}