Search in sources :

Example 1 with ModelCRUDRequest

use of org.idempiere.adInterface.x10.ModelCRUDRequest in project idempiere by idempiere.

the class QueryDataLookup method getData.

/* (non-Javadoc)
	 * @see org.compiere.model.Lookup#getData(boolean, boolean, boolean, boolean, boolean)
	 */
@Override
public ArrayList<Object> getData(boolean mandatory, boolean onlyValidated, boolean onlyActive, boolean temporary, boolean shortlist) {
    ClassLoader cl = Thread.currentThread().getContextClassLoader();
    SOAPConnectionFactory cf;
    try {
        Thread.currentThread().setContextClassLoader(getClass().getClassLoader());
        dataMap = new LinkedHashMap<Integer, KeyNamePair>();
        cf = SOAPConnectionFactory.newInstance();
        SOAPConnection conn = cf.createConnection();
        // Create a SOAPMessage instance
        MessageFactory mf = MessageFactory.newInstance();
        SOAPMessage message = mf.createMessage();
        // Create a SOAP envelope and body
        SOAPPart part = message.getSOAPPart();
        SOAPEnvelope env = part.getEnvelope();
        SOAPBody body = env.getBody();
        ModelCRUDRequestDocument crudDocument = ModelCRUDRequestDocument.Factory.newInstance();
        ModelCRUDRequest crudRequest = crudDocument.addNewModelCRUDRequest();
        crudRequest.setADLoginRequest(login);
        ModelCRUD crud = crudRequest.addNewModelCRUD();
        crud.setRecordID(0);
        crud.setFilter(filter);
        crud.setAction(ModelCRUD.Action.READ);
        crud.setServiceType(serviceType);
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        DocumentBuilder builder = factory.newDocumentBuilder();
        Document document = builder.newDocument();
        Element element = document.createElementNS("http://idempiere.org/ADInterface/1_0", "queryData");
        Node domNode = document.importNode(crudDocument.getDomNode().getFirstChild(), true);
        document.appendChild(element);
        element.appendChild(domNode);
        body.addDocument(document);
        // Invoke the service endpoint
        URL endpoint = new URL(endPoint);
        SOAPMessage responseMsg = null;
        try {
            responseMsg = conn.call(message, endpoint);
        } finally {
            conn.close();
        }
        if (responseMsg != null && responseMsg.getSOAPBody() != null) {
            if (responseMsg.getSOAPBody().hasFault()) {
                throw new RuntimeException(responseMsg.getSOAPBody().getFault().getFaultString());
            }
            WindowTabDataDocument responseDoc = WindowTabDataDocument.Factory.parse(responseMsg.getSOAPBody().getFirstChild().getFirstChild());
            WindowTabData windowTabData = responseDoc.getWindowTabData();
            if (windowTabData.isSetError()) {
                throw new RuntimeException(windowTabData.getError());
            }
            DataSet dataset = windowTabData.getDataSet();
            DataRow[] dataRows = dataset.getDataRowArray();
            for (DataRow dataRow : dataRows) {
                DataField[] dataFields = dataRow.getFieldArray();
                String key = null;
                String display = null;
                for (DataField dataField : dataFields) {
                    if (dataField.getColumn().equals(keyColumn)) {
                        key = dataField.getVal();
                    } else if (dataField.getColumn().equals(displayColumn)) {
                        display = dataField.getVal();
                    }
                }
                if (key != null && display != null) {
                    Integer id = Integer.valueOf(key);
                    dataMap.put(id, new KeyNamePair(id, display));
                }
            }
        }
    } catch (Exception e) {
        if (e instanceof RuntimeException)
            throw (RuntimeException) e;
        else
            throw new RuntimeException(e.getLocalizedMessage(), e);
    } finally {
        Thread.currentThread().setContextClassLoader(cl);
    }
    return new ArrayList<Object>(dataMap.values());
}
Also used : DocumentBuilderFactory(javax.xml.parsers.DocumentBuilderFactory) DataSet(org.idempiere.adInterface.x10.DataSet) Element(org.w3c.dom.Element) Node(org.w3c.dom.Node) ArrayList(java.util.ArrayList) SOAPConnection(javax.xml.soap.SOAPConnection) SOAPEnvelope(javax.xml.soap.SOAPEnvelope) WindowTabDataDocument(org.idempiere.adInterface.x10.WindowTabDataDocument) Document(org.w3c.dom.Document) ModelCRUDRequestDocument(org.idempiere.adInterface.x10.ModelCRUDRequestDocument) SOAPMessage(javax.xml.soap.SOAPMessage) ModelCRUDRequestDocument(org.idempiere.adInterface.x10.ModelCRUDRequestDocument) DataRow(org.idempiere.adInterface.x10.DataRow) URL(java.net.URL) WindowTabDataDocument(org.idempiere.adInterface.x10.WindowTabDataDocument) ModelCRUD(org.idempiere.adInterface.x10.ModelCRUD) SOAPPart(javax.xml.soap.SOAPPart) SOAPConnectionFactory(javax.xml.soap.SOAPConnectionFactory) MessageFactory(javax.xml.soap.MessageFactory) WindowTabData(org.idempiere.adInterface.x10.WindowTabData) SOAPBody(javax.xml.soap.SOAPBody) ModelCRUDRequest(org.idempiere.adInterface.x10.ModelCRUDRequest) DataField(org.idempiere.adInterface.x10.DataField) DocumentBuilder(javax.xml.parsers.DocumentBuilder) KeyNamePair(org.compiere.util.KeyNamePair)

Example 2 with ModelCRUDRequest

use of org.idempiere.adInterface.x10.ModelCRUDRequest in project idempiere by idempiere.

the class CompositeServiceImpl method getWrappedCRUD.

/**
 * create ModelCRUDRequestDocument for operation element
 * @param operation
 * @param reqlogin
 * @return
 */
private ModelCRUDRequestDocument getWrappedCRUD(Operation operation, ADLoginRequest reqlogin) {
    if (operation.getModelCRUD() == null)
        return null;
    ModelCRUDRequestDocument wrapperDoc = ModelCRUDRequestDocument.Factory.newInstance();
    ModelCRUDRequest wrapperCRUD = wrapperDoc.addNewModelCRUDRequest();
    wrapperCRUD.setModelCRUD(operation.getModelCRUD());
    wrapperCRUD.setADLoginRequest(reqlogin);
    return wrapperDoc;
}
Also used : ModelCRUDRequest(org.idempiere.adInterface.x10.ModelCRUDRequest) ModelCRUDRequestDocument(org.idempiere.adInterface.x10.ModelCRUDRequestDocument)

Aggregations

ModelCRUDRequest (org.idempiere.adInterface.x10.ModelCRUDRequest)2 ModelCRUDRequestDocument (org.idempiere.adInterface.x10.ModelCRUDRequestDocument)2 URL (java.net.URL)1 ArrayList (java.util.ArrayList)1 DocumentBuilder (javax.xml.parsers.DocumentBuilder)1 DocumentBuilderFactory (javax.xml.parsers.DocumentBuilderFactory)1 MessageFactory (javax.xml.soap.MessageFactory)1 SOAPBody (javax.xml.soap.SOAPBody)1 SOAPConnection (javax.xml.soap.SOAPConnection)1 SOAPConnectionFactory (javax.xml.soap.SOAPConnectionFactory)1 SOAPEnvelope (javax.xml.soap.SOAPEnvelope)1 SOAPMessage (javax.xml.soap.SOAPMessage)1 SOAPPart (javax.xml.soap.SOAPPart)1 KeyNamePair (org.compiere.util.KeyNamePair)1 DataField (org.idempiere.adInterface.x10.DataField)1 DataRow (org.idempiere.adInterface.x10.DataRow)1 DataSet (org.idempiere.adInterface.x10.DataSet)1 ModelCRUD (org.idempiere.adInterface.x10.ModelCRUD)1 WindowTabData (org.idempiere.adInterface.x10.WindowTabData)1 WindowTabDataDocument (org.idempiere.adInterface.x10.WindowTabDataDocument)1