/* * © 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.EMPTY; import static com.ibm.sbt.services.client.base.ConnectionsConstants.ACTIVITY; import static com.ibm.sbt.services.client.base.ConnectionsConstants.ASSIGNEDTO; import static com.ibm.sbt.services.client.base.ConnectionsConstants.CATEGORY; import static com.ibm.sbt.services.client.base.ConnectionsConstants.COMMUNITYUUID; import static com.ibm.sbt.services.client.base.ConnectionsConstants.COMMUNITY_ACTIVITY; import static com.ibm.sbt.services.client.base.ConnectionsConstants.COMPLETED; import static com.ibm.sbt.services.client.base.ConnectionsConstants.EXTERNAL; import static com.ibm.sbt.services.client.base.ConnectionsConstants.INTERNAL; import static com.ibm.sbt.services.client.base.ConnectionsConstants.HREF; import static com.ibm.sbt.services.client.base.ConnectionsConstants.IN_REPLY_TO; import static com.ibm.sbt.services.client.base.ConnectionsConstants.LABEL; import static com.ibm.sbt.services.client.base.ConnectionsConstants.LABEL_COMMUNITYACTIVITY; import static com.ibm.sbt.services.client.base.ConnectionsConstants.LABEL_EXTERNAL; import static com.ibm.sbt.services.client.base.ConnectionsConstants.LABEL_INTERNAL; import static com.ibm.sbt.services.client.base.ConnectionsConstants.LINK; import static com.ibm.sbt.services.client.base.ConnectionsConstants.NAME; import static com.ibm.sbt.services.client.base.ConnectionsConstants.REF; import static com.ibm.sbt.services.client.base.ConnectionsConstants.REL; import static com.ibm.sbt.services.client.base.ConnectionsConstants.SCHEME; import static com.ibm.sbt.services.client.base.ConnectionsConstants.SNX_DUEDATE; import static com.ibm.sbt.services.client.base.ConnectionsConstants.SOURCE; import static com.ibm.sbt.services.client.base.ConnectionsConstants.TEMPLATE; import static com.ibm.sbt.services.client.base.ConnectionsConstants.TERM; import static com.ibm.sbt.services.client.base.ConnectionsConstants.TYPE; import static com.ibm.sbt.services.client.base.ConnectionsConstants.USERID; import static com.ibm.sbt.services.client.base.ConnectionsConstants.dateFormat; import org.w3c.dom.Element; import org.w3c.dom.Node; import com.ibm.commons.util.StringUtil; 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.Activity; import com.ibm.sbt.services.client.connections.common.Person; /** * @author mwallace * */ public class ActivitySerializer extends AtomEntitySerializer<Activity> { NodeSerializer nodeSerializer; public ActivitySerializer(Activity activity) { super(activity); nodeSerializer = new NodeSerializer(activity); } public String generateCreate() { return generateUpdate(); } public String generateUpdate() { Node entry = genericAtomEntry(); appendChildren(entry, activityCategory(), duedate(), communityUuid(), communityCategory(), priorityCategory(), completedCategory(), templateCategory(), flagsCategory(), externalCategory(), linkContainer(), subtitle(), inReplyTo(), assignedTo() ); //appendChildren(entry, tags()); appendChildren(entry, nodeSerializer.fields()); return nodeSerializer.payload(serializeToString()); } protected Element activityCategory() { String type = entity.getType(); return element(CATEGORY, attribute(SCHEME, Namespace.TYPE.getUrl()), attribute(TERM, StringUtil.isEmpty(type) ? ACTIVITY : type)); } protected Element communityCategory() { return entity.isCommunityActivity() ? element(CATEGORY, attribute(SCHEME, Namespace.TYPE.getUrl()), attribute(TERM, COMMUNITY_ACTIVITY), attribute(LABEL, LABEL_COMMUNITYACTIVITY)) : null; } protected Element flagsCategory() { return entity.getFlags() != null ? element(CATEGORY, attribute(SCHEME, Namespace.FLAGS.getUrl()), attribute(TERM, entity.getFlags()), attribute(LABEL, entity.getFlags())) : null; } protected Element communityUuid() { return entity.isCommunityActivity() ? textElement(Namespace.SNX.getUrl(), COMMUNITYUUID, entity.getCommunityUuid()) : null; } protected Element linkContainer() { return entity.isCommunityActivity() ? element(LINK, attribute(REL, Namespace.CONTAINER.getUrl()), attribute(TYPE, APPLICATION_ATOM_XML), attribute(HREF, EMPTY)) : null; } protected Element priorityCategory() { long priority = entity.getPriority(); return element(CATEGORY, attribute(SCHEME, Namespace.PRIORITY.getUrl()), attribute(TERM, "" + priority)); } protected Element externalCategory() { return element(CATEGORY, attribute(SCHEME, Namespace.FLAGS.getUrl()), attribute(LABEL, entity.isExternal() ? LABEL_EXTERNAL : LABEL_INTERNAL), attribute(TERM, entity.isExternal() ? EXTERNAL: INTERNAL)); } protected Element completedCategory() { return entity.isCompleted() ? element(CATEGORY, attribute(SCHEME, Namespace.FLAGS.getUrl()), attribute(TERM, COMPLETED)) : null; } protected Element templateCategory() { return entity.isTemplate() ? element(CATEGORY, attribute(SCHEME, Namespace.TYPE.getUrl()), attribute(TERM, TEMPLATE)) : null; } protected Element duedate() { return textElement(SNX_DUEDATE, DateSerializer.toString(dateFormat, entity.getDuedate())); } protected Element inReplyTo() { String inReplyTo = entity.getInReplyTo(); return StringUtil.isNotEmpty(inReplyTo) ? element(Namespace.THR.getUrl(), IN_REPLY_TO, attribute(REF, inReplyTo), attribute(HREF, inReplyTo), attribute(TYPE, APPLICATION_ATOM_XML), attribute(SOURCE, entity.getActivityUuid())) : null; } protected Element assignedTo() { Person assignedTo = entity.getAssignedTo(); return (assignedTo != null) ? element(Namespace.SNX.getUrl(), ASSIGNEDTO, attribute(NAME, assignedTo.getName()), attribute(USERID, assignedTo.getUserid())) : null; } }