Changeset 19591


Ignore:
Timestamp:
01/31/12 16:22:27 (4 months ago)
Author:
sys
Message:

WspSrcSender : format de sortie XML.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Jav_Moz_Wsp/src/eu/scenari/uimoz/services/SvcWspSrcSender.java

    r18986 r19591  
    5151import com.scenari.m.co.univers.IWUnivers; 
    5252import com.scenari.s.co.transform.HTransformParams; 
     53import com.scenari.serializer.simple.IXmlWriter; 
    5354import com.scenari.src.ISrcNode; 
    5455import com.scenari.src.feature.alternateurl.SrcFeatureAlternateUrl; 
     
    6162import com.scenari.src.feature.uris.SrcFeatureUris; 
    6263 
     64import eu.scenari.commons.log.ILogMsg.LogType; 
    6365import eu.scenari.commons.log.LogMgr; 
    64 import eu.scenari.commons.log.ILogMsg.LogType; 
    6566import eu.scenari.commons.mime.MimeMgr; 
    6667import eu.scenari.commons.stream.bytes.IBlob; 
     
    8081 * Un paramètre "format" spécifie le type de retour. 
    8182 *  
    82  * <h3>Format : JSON (par défaut)</h3> 
     83 * <h3>Format : JSON (par défaut) ou XML</h3> 
    8384 * Si plusieurs refUris sont requêtés, l'objet Json racine est un tableau avec autant d'entrées que de refUris  
    8485 * demandées et dans le même ordre. 
     
    180181                                } finally { 
    181182                                        vWriter.close(); 
     183                                } 
     184                        } else if (vFormat.equals("XML")) { 
     185                                //Envoi d'un XML 
     186                                int vDepth = 0; 
     187                                String vDepthStr = pReq.getParameter("depth"); 
     188                                if (vDepthStr != null && vDepthStr.length() > 0) vDepth = Integer.parseInt(vDepthStr); 
     189                                String vTargetsStr = pReq.getParameter("targets"); 
     190                                String[] vTargets = null; 
     191                                if (vTargetsStr != null && vTargetsStr.length() > 0) { 
     192                                        vTargets = sTargetSeparator.split(vTargetsStr, 0); 
     193                                } 
     194                                IXmlWriter vXmlWriter = hGetXmlWriterUTF8(pResp, true); 
     195                                try { 
     196                                        //Construction des Fields à publier 
     197                                        String vFieldKeys = pReq.getParameter("fields"); 
     198                                        if (vFieldKeys == null) vFieldKeys = sDefaultFieldKeys; 
     199                                        IFieldsCollector vFields = FieldsCollectorBuilder.newFieldsCollector(vFieldKeys); 
     200                                        if (vSrcNode == null) { 
     201                                                List<ISrcNode> vSrcNodes = vDialog.getSrcNodes(); 
     202                                                if (vSrcNodes == null) { 
     203                                                        sendError500(null, pResp); 
     204                                                        return; 
     205                                                } 
     206                                                List<String> vRefUris = vDialog.getParamRefUris(); 
     207                                                vXmlWriter.writeOpenTag("list"); 
     208                                                for (int i = 0; i < vRefUris.size(); i++) { 
     209                                                        vSrcNode = vSrcNodes.get(i); 
     210                                                        if (vSrcNode != null) { 
     211                                                                vFields.resetDatas(); 
     212                                                                SrcFeatureFields.fillFields(vSrcNode, vFields); 
     213                                                                writeFields(vSrcNode, vFields, vXmlWriter, vDepth, vTargets); 
     214                                                        } else { 
     215                                                                vXmlWriter.writeEmptyTag("entry"); 
     216                                                        } 
     217                                                } 
     218                                                vXmlWriter.writeCloseTag("list"); 
     219                                        } else { 
     220                                                SrcFeatureFields.fillFields(vSrcNode, vFields); 
     221                                                writeFields(vSrcNode, vFields, vXmlWriter, vDepth, vTargets); 
     222                                        } 
     223                                } finally { 
     224                                        vXmlWriter.close(); 
    182225                                } 
    183226                        } else if (vFormat.equals("stream") || vFormat.equals("download")) { 
     
    357400        } 
    358401 
     402        protected void writeFields(ISrcNode pNode, IFieldsCollector pFields, IXmlWriter pWriter, int pDepth, String[] pUriTargets) throws Exception { 
     403                //Serialisation Json 
     404                pWriter.writeStartTag("entry"); 
     405                pFields.startIterate(); 
     406                for (String vKey = pFields.nextDataKey(); vKey != null; vKey = pFields.nextDataKey()) { 
     407                        Object vValue = pFields.getData(vKey); 
     408                        if (vValue != null) { 
     409                                pWriter.writeAttribute(vKey, vValue != null ? vValue.toString() : ""); 
     410                        } 
     411                } 
     412                if (pDepth > 0 || isInTagerts(pNode.getSrcUri(), pUriTargets)) { 
     413                        List<ISrcNode> vCh = pNode.listChildrenNodes(null); 
     414                        if (vCh != null && vCh.size() > 0) { 
     415                                pWriter.writeEndOpenTag(); 
     416                                for (ISrcNode vNode : vCh) { 
     417                                        try { 
     418                                                pFields.resetDatas(); 
     419                                                SrcFeatureFields.fillFields(vNode, pFields); 
     420                                                writeFields(vNode, pFields, pWriter, pDepth - 1, pUriTargets); 
     421                                        } catch (Exception e) { 
     422                                                //En cas d'exception, on préfère perdre cet item mais préserver l'accès aux autres items de cet espace. 
     423                                                LogMgr.publishException(e, "Build srcFields failed for child : " + vNode.getSrcUri()); 
     424                                        } 
     425                                } 
     426                                pWriter.writeCloseTag("entry"); 
     427                        } else { 
     428                                pWriter.writeEndEmptyTag(); 
     429                        } 
     430                } else { 
     431                        pWriter.writeEndEmptyTag(); 
     432                } 
     433        } 
     434 
    359435        protected boolean isInTagerts(String pSrcUri, String[] pTargets) { 
    360436                if (pTargets == null) return false; 
Note: See TracChangeset for help on using the changeset viewer.