org.apache.streams.gmail.provider.GMailMessageActivitySerializer.java Source code

Java tutorial

Introduction

Here is the source code for org.apache.streams.gmail.provider.GMailMessageActivitySerializer.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.gmail.provider;

import org.apache.streams.data.ActivitySerializer;
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.Generator;
import org.apache.streams.pojo.json.Icon;
import org.apache.streams.pojo.json.Provider;

import com.fasterxml.jackson.annotation.JsonBackReference;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonManagedReference;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.fasterxml.jackson.databind.node.ObjectNode;
import com.googlecode.gmail4j.GmailException;
import com.googlecode.gmail4j.GmailMessage;
import com.googlecode.gmail4j.javamail.JavaMailGmailMessage;
import com.sun.mail.imap.IMAPFolder;
import com.sun.mail.imap.IMAPMessage;
import com.sun.mail.imap.IMAPSSLStore;
import org.apache.commons.lang.NotImplementedException;
import org.joda.time.DateTime;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import javax.mail.internet.MimeMultipart;

/**
 * GMailMessageActivitySerializer converts a GMail message to Activity.
 */
public class GMailMessageActivitySerializer implements ActivitySerializer<GmailMessage> {

    private static final Logger LOGGER = LoggerFactory.getLogger(GMailMessageActivitySerializer.class);

    private GMailProvider provider;

    public GMailMessageActivitySerializer(GMailProvider provider) {

        this.provider = provider;

        ObjectMapper mapper = new ObjectMapper();
        mapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, Boolean.FALSE);

        mapper.addMixInAnnotations(IMAPSSLStore.class, MessageMixIn.class);
        mapper.addMixInAnnotations(IMAPFolder.class, MessageMixIn.class);
        mapper.addMixInAnnotations(IMAPMessage.class, MessageMixIn.class);
        mapper.addMixInAnnotations(MimeMultipart.class, MessageMixIn.class);
        mapper.addMixInAnnotations(JavaMailGmailMessage.class, MessageMixIn.class);

    }

    public GMailMessageActivitySerializer() {
    }

    public static Generator buildGenerator(ObjectNode event) {
        return null;
    }

    public static Icon getIcon(ObjectNode event) {
        return null;
    }

    public static Provider buildProvider(ObjectNode event) {
        Provider provider = new Provider();
        provider.setId("id:providers:gmail");
        return provider;
    }

    public static List<Object> getLinks(ObjectNode event) {
        return null;
    }

    public static String getUrls(ObjectNode event) {
        return null;
    }

    public static void addGMailExtension(Activity activity, GmailMessage gmailMessage) {
        Map<String, Object> extensions = ExtensionUtil.getInstance().ensureExtensions(activity);
        extensions.put("gmail", gmailMessage);
    }

    public static String formatId(String... idparts) {
        return String.join(":",
                Stream.concat(Arrays.stream(new String[] { "id:googleplus" }), Arrays.stream(idparts))
                        .collect(Collectors.toList()));
    }

    @Override
    public String serializationFormat() {
        return "gmail.v1";
    }

    @Override
    public GmailMessage serialize(Activity activity) {
        return null;
    }

    @Override
    public Activity deserialize(GmailMessage gmailMessage) {

        Activity activity = new Activity();
        activity.setId(
                formatId(this.provider.getConfig().getUserName(), String.valueOf(gmailMessage.getMessageNumber())));
        activity.setPublished(new DateTime(gmailMessage.getSendDate()));
        Provider provider = new Provider();
        provider.setId("http://gmail.com");
        provider.setDisplayName("GMail");
        activity.setProvider(provider);
        ActivityObject actor = new ActivityObject();
        actor.setId(gmailMessage.getFrom().getEmail());
        actor.setDisplayName(gmailMessage.getFrom().getName());
        activity.setActor(actor);
        activity.setVerb("email");
        ActivityObject object = new ActivityObject();
        try {
            object.setId(gmailMessage.getTo().get(0).getEmail());
            object.setDisplayName(gmailMessage.getTo().get(0).getName());
        } catch (GmailException e) {
            LOGGER.warn(e.getMessage());
        }
        activity.setTitle(gmailMessage.getSubject());
        try {
            activity.setContent(gmailMessage.getContentText());
        } catch (GmailException e) {
            LOGGER.warn(e.getMessage());
        }
        activity.setObject(object);
        return activity;
    }

    @Override
    public List<Activity> deserializeAll(List<GmailMessage> serializedList) {
        throw new NotImplementedException("Not currently implemented");
    }

    public Activity convert(ObjectNode event) {
        return null;
    }

    interface MessageMixIn {
        @JsonManagedReference
        @JsonIgnore
        IMAPSSLStore getDefaultFolder(); // we don't need it!

        @JsonManagedReference
        @JsonIgnore
        IMAPSSLStore getPersonalNamespaces(); // we don't need it!

        @JsonManagedReference
        @JsonIgnore
        IMAPFolder getStore(); // we don't need it!

        //   @JsonManagedReference
        //   @JsonIgnore
        //   @JsonBackReference
        //IMAPFolder getParent(); // we don't need it!
        @JsonManagedReference
        @JsonIgnore
        @JsonBackReference
        IMAPMessage getFolder(); // we don't need it!

        @JsonManagedReference
        @JsonIgnore
        @JsonProperty("parent")
        @JsonBackReference
        MimeMultipart getParent();
    }

}