diff --git a/rosetta-lang/src/main/java/com/regnosys/rosetta/resource/RosettaResourceDescriptionStrategy.java b/rosetta-lang/src/main/java/com/regnosys/rosetta/resource/RosettaResourceDescriptionStrategy.java index b0aabecbe..1353780e5 100644 --- a/rosetta-lang/src/main/java/com/regnosys/rosetta/resource/RosettaResourceDescriptionStrategy.java +++ b/rosetta-lang/src/main/java/com/regnosys/rosetta/resource/RosettaResourceDescriptionStrategy.java @@ -1,5 +1,6 @@ package com.regnosys.rosetta.resource; +import org.apache.log4j.Logger; import org.eclipse.xtext.naming.QualifiedName; import org.eclipse.xtext.nodemodel.INode; import org.eclipse.xtext.nodemodel.util.NodeModelUtils; @@ -16,46 +17,59 @@ @Singleton public class RosettaResourceDescriptionStrategy extends DefaultResourceDescriptionStrategy { - @Override - public boolean createEObjectDescriptions(EObject eObject, IAcceptor acceptor) { - if (eObject instanceof RosettaModel) { - RosettaModel model = (RosettaModel)eObject; - - QualifiedName qualifiedName = getQualifiedNameProvider().getFullyQualifiedName(eObject); - acceptor.accept(new RosettaModelDescription(qualifiedName, model)); - - return true; - } else if (eObject instanceof Attribute) { - Attribute attr = (Attribute)eObject; - - QualifiedName qualifiedName = getQualifiedNameProvider().getFullyQualifiedName(attr); - String typeCall = serialize(attr.getTypeCall()); - String cardinality = serialize(attr.getCard()); - acceptor.accept(new AttributeDescription(qualifiedName, attr, typeCall, cardinality)); - - return false; - } else if (eObject instanceof RosettaRule) { - RosettaRule rule = (RosettaRule)eObject; - - QualifiedName qualifiedName = getQualifiedNameProvider().getFullyQualifiedName(rule); - String input = serialize(rule.getInput()); - String expression = serialize(rule.getExpression()); - acceptor.accept(new RuleDescription(qualifiedName, rule, input, expression)); - - return false; - } else { - return super.createEObjectDescriptions(eObject, acceptor); - } - } - - private String serialize(EObject eObject) { - if (eObject == null) { - return null; - } - INode node = NodeModelUtils.getNode(eObject); - if (node != null) { - return node.getText(); - } - return null; - } + private final static Logger LOG = Logger.getLogger(RosettaResourceDescriptionStrategy.class); + + @Override + public boolean createEObjectDescriptions(EObject eObject, IAcceptor acceptor) { + if (getQualifiedNameProvider() == null) { + return false; + } + try { + if (eObject instanceof RosettaModel) { + return createRosettaModelDescription((RosettaModel) eObject, acceptor); + } else if (eObject instanceof Attribute) { + return createAttributeDescription((Attribute) eObject, acceptor); + } else if (eObject instanceof RosettaRule) { + return createRosettaRuleDescription((RosettaRule) eObject, acceptor); + } + } catch (Exception exc) { + LOG.error(exc.getMessage(), exc); + } + return super.createEObjectDescriptions(eObject, acceptor); + } + + private boolean createRosettaModelDescription(RosettaModel model, IAcceptor acceptor) { + QualifiedName qualifiedName = getQualifiedNameProvider().getFullyQualifiedName(model); + acceptor.accept(new RosettaModelDescription(qualifiedName, model)); + return true; + } + + private boolean createAttributeDescription(Attribute attr, IAcceptor acceptor) { + QualifiedName qualifiedName = getQualifiedNameProvider().getFullyQualifiedName(attr); + String typeCall = serialize(attr.getTypeCall()); + String cardinality = serialize(attr.getCard()); + acceptor.accept(new AttributeDescription(qualifiedName, attr, typeCall, cardinality)); + return false; + } + + private boolean createRosettaRuleDescription(RosettaRule rule, IAcceptor acceptor) { + QualifiedName qualifiedName = getQualifiedNameProvider().getFullyQualifiedName(rule); + String input = serialize(rule.getInput()); + String expression = serialize(rule.getExpression()); + if (qualifiedName != null) { + acceptor.accept(new RuleDescription(qualifiedName, rule, input, expression)); + } + return false; + } + + private String serialize(EObject eObject) { + if (eObject == null) { + return null; + } + INode node = NodeModelUtils.getNode(eObject); + if (node != null) { + return node.getText(); + } + return null; + } }