Package org.apache.tuscany.sca.binding.atom.provider

Source Code of org.apache.tuscany.sca.binding.atom.provider.AtomBindingUtil

/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements.  See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership.  The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License.  You may obtain a copy of the License at
*
*   http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied.  See the License for the
* specific language governing permissions and limitations
* under the License.   
*/

package org.apache.tuscany.sca.binding.atom.provider;

import java.util.Date;

import org.apache.abdera.factory.Factory;
import org.apache.abdera.model.Content;
import org.apache.abdera.model.Content.Type;
import org.apache.abdera.model.Link;
import org.apache.tuscany.sca.data.collection.Entry;
import org.apache.tuscany.sca.data.collection.Item;
import org.apache.tuscany.sca.databinding.Mediator;
import org.apache.tuscany.sca.interfacedef.DataType;

/**
* Utility methods used in this package.
*
* @version $Rev: 1043771 $ $Date: 2010-12-08 23:45:07 +0000 (Wed, 08 Dec 2010) $
*/
class AtomBindingUtil {

    /**
     * Create a data item from an Atom entry.
     * @param feedEntry
     * @param itemClassType
     * @param itemXMLType
     * @param mediator
     * @return
     */
    static Entry<Object, Object> entry(org.apache.abdera.model.Entry feedEntry,
                                       DataType<?> itemClassType, DataType<?> itemXMLType, Mediator mediator) {
        if (feedEntry != null) {
            if (itemClassType.getPhysical() == Item.class || feedEntry.getContentType() == Type.HTML ) {
                String key = feedEntry.getId().toString();

                Item item = new Item();
                item.setTitle(feedEntry.getTitle());
                item.setContents(feedEntry.getContent());

                for (Link link : feedEntry.getLinks()) {
                    if (link.getRel() == null || "self".equals(link.getRel())) {
                        if (item.getLink() == null) {
                            item.setLink(link.getHref().toString());
                        }
                    } else if ("related".equals(link.getRel())) {
                        item.setRelated(link.getHref().toString());
                    } else if ("alternate".equals(link.getRel())) {
                        item.setAlternate(link.getHref().toString());
                    }
                }

                item.setDate(feedEntry.getUpdated());

                return new Entry<Object, Object>(key, item);

            } else {
                String key = null;
                if ( feedEntry.getId() != null) {
                    key = feedEntry.getId().toString();
                }

                // Create the item from XML
                /*
                if (feedEntry.getContentElement().getElements().size() == 0) {
                    return null;
                }
                */

                String value = feedEntry.getContent();
                Object data = mediator.mediate(value, itemXMLType, itemClassType, null);

                return new Entry<Object, Object>(key, data);
            }
        } else {
            return null;
        }
    }

    /**
     * Create an Atom entry for a key and item from a collection.
     * @param entry
     * @param itemClassType
     * @param itemXMLType
     * @param mediator
     * @param factory
     * @return
     */
    static org.apache.abdera.model.Entry feedEntry(Entry<Object, Object> entry,
                                  DataType<?> itemClassType, DataType<?> itemXMLType, Mediator mediator,
                                  Factory factory) {
        Object key = entry.getKey();
        Object data = entry.getData();
        if (data instanceof Item) {
            Item item = (Item)data;

            org.apache.abdera.model.Entry feedEntry = factory.newEntry();
            if (key != null) {
                feedEntry.setId(key.toString());
            }
            feedEntry.setTitle(item.getTitle());
            feedEntry.setContentAsHtml(item.getContents());

            String href = item.getLink();
            if (href == null && key != null) {
                href = key.toString();
            }

            if (href != null) {
                feedEntry.addLink(href);
            }
            String related = item.getRelated();
            if (related != null) {
                feedEntry.addLink(related, "related");
            }
            String alternate = item.getAlternate();
            if (alternate != null) {
                feedEntry.addLink(alternate, "alternate");
            }

            Date date = item.getDate();
            if (date != null) {
                feedEntry.setUpdated(date);
            }
            return feedEntry;

        } else if (data != null) {
            org.apache.abdera.model.Entry feedEntry = factory.newEntry();
            feedEntry.setId(key.toString());
            feedEntry.setTitle("item");


            // Convert the item to XML
            String value = mediator.mediate(data, itemClassType, itemXMLType, null).toString();

            Content content = factory.newContent();
            content.setContentType(Content.Type.XML);
            content.setValue(value);

            feedEntry.setContentElement(content);

            feedEntry.addLink(key.toString());

            return feedEntry;
        } else {
            return null;
        }
    }
   
}
TOP

Related Classes of org.apache.tuscany.sca.binding.atom.provider.AtomBindingUtil

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.