/** * */ package custom.ocl.test; import java.util.regex.Matcher; import java.util.regex.Pattern; import org.eclipse.ocl.types.OCLStandardLibrary; import org.eclipse.uml2.uml.Classifier; import org.eclipse.uml2.uml.Operation; import org.eclipse.uml2.uml.UMLFactory; import info.squam.ocl.editor.community.core.extensions.customocl.ICustomUMLOperation; import info.squam.ocl.editor.community.core.ocldoc.parser.model.OCLDocCreationHelper; import info.squam.ocl.editor.community.core.ocldoc.parser.model.OclDocDefine; import info.squam.ocl.editor.community.core.ocldoc.parser.tags.ParamTag; import info.squam.ocl.editor.community.core.ocldoc.parser.tags.ReturnTag; public class UMLOperation_1 implements ICustomUMLOperation { private String opName = "xRegexMatch" ; private Operation regexMatch ; private OCLStandardLibrary oclStdLibrary ; private static final String OCLDOC_DESC = "Determines a specific pattern in a string." ; private static final String OCLDOC_PARAM0_DESC = "the pattern to search for" ; private static final String OCLDOC_PARAM0_TYPE = "String" ; private static final String OCLDOC_RETURN_DESC = "found pattern" ; /* (non-Javadoc) * @see info.squam.ocl.editor.community.core.extensions.customocl.ICustomUMLOperation#defineOperation(org.eclipse.ocl.types.OCLStandardLibrary) */ @Override public Operation defineOperation( OCLStandardLibrary oclStdLibrary) { this.oclStdLibrary = oclStdLibrary ; regexMatch = UMLFactory.eINSTANCE.createOperation() ; regexMatch.setName(opName); //$NON-NLS-1$ regexMatch.setType(oclStdLibrary.getString()); regexMatch.createOwnedParameter("pattern", oclStdLibrary.getString()); //$NON-NLS-1$ regexMatch.setIsQuery(true); return regexMatch ; } /* (non-Javadoc) * @see info.squam.ocl.editor.community.core.extensions.customocl.ICustomUMLOperation#getOperationContext() */ @Override public Classifier getOperationContext() { return oclStdLibrary.getString() ; } /* (non-Javadoc) * @see info.squam.ocl.editor.community.core.extensions.customocl.ICustomOCLOperation#getOCLDoc() */ @Override public OclDocDefine getOCLDoc() { ReturnTag ret = OCLDocCreationHelper.Define.createReturn(OCLDOC_RETURN_DESC, OCLDOC_PARAM0_TYPE) ; ParamTag param = OCLDocCreationHelper.Define.createParam("pattern", OCLDOC_PARAM0_DESC, OCLDOC_PARAM0_TYPE) ; ParamTag[] params = new ParamTag[]{param} ; return OCLDocCreationHelper.Define .createDefine(opName, OCLDOC_DESC, ret, params) ; } /* (non-Javadoc) * @see info.squam.ocl.editor.community.core.extensions.customocl.ICustomOCLOperation#getOperationName() */ @Override public String getOperationName() { return opName ; } /* (non-Javadoc) * @see info.squam.ocl.editor.community.core.extensions.customocl.ICustomOCLOperation#invoke(java.lang.Object, java.lang.Object[]) */ @Override public Object invoke(Object self, Object[] args) { Pattern pattern = Pattern.compile((String) args[0]); Matcher matcher = pattern.matcher((String) self); return matcher.matches()? matcher.group() : null ; } }