Package org.eclipse.jst.jsf.designtime.symbols

Source Code of org.eclipse.jst.jsf.designtime.symbols.DefaultDataTableSymbolFactory

/*******************************************************************************
* Copyright (c) 2007 Oracle Corporation.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
*    Cameron Bateman/Oracle - initial API and implementation
*
********************************************************************************/
package org.eclipse.jst.jsf.designtime.symbols;

import org.eclipse.core.resources.IFile;
import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.jdt.core.JavaCore;
import org.eclipse.jst.jsf.common.internal.types.ValueType;
import org.eclipse.jst.jsf.context.structureddocument.IStructuredDocumentContext;
import org.eclipse.jst.jsf.context.structureddocument.IStructuredDocumentContextFactory;
import org.eclipse.jst.jsf.context.symbol.ERuntimeSource;
import org.eclipse.jst.jsf.context.symbol.ISymbol;
import org.w3c.dom.Element;

/**
* The default factory for creating DataModel symbols based on an value
* expression in a dataTable.
*
* Clients may sub-class.
*
* @author cbateman
*
*/
public class DefaultDataTableSymbolFactory
{
    private final AbstractDataModelVariableFactory _dataModelSymbolFactory;

    /**
     * @param dataModelSymbolFactory
     */
    public DefaultDataTableSymbolFactory(
            final AbstractDataModelVariableFactory dataModelSymbolFactory)
    {
        assert dataModelSymbolFactory != null;
        _dataModelSymbolFactory = dataModelSymbolFactory;
    }

    /**
     * @param symbolName
     *            the name of the symbol to be created. Must not be null.
     * @param dataTableElement
     *            the DOM element representing the dataTable tag.
     * @param context
     *            the document context pointing to dataTableElement
     * @return a symbol named symbolName based on the variable declared by
     *         dataTableElement
     */
    public ISymbol createSymbolForDataTableValue(final String symbolName,
            final Element dataTableElement,
            final IStructuredDocumentContext context)
    {
        final String elText = AbstractDataModelVariableFactory
        .getELText(dataTableElement);
        final IFile file = FileContextUtil.deriveIFileFromContext(context);

        if (elText != null && file != null)
        {
            final IStructuredDocumentContext elContext = IStructuredDocumentContextFactory.INSTANCE
                .getContext(context.getStructuredDocument(),
                    dataTableElement.getAttributeNode("value")); //$NON-NLS-1$

            final IJavaProject javaProject = JavaCore.create(file.getProject());

            final ValueType valueExpr = new JSFSymbolFactory()
                    .getValueTypeFromEL(elText, elContext, file);

            if (valueExpr != null)
            {
                // otherwise, we have to try to resolve the base type and see
                // if it's an instanceof any of the supported implicit or
                // explict types
                return _dataModelSymbolFactory.createFromType(symbolName,
                        valueExpr, javaProject);
            }
        }

        // by default create a default
        return _dataModelSymbolFactory.getSymbolFactory().createDefaultSymbol(
                symbolName, ERuntimeSource.TAG_INSTANTIATED_SYMBOL_LITERAL,
                null);
    }

}
TOP

Related Classes of org.eclipse.jst.jsf.designtime.symbols.DefaultDataTableSymbolFactory

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.