/*******************************************************************************
* Copyright (c) 2008 SAP
* see https://research.qkal.sap.corp/mediawiki/index.php/CoMONET
*
* Date: $Date: 2008-08-28 16:28:55 +0200 (Do, 28 Aug 2008) $
* @version $Revision: 1625 $
* @author: $Author: c5107456 $
*******************************************************************************/
package com.sap.furcas.parsergenerator.tcs.t2m.validation;
import java.util.Collection;
import java.util.Iterator;
import com.sap.furcas.metamodel.FURCAS.TCS.ClassTemplate;
import com.sap.furcas.metamodel.FURCAS.TCS.ConcreteSyntax;
import com.sap.furcas.metamodel.FURCAS.TCS.Template;
import com.sap.furcas.parsergenerator.tcs.t2m.grammar.SemanticErrorBucket;
import com.sap.furcas.runtime.common.exceptions.MetaModelLookupException;
import com.sap.furcas.runtime.common.exceptions.NameResolutionFailedException;
import com.sap.furcas.runtime.common.interfaces.IMetaModelLookup;
import com.sap.furcas.runtime.common.interfaces.ResolvedNameAndReferenceBean;
import com.sap.furcas.runtime.tcs.MetaModelElementResolutionHelper;
/**
* The Class UniquenessValidation.
*/
public class TemplateAbstractWithSequenceValidation implements ISyntaxValidationRule {
/* (non-Javadoc)
* @see com.sap.mi.textual.grammar.impl.tcs.t2m.validation.ISyntaxValidationRule#validate(TCS.ConcreteSyntax)
*/
@Override
public void validate(ConcreteSyntax syntax, IMetaModelLookup metaLookup, SemanticErrorBucket errorBucket) {
Collection<Template> templates = syntax.getTemplates();
MetaModelElementResolutionHelper<?> resolutionHelper = new MetaModelElementResolutionHelper(metaLookup);
for (Iterator<Template> iterator = templates.iterator(); iterator.hasNext();) {
Template template = iterator.next();
if (template.getMetaReference() != null || (template.getNames() != null)) {
if (template instanceof ClassTemplate) {
ClassTemplate ct = (ClassTemplate) template;
ResolvedNameAndReferenceBean resolutionBean;
try {
resolutionBean = resolutionHelper.resolve(template);
if (resolutionBean != null && metaLookup.isAbstract(resolutionBean) && ct.getTemplateSequence() != null) {
// TODO allow for templates which serve to locate references only
// errorBucket.addError("Abstract ModelElement "+resolutionBean.getNames()+" modeled by Classtemplates with method body.", ct.getTemplateSequence());
}
} catch (NameResolutionFailedException e) {
// ignore
} catch (MetaModelLookupException e) {
// ignore
}
}
}
}
}
}