org.apache.streams.moreover.MoreoverUtils.java Source code

Java tutorial

Introduction

Here is the source code for org.apache.streams.moreover.MoreoverUtils.java

Source

/*
 * 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
 *
 *   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.streams.moreover;

import org.apache.streams.data.util.ActivityUtil;
import org.apache.streams.pojo.extensions.ExtensionUtil;
import org.apache.streams.pojo.json.Activity;
import org.apache.streams.pojo.json.ActivityObject;
import org.apache.streams.pojo.json.Provider;

import com.moreover.api.Article;
import com.moreover.api.Author;
import com.moreover.api.AuthorPublishingPlatform;
import com.moreover.api.Feed;
import com.moreover.api.Source;
import org.joda.time.DateTime;

import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;

import static org.apache.streams.data.util.ActivityUtil.LANGUAGE_EXTENSION;
import static org.apache.streams.data.util.ActivityUtil.LOCATION_EXTENSION;
import static org.apache.streams.data.util.ActivityUtil.LOCATION_EXTENSION_COUNTRY;
import static org.apache.streams.data.util.ActivityUtil.getObjectId;

/**
 * Provides utilities for Moreover data.
 */
public class MoreoverUtils {

    private MoreoverUtils() {
    }

    public static final String DATE_FORMAT = "yyyy-MM-dd'T'HH:mm:ss'Z'";

    /**
     * convert article into Activity.
     * @param article article
     * @return Activity
     */
    public static Activity convert(Article article) {
        Activity activity = new Activity();
        Source source = article.getSource();
        activity.setActor(convert(article.getAuthor(), source.getName()));
        activity.setProvider(convert(source));
        activity.setTarget(convertTarget(source));
        activity.setObject(convertObject(article));
        activity.setPublished(DateTime.parse(article.getPublishedDate()));
        activity.setContent(article.getContent());
        activity.setTitle(article.getTitle());
        activity.setVerb("posted");
        fixActivityId(activity);
        addLocationExtension(activity, source);
        addLanguageExtension(activity, article);
        activity.setLinks(convertLinks(article));
        return activity;
    }

    /**
     * convert Source to Provider.
     * @param source Source
     * @return Provider
     */
    public static Provider convert(Source source) {
        Provider provider = new Provider();
        Feed feed = source.getFeed();
        String display = getProviderId(feed);
        provider.setId(ActivityUtil.getProviderId(display.trim().toLowerCase().replace(" ", "_")));
        provider.setDisplayName(display);
        provider.setUrl(feed.getUrl());
        return provider;
    }

    /**
     * convert Author and platformName to Actor.
     * @param author Author
     * @param platformName platformName
     * @return $.actor
     */
    public static ActivityObject convert(Author author, String platformName) {
        ActivityObject actor = new ActivityObject();
        AuthorPublishingPlatform platform = author.getPublishingPlatform();
        String userId = platform.getUserId();
        if (userId != null) {
            actor.setId(ActivityUtil.getPersonId(getProviderId(platformName), userId));
        }
        actor.setDisplayName(author.getName());
        actor.setUrl(author.getHomeUrl());
        actor.setSummary(author.getDescription());
        actor.setAdditionalProperty("email", author.getEmail());
        return actor;
    }

    private static void fixActivityId(Activity activity) {
        if (activity.getId() != null && activity.getId().matches("\\{[a-z]*\\}")) {
            activity.setId(null);
        }
    }

    private static List convertLinks(Article article) {
        List<String> list = new LinkedList<>();
        Article.OutboundUrls outboundUrls = article.getOutboundUrls();
        if (outboundUrls != null) {
            for (String url : outboundUrls.getOutboundUrl()) {
                list.add(url);
            }
        }
        return list;
    }

    /**
     * convertTarget.
     * @param source source
     * @return ActivityObject $.target
     */
    public static ActivityObject convertTarget(Source source) {
        ActivityObject object = new ActivityObject();
        object.setUrl(source.getHomeUrl());
        object.setDisplayName(source.getName());
        return object;
    }

    /**
     * convertObject.
     * @param article article
     * @return ActivityObject $.object
     */
    public static ActivityObject convertObject(Article article) {
        ActivityObject object = new ActivityObject();
        object.setContent(article.getContent());
        object.setSummary(article.getTitle());
        object.setUrl(article.getOriginalUrl());
        object.setObjectType(article.getDataFormat());
        String type = article.getDataFormat().equals("text") ? "article" : article.getDataFormat();
        object.setId(getObjectId(getProviderId(article.getSource().getFeed()), type, article.getId()));
        object.setPublished(DateTime.parse(article.getPublishedDate()));
        return object;
    }

    /**
     * addLocationExtension.
     * @param activity Activity
     * @param source Source
     */
    public static void addLocationExtension(Activity activity, Source source) {
        Map<String, Object> extensions = ExtensionUtil.getInstance().ensureExtensions(activity);
        String country = source.getLocation().getCountryCode() == null ? source.getLocation().getCountry()
                : source.getLocation().getCountryCode();
        if (country != null) {
            Map<String, Object> location = new HashMap<>();
            location.put(LOCATION_EXTENSION_COUNTRY, country);
            extensions.put(LOCATION_EXTENSION, location);
        }
    }

    /**
     * addLanguageExtension.
     * @param activity Activity
     * @param article Article
     */
    public static void addLanguageExtension(Activity activity, Article article) {
        Map<String, Object> extensions = ExtensionUtil.getInstance().ensureExtensions(activity);
        String language = article.getLanguage();
        if (language != null) {
            extensions.put(LANGUAGE_EXTENSION, language);
        }
    }

    private static String getProviderId(Feed feed) {
        return getProviderId(
                feed.getPublishingPlatform() == null ? feed.getMediaType() : feed.getPublishingPlatform());
    }

    private static String getProviderId(String feed) {
        return feed.toLowerCase().replace(" ", "_").trim();
    }
}