Package com.sissi.persistent.impl

Source Code of com.sissi.persistent.impl.PersistentSi

package com.sissi.persistent.impl;

import java.util.Map;

import com.sissi.config.Dictionary;
import com.sissi.context.JIDBuilder;
import com.sissi.protocol.Element;
import com.sissi.protocol.ProtocolType;
import com.sissi.protocol.iq.IQ;
import com.sissi.protocol.iq.bytestreams.Bytestreams;
import com.sissi.protocol.iq.data.XData;
import com.sissi.protocol.iq.data.XDataType;
import com.sissi.protocol.iq.data.XField;
import com.sissi.protocol.iq.data.XFieldType;
import com.sissi.protocol.iq.data.XOption;
import com.sissi.protocol.iq.si.Feature;
import com.sissi.protocol.iq.si.File;
import com.sissi.protocol.iq.si.Si;

/**
* Si</p>索引策略:{"sid":1}
*
* @author kim 2014年2月25日
*/
public class PersistentSi extends PersistentProtocol {

  private final String profile = "http://jabber.org/protocol/si/profile/file-transfer";

  private final Feature feature = new Feature().x(new XData().setType(XDataType.FORM).add(new XField().type(XFieldType.LIST_SINGLE).setVar("stream-method").add(new XOption(Bytestreams.XMLNS))));

  private final String delegation;

  /**
   * @param jidBuilder
   * @param tip
   * @param delegation 代理域
   */
  public PersistentSi(JIDBuilder jidBuilder, String tip, String delegation) {
    super(Si.class, jidBuilder, tip, true);
    this.delegation = delegation;
  }

  @Override
  public Map<String, Object> write(Element element) {
    Si si = Si.class.cast(element);
    Map<String, Object> entity = super.write(si.parent().reply().setType(ProtocolType.SET.toString()));
    entity.put(Dictionary.FIELD_SID, si.getId());
    entity.put(Dictionary.FIELD_SIZE, si.getFile().getSize());
    entity.put(Dictionary.FIELD_NAME, si.getFile().getName());
    entity.put(Dictionary.FIELD_CLASS, element.getClass().getSimpleName());
    entity.put(Dictionary.FIELD_HOST, new String[] { si.host(this.delegation, super.jidBuilder.build(si.parent().getTo()).asStringWithBare()) });
    if (si.delay()) {
      entity.put(Dictionary.FIELD_DELAY, si.getDelay().getStamp());
    }
    return entity;
  }

  /*
   * IQ.id.from.add(new Si().id.source.profile.feature.file(new File().name.size))
   *
   * @see com.sissi.persistent.PersistentElement#read(java.util.Map)
   */
  @Override
  public Element read(Map<String, Object> element) {
    return IQ.class.cast(super.read(element, new IQ())).setId(element.get(Dictionary.FIELD_SID).toString()).setFrom(this.delegation).add(new Si().setId(element.get(Dictionary.FIELD_SID).toString()).setSource(element.get(Dictionary.FIELD_FROM).toString()).setProfile(this.profile).setFeature(this.feature).setFile(new File().setName(element.get(Dictionary.FIELD_NAME).toString()).setSize(element.get(Dictionary.FIELD_SIZE).toString())).delay(super.toString(element, Dictionary.FIELD_DELAY)));
  }

  public Class<? extends Element> support() {
    return Si.class;
  }
}
TOP

Related Classes of com.sissi.persistent.impl.PersistentSi

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.