Package com.ibm.sbt.services.client.connections.activities.serializers

Source Code of com.ibm.sbt.services.client.connections.activities.serializers.NodeSerializer

/*
* © Copyright IBM Corp. 2013
*
* Licensed 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 com.ibm.sbt.services.client.connections.activities.serializers;

import static com.ibm.sbt.services.client.base.CommonConstants.APPLICATION_ATOM_XML;
import static com.ibm.sbt.services.client.base.CommonConstants.CONTENT_TYPE;
import static com.ibm.sbt.services.client.base.ConnectionsConstants.dateFormat;

import java.io.ByteArrayOutputStream;
import java.util.ArrayList;
import java.util.List;

import javax.mail.MessagingException;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMultipart;

import org.w3c.dom.Attr;
import org.w3c.dom.Element;

import com.ibm.sbt.services.client.base.ConnectionsConstants.Namespace;
import com.ibm.sbt.services.client.base.serializers.AtomEntitySerializer;
import com.ibm.sbt.services.client.connections.activities.ActivityAttachment;
import com.ibm.sbt.services.client.connections.activities.DateField;
import com.ibm.sbt.services.client.connections.activities.Field;
import com.ibm.sbt.services.client.connections.activities.FileField;
import com.ibm.sbt.services.client.connections.activities.LinkField;
import com.ibm.sbt.services.client.connections.activities.NodeEntity;
import com.ibm.sbt.services.client.connections.activities.PersonField;
import com.ibm.sbt.services.client.connections.activities.TextField;

/**
* @author mwallace
*
*/
class NodeSerializer extends AtomEntitySerializer<NodeEntity> {
 
  public NodeSerializer(NodeEntity nodeEntity) {
    super(nodeEntity);
  }
 
  protected List<Element> fields() {
    Field[] fields = entity.getFields();
    if (fields == null) {
      return null;
    }
    ArrayList<Element> elements = new ArrayList<Element>();
    for (Field field : fields) {
      Element element = element(Namespace.SNX.getUrl(), "field",
        attribute("fid", field.getFid()),
        attribute("name", field.getName()),
        attribute("type", field.getType()),
        attribute("hidden", field.isHidden()));
      if (field.hasPosition()) {
        element.setAttribute("position", "" + field.getPosition());
      }
      if (field instanceof DateField) {
        DateField dateField = (DateField)field;
        addText(element, DateSerializer.toString(dateFormat, dateField.getDate()));
      } else if (field instanceof FileField) {
        FileField fileField = (FileField)field;
        if (fileField.getEditMediaLink() != null) {
          Element link = element(Namespace.ATOM.getUrl(), "link",
              attribute("href", fileField.getEditMediaLink().getHref()),
              attribute("type", fileField.getEditMediaLink().getType()),
              attribute("size", fileField.getEditMediaLink().getSize()));
          appendChildren(element, link);         
        }
      } else if (field instanceof LinkField) {
        LinkField linkField = (LinkField)field;
        Element link = element(Namespace.ATOM.getUrl(), "link",
            attribute("href", linkField.getLink().getHref()),
            attribute("title", linkField.getLink().getTitle()));
        appendChildren(element, link);
      } else if (field instanceof PersonField) {
        PersonField personField = (PersonField)field;
        Element name = addText(element(Namespace.ATOM.getUrl(), "name"), personField.getPerson().getName());
        Element email = addText(element(Namespace.ATOM.getUrl(), "email"), personField.getPerson().getEmail());
        Element userid = addText(element(Namespace.SNX.getUrl(), "userid"), personField.getPerson().getUserid());
                if (personField.getPerson().getEmail() != null) {
                    appendChildren(element, name, email, userid);
                } else {
                    appendChildren(element, name, userid);
                };
      } else if (field instanceof TextField) {
        TextField textField = (TextField)field;
        Element summary = element(Namespace.ATOM.getUrl(), "summary",
            attribute("type", "text"));
        addText(summary, textField.getSummary());
        appendChildren(element, summary);
      }
     
      elements.add(element);
    }
   
    return elements;
  }
   
  protected Element activityNodeCategory() {
    return element("category",
        attribute("scheme", "http://www.ibm.com/xmlns/prod/sn/type"),
        attribute("term", "activity"),
        attribute("label", "Activity"));
  }
 
  protected Element activityUuid() {
    return textElement(Namespace.SNX.getUrl(), "activity", entity.getActivityUuid());
  }
   
  @Override
  protected Element content() {
    return textElement("content", entity.getContent(),
        attribute("type", "application/atom+xml"));
  }
 
  protected boolean hasAttachments() {
    return entity.hasAttachments();
  }
 
  protected MimeMultipart multipart(String atom) throws MessagingException {
    MimeMultipart multipart = new MimeMultipart();
   
    // add atom
    MimeBodyPart atomPart = new MimeBodyPart();
    atomPart.setContent(atom, APPLICATION_ATOM_XML);
    atomPart.setHeader(CONTENT_TYPE, APPLICATION_ATOM_XML);
    multipart.addBodyPart(atomPart, 0);
   
    // add the attachments
    List<ActivityAttachment> attachments = entity.getAttachments();
    for (ActivityAttachment attachment : attachments) {
      multipart.addBodyPart(attachment.toMimeBodyPart());
    }
   
    return multipart;
  }
 
  public String payload(String atom) {
    if (hasAttachments()) {
      try {
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
       
        MimeMultipart multipart = multipart(atom);
        multipart.writeTo(baos);
       
        return new String(baos.toByteArray());
      } catch (Exception e) {
        e.printStackTrace();
        throw new RuntimeException(e);
      }
    } else {
      return atom;
    }
  }
 
}
TOP

Related Classes of com.ibm.sbt.services.client.connections.activities.serializers.NodeSerializer

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.