Package org.eclipse.jst.jsf.designtime.internal.view.mapping

Source Code of org.eclipse.jst.jsf.designtime.internal.view.mapping.ViewMetadataGenerator

package org.eclipse.jst.jsf.designtime.internal.view.mapping;

import java.io.IOException;
import java.io.OutputStream;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EPackage;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.emf.ecore.resource.ResourceSet;
import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
import org.eclipse.emf.ecore.util.BasicExtendedMetaData;
import org.eclipse.emf.ecore.util.ExtendedMetaData;
import org.eclipse.emf.ecore.xmi.XMLHelper;
import org.eclipse.emf.ecore.xmi.XMLResource;
import org.eclipse.emf.ecore.xmi.impl.XMLHelperImpl;
import org.eclipse.emf.ecore.xmi.impl.XMLResourceFactoryImpl;
import org.eclipse.emf.ecore.xmi.impl.XMLResourceImpl;
import org.eclipse.jst.jsf.common.metadata.Entity;
import org.eclipse.jst.jsf.common.metadata.MetadataFactory;
import org.eclipse.jst.jsf.common.metadata.MetadataPackage;
import org.eclipse.jst.jsf.common.metadata.Model;
import org.eclipse.jst.jsf.common.metadata.Trait;
import org.eclipse.jst.jsf.common.runtime.internal.model.types.ClassTypeInfo;
import org.eclipse.jst.jsf.designtime.internal.view.mapping.viewmapping.ClassTypeInfo_;
import org.eclipse.jst.jsf.designtime.internal.view.mapping.viewmapping.ComponentMappingFactory;
import org.eclipse.jst.jsf.designtime.internal.view.mapping.viewmapping.ComponentMappingPackage;
import org.eclipse.jst.jsf.designtime.internal.view.mapping.viewmapping.TagMapping;
import org.eclipse.jst.jsf.designtime.internal.view.mapping.viewmapping.TagToViewObjectMapping;

/**
* Generates View metadata from common.runtime objects.
*
* @author cbateman
*
*/
public class ViewMetadataGenerator
{
    private final ResourceSet      _resourceSet;
    private final ExtendedMetaData _extendedMetadata;
    private final Model            _root;
    private final ViewMetadataMapper   _mapper;

    /**
     * @param uri
     */
    public ViewMetadataGenerator(final String uri)
    {
        _root = MetadataFactory.eINSTANCE.createModel();
        _root.setId(uri);
        _root.setType("tagFile"); //$NON-NLS-1$
        _resourceSet = new ResourceSetImpl();
        _mapper = new ViewMetadataMapper();
        _extendedMetadata = new BasicExtendedMetaData(_resourceSet
                .getPackageRegistry());

        // Register the appropriate resource factory to handle all file
        // extensions.
        //
        _resourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap()
                .put(Resource.Factory.Registry.DEFAULT_EXTENSION,
                        new XMLResourceFactoryImpl());
    }

    /**
     * The format of the strings should match OSGI version:
     *
     * MAJOR . MINOR . BUILD . QUALIFIER
     *
     * @param tagName
     * @param typeInfo
     * @param minJSFVersion
     *            the minimum JSF version, null for DEFAULT.
     * @param minLibVersion
     *            the minimum library version, null for NONE.
     */
    public void addTagToViewObjectMapping(final String tagName,
            final ClassTypeInfo typeInfo, final String minJSFVersion,
            final String minLibVersion)
    {
        final ClassTypeInfo_ metadata = _mapper.mapToMetadata(typeInfo);

        if (metadata != null)
        {
            final TagToViewObjectMapping viewMapping =
                ComponentMappingFactory.eINSTANCE.createTagToViewObjectMapping();
            if (minJSFVersion != null)
            {
                viewMapping.setMinJSFVersion(minJSFVersion);
            }
            viewMapping.setMinLibraryVersion(minLibVersion);
            viewMapping.setTypeInfo(metadata);

            final TagMapping tagMapping = findOrCreateTagMapping(tagName);
            tagMapping.getVersionedTagToViewMappings().add(viewMapping);

            final Trait trait = MetadataFactory.eINSTANCE.createTrait();
            trait.setId(ViewMetadataMapper.DEFAULT_MAPPING_TRAIT_ID);
            trait.setValue(tagMapping);

            final Entity entity = MetadataFactory.eINSTANCE.createEntity();
            entity.setId(tagName);
            entity.setType("tag"); //$NON-NLS-1$
            entity.getTraits().add(trait);

            _root.getChildEntities().add(entity);
        }
    }

    private TagMapping findOrCreateTagMapping(final String tagName)
    {
        for (final Entity entity : (List<Entity>)_root.getChildEntities())
        {
            if (entity.getId().equals(tagName))
            {
                for (final Trait trait : (List<Trait>)entity.getTraits())
                {
                    if (trait.getId().equals(ViewMetadataMapper.DEFAULT_MAPPING_TRAIT_ID))
                    {
                        return (TagMapping) trait.getValue();
                    }
                }
            }
        }
        return ComponentMappingFactory.eINSTANCE.createTagMapping();
    }

    /**
     * @param out
     * @throws IOException
     */
    public void save(final OutputStream out) throws IOException
    {
        final Resource res = new XMLResourceImpl()
        {
            @Override
            protected XMLHelper createXMLHelper()
            {
                return new XMLHelperImpl()
                {
                    public String getHREF(EObject obj)
                    {
                        return ComponentMappingPackage.eNS_URI;
                    }

                    @Override
                    public EPackage getNoNamespacePackage()
                    {
                        return MetadataPackage.eINSTANCE;
                    }
                };
            }
        };// _resourceSet.createResource(URI.createURI("foo.xml"));
        res.getContents().add(_root);
        // res.setURI(uri);
        // resourceSet.getResources().add(res);
        // setLoadOptions(res);
        Map options = new HashMap();
        options.put(XMLResource.OPTION_SCHEMA_LOCATION, Boolean.TRUE);
        options.put(XMLResource.OPTION_EXTENDED_META_DATA, _extendedMetadata);
        // options.put(XMLResource.OPTION_RESOURCE_HANDLER, res);
        options.put(XMLResource.OPTION_LAX_FEATURE_PROCESSING, Boolean.TRUE);
        options.put(XMLResource.OPTION_RECORD_UNKNOWN_FEATURE, Boolean.FALSE);// turning
        // this
        // off
        // so
        // that
        // res.getErrors()
        // has
        // values
        // to
        // check!
        // bizarre
        // that
        // I
        // should
        // need
        // to
        // do
        // this.
        res.save(out, options);
    }

    // private void printHeader(final OutputStream out) throws IOException
    // {
    // final String header = "<md:metadatamodel \n"
    // + "xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\""
    // + "xmlns:ecore=\"http://www.eclipse.org/emf/2002/Ecore\""
    // +
    // "xmlns:md=\"http://org.eclipse.jst.jsf.common.metadata/metadata.ecore\""
    // +
    // "xmlns:mdt=\"http://org.eclipse.jst.jsf.common.metadata/metadataTraitTypes.ecore\"
    // "
    // +
    // "xmlns:viewMap=\"http://org.eclipse.jst.jsf.core/componentMapping.ecore\""
    // + "id=\"http://java.sun.com/jsf/html\""
    // + "type\"tagFile\">";
    // out.write(header.getBytes());
    // }
}
TOP

Related Classes of org.eclipse.jst.jsf.designtime.internal.view.mapping.ViewMetadataGenerator

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.