Package com.ipc.oce.xml.oc

Source Code of com.ipc.oce.xml.oc.OCXDTOSerializer

/**
*
*/
package com.ipc.oce.xml.oc;

import org.jinterop.dcom.common.JIException;
import org.jinterop.dcom.core.JIVariant;
import org.jinterop.dcom.impls.automation.IJIDispatch;

import com.ipc.oce.OCApp;
import com.ipc.oce.OCObject;
import com.ipc.oce.OCVariant;
import com.ipc.oce.metadata.OCType;
import com.ipc.oce.varset.EXMLForm;
import com.ipc.oce.varset.EXMLTypeAssignment;

/**
* Сериализатор значений 8.1 в XML на основе XDTO.
* @author Konovalov
*
*/
public class OCXDTOSerializer extends OCObject {

  /**
   * @param object
   */
  public OCXDTOSerializer(OCObject object) {
    super(object);
  }

  /**
   * @param aDispatch
   */
  public OCXDTOSerializer(IJIDispatch aDispatch) {
    super(aDispatch);
  }

  /**
   * @param aDispatch
   * @throws JIException
   */
  public OCXDTOSerializer(JIVariant aDispatch) throws JIException {
    super(aDispatch);
  }
 
  /**
   * Фабрика типов XDTO.
   * @return
   * @throws JIException
   */
  public OCXDTOFactory getFactory() throws JIException{
    return new OCXDTOFactory(get("Factory"));
  }
 
  /**
   * Получает XML представление значения для помещения в текст элемента или значение атрибута XML
   * @param object
   * @return
   * @throws JIException
   */
  public String xmlString(Object object) throws JIException{
    if (object instanceof OCObject) {
      OCObject oco = (OCObject) object;
      return callMethodA(
          "XMLString",
          new Object[]{ocObject2Dispatch(oco)}
          )[0].getObjectAsString2();
    } else {
      return callMethodA("XMLString", new Object[]{JIVariant.makeVariant(object)})[0].getObjectAsString2();
    }
  }
 
  /**
   * Производит проверку возможности чтения из объекта ЧтениеXML значения.
   * @param reader Объект, через который производится чтение XML
   * @return 
   * Истина - тип 1С:Предприятия существует;
   * Ложь - в противном случае.
   * @throws JIException
   */
  public Boolean canReadXML(OCXMLReader reader) throws JIException {
    return callMethodA("CanReadXML", new Object[]{
        ocObject2Dispatch(reader)
        })[0].getObjectAsBoolean();
  }
 
 
  /**
   * Записывает значения в формате XML без указания имени элемента. В качестве имени элемента будет использован тип значения
   * @param writer  Объект, через который осуществляется запись XML
   * @param object Записываемое в поток XML значение. Тип параметра определяется совокупностью типов, для которых определена XML-сериализация.
   * @throws JIException
   */
  public void writeXML(OCXMLWriter writer, OCObject object) throws JIException{
    callMethod("WriteXML", new Object[]{new JIVariant(ocObject2Dispatch(writer)), new JIVariant(ocObject2Dispatch(object))});
  }
 
  /**
   * Записывает значения в формате XML без указания имени элемента. В качестве имени элемента будет использован тип значения
   * @param writer Объект, через который осуществляется запись XML.
   * @param object Записываемое в поток XML значение. Тип параметра определяется совокупностью типов, для которых определена XML-сериализация
   * @param assignment Определяет необходимость назначения типа элементу XML. Значение по умолчанию: Неявное
   * @param form Форма записи элемента данных в XML
   * @throws JIException
   */
  public void writeXML(OCXMLWriter writer, OCObject object, EXMLTypeAssignment assignment, EXMLForm form) throws JIException{
    callMethod("WriteXML", new Object[] {
        new JIVariant(ocObject2Dispatch(writer)),
        new JIVariant(ocObject2Dispatch(object)),
        assignment != null ? ocObject2Dispatch(assignment) : null,
        form != null ? ocObject2Dispatch(form) : null });
  }
 
  /**
   * Записывает значения в формате XML с указанием полного имени элемента.
   * @param writer Объект, через который осуществляется запись XML
   * @param object Записываемое в поток XML значение. Тип параметра определяется совокупностью типов, для которых определена XML-сериализация.
   * @param fullname  Полное имя элемента XML, в который будет записано значение
   * @throws JIException
   */
  public void writeXML(OCXMLWriter writer, OCObject object, String fullname) throws JIException{
    callMethod("WriteXML", new Object[]{new JIVariant(ocObject2Dispatch(writer)), new JIVariant(ocObject2Dispatch(object)), new JIVariant(fullname)});
  }
 
  /**
   * Записывает значения в формате XML с указанием локального имени элемента и пространства имен, к которому принадлежит локальное имя.
   * @param writer Объект, через который осуществляется запись XML
   * @param object Записываемое в поток XML значение. Тип параметра определяется совокупностью типов, для которых определена XML-сериализация
   * @param localname Локальное имя элемента XML, в который будет записано значение
   * @param uriNS URI пространства имен, к которому принадлежит указанное ЛокальноеИмя.
   * @throws JIException
   */
  public void writeXML(OCXMLWriter writer, OCObject object, String localname, String uriNS) throws JIException{
    callMethod("WriteXML", new Object[]{new JIVariant(ocObject2Dispatch(writer)), new JIVariant(ocObject2Dispatch(object)), new JIVariant(localname), new JIVariant(uriNS)});
  }
 
  /**
   * Метод использует внутренний OCXMLWriter с директивой UTF-8.
   * @param object объект для сериализации
   * @return строковое представление XML.
   * @throws JIException
   */
  public String writeXML(OCObject object) throws JIException {
    OCApp app = OCApp.getInstance(getAssociatedSessionID());
    OCXMLWriter writer = app.newXMLWriter();
    writer.setString("UTF-8");
    writeXML(writer, object);
    return writer.close();
  }
 
  /**
   * Производит запись значения в объект XDTO. Для типа записываемого значения должно быть преобразование в XDTO
   * @param object Произвольный. Значение, которое должно быть записано в XDTO объект
   * @return OCXDTODataObject
   * @throws JIException
   */
  public OCXDTODataObject writeXDTO(OCObject object) throws JIException{
    return new OCXDTODataObject(callMethodA("WriteXDTO", new Object[]{new JIVariant(ocObject2Dispatch(object))})[0]);
  }
 
  /**
   * Производит чтение значения в формате XML. Прочитаны могут значения тех типов, которые могут быть записаны методом ЗаписатьXML.
   * @param reader Объект, через который происходит чтение XML
   * @return Значение считанного типа
   * @throws JIException
   */
  public OCObject readXML(OCXMLReader reader) throws JIException{
    return new OCObject(callMethodA("ReadXML", new Object[]{ocObject2Dispatch(reader)})[0]);
  }
 
  /**
   * Производит чтение значения в формате XML. Прочитаны могут значения тех типов, которые могут быть записаны методом ЗаписатьXML.
   * @param reader Объект, через который происходит чтение XML
   * @param type Тип значения, которое должно быть прочитано из XML. Если тип не указан, то будет произведена попытка определения типа значения непосредственно из представления XML. Если тип не указан и установить его не представляется возможным, или считываемые данные не соответствуют значению типа, то будет вызвано исключение.
   * @return Значение считанного типа
   * @throws JIException
   */
  public OCObject readXML(OCXMLReader reader, OCType type) throws JIException{
    return new OCObject(callMethodA("ReadXML", new Object[] {
        ocObject2Dispatch(reader),
        type != null ? ocObject2Dispatch(type) : null })[0]);
  }
 
  /**
   * Метод использует внутренний OCXMLReader
   * @param xml - строка XML.
   * @return OCObject
   * @throws JIException
   */
  public OCObject readXML(String xml) throws JIException {
    OCApp app = OCApp.getInstance(getAssociatedSessionID());
    OCXMLReader reader = app.newXMLReader();
    reader.setString(xml);
    return readXML(reader);
  }
 
  /**
   * Производит чтение объекта XDTO в значение, используя соответствующее преобразование типа XDTO в тип платформы
   * @param dataObject Объект XDTO.
   * @return Произвольный
   * @throws JIException
   */
  public OCVariant readXDTO(OCXDTODataObject dataObject) throws JIException{
    return new OCVariant(callMethodA("ReadXDTO", new Object[]{ocObject2Dispatch(dataObject)})[0]);
  }

}
TOP

Related Classes of com.ipc.oce.xml.oc.OCXDTOSerializer

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.