001    package org.mesopotamia.lang.java;
002    
003    import java.util.List;
004    
005    import org.mesopotamia.LanguageElement;
006    import org.mesopotamia.LanguageElementFactory;
007    import org.mesopotamia.LanguageElementHandle;
008    import org.mesopotamia.MesopotamiaException;
009    import org.mesopotamia.MesopotamiaNode;
010    import org.mesopotamia.NodeData;
011    import org.mesopotamia.RepositoryLanguage;
012    import org.mesopotamia.Scan;
013    import org.mesopotamia.SyntaxTree;
014    
015    public class ExpressionFactory implements LanguageElementFactory {
016    
017            private LanguageElement languageElement;
018    
019            @SuppressWarnings("unchecked")
020            public ExpressionFactory(
021                            NodeData xData, 
022                            Class<?> context, 
023                            Scan scan,
024                            RepositoryLanguage language, 
025                            Object environment) throws MesopotamiaException {
026                    SyntaxTree st = (SyntaxTree) scan.getSourceUnit(xData.getSourceUnitId()).getLevelData("ast");                   
027                    MesopotamiaNode thisNode = st.findNode(xData.getId());
028                    List children = thisNode.getChildren();
029                    NodeData childData = children.isEmpty() ? null : (NodeData) children.get(0);
030                    if (childData==null) {
031                            throw new MesopotamiaException("Child at position 0 not found for expression ID: "+xData.getId());
032                    }
033                    languageElement=scan.getLanguageElement(new LanguageElementHandle(childData.getSourceUnitId(), childData.getId(), context, Expression.class));
034                    if (thisNode.getParent()!=null) {
035                            languageElement.setParentHandle(new LanguageElementHandle(thisNode.getSourceUnitId(), thisNode.getParent().getId(),null,null));
036                    }
037            }
038    
039            @SuppressWarnings("unchecked")
040            public LanguageElement createLanguageElement(Class targetClass) {
041                    return languageElement;
042            }
043    }