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)); } }