From: Dave B. <bla...@us...> - 2013-10-17 13:15:12
|
Update of /cvsroot/sblim/jsr48-client/src/org/sblim/cimclient/internal/cimxml In directory sfp-cvs-1.v30.ch3.sourceforge.com:/tmp/cvs-serv30043/src/org/sblim/cimclient/internal/cimxml Modified Files: Tag: Experimental CIMXMLParserImpl.java Log Message: 2537 CR03: Add new data types for PARAMVALUE Index: CIMXMLParserImpl.java =================================================================== RCS file: /cvsroot/sblim/jsr48-client/src/org/sblim/cimclient/internal/cimxml/CIMXMLParserImpl.java,v retrieving revision 1.14.2.59 retrieving revision 1.14.2.60 diff -u -d -r1.14.2.59 -r1.14.2.60 --- CIMXMLParserImpl.java 11 Oct 2013 14:28:21 -0000 1.14.2.59 +++ CIMXMLParserImpl.java 17 Oct 2013 13:15:09 -0000 1.14.2.60 @@ -75,6 +75,7 @@ * 2685 2013-10-07 blaschke-oss Element.getAttribute returns empty string if no attribute * 2686 2013-10-10 blaschke-oss parseEXPPARAMVALUE allows 2+ children, prohibits 0 * 2688 2013-10-10 blaschke-oss parseMETHODCALL looks for CIMName attribute instead of NAME + * 2537 2013-10-17 blaschke-oss Add new data types for PARAMVALUE */ package org.sblim.cimclient.internal.cimxml; @@ -2243,7 +2244,8 @@ public static CIMArgument<Object> parsePARAMVALUE(Element pParamValueE) throws CIMXMLParseException { // <!ELEMENT PARAMVALUE - // (VALUE|VALUE.REFERENCE|VALUE.ARRAY|VALUE.REFARRAY)?>) + // (VALUE|VALUE.REFERENCE|VALUE.ARRAY|VALUE.REFARRAYCLASSNAME| + // INSTANCENAME|CLASS|INSTANCE|VALUE.NAMEDINSTANCE)?>) // <!ATTLIST PARAMTYPE %NAME;%PARAMTYPE%> String name = attribute(pParamValueE, "NAME"); if (name == null) throw new CIMXMLParseException( @@ -2260,8 +2262,50 @@ if (type == null) throw new CIMXMLParseException("PARAMVALUE element type is null!"); return new CIMArgument<Object>(name, type, value); } - EmbObjHandler embObjHandler = new EmbObjHandler(pParamValueE); - return new CIMArgument<Object>(name, embObjHandler.getType(), embObjHandler.getValue()); + if (searchFirstNode(pParamValueE, "VALUE") != null + || searchFirstNode(pParamValueE, "VALUE.ARRAY") != null || !hasNodes(pParamValueE)) { + EmbObjHandler embObjHandler = new EmbObjHandler(pParamValueE); + return new CIMArgument<Object>(name, embObjHandler.getType(), embObjHandler.getValue()); + } + + // CLASSNAME + Element classNameE = (Element) searchFirstNode(pParamValueE, "CLASSNAME"); + if (classNameE != null) { + CIMObjectPath op = parseCLASSNAME(classNameE); + CIMDataType type = new CIMDataType(op.getObjectName()); + return new CIMArgument<Object>(name, type, op); + } + + // INSTANCENAME + Element instNameE = (Element) searchFirstNode(pParamValueE, "INSTANCENAME"); + if (instNameE != null) { + CIMObjectPath op = parseINSTANCENAME(instNameE); + CIMDataType type = new CIMDataType(op.getObjectName()); + return new CIMArgument<Object>(name, type, op); + } + + // CLASS + Element classE = (Element) searchFirstNode(pParamValueE, "CLASS"); + if (classE != null) { + CIMClass cl = parseCLASS(classE); + return new CIMArgument<Object>(name, CIMDataType.CLASS_T, cl); + } + + // INSTANCE + Element instanceE = (Element) searchFirstNode(pParamValueE, "INSTANCE"); + if (instanceE != null) { + CIMInstance inst = parseINSTANCE(instanceE); + return new CIMArgument<Object>(name, CIMDataType.OBJECT_T, inst); + } + + // VALUE.NAMEDINSTANCE + Element valuenamedisntanceE = (Element) searchFirstNode(pParamValueE, "VALUE.NAMEDINSTANCE"); + if (valuenamedisntanceE != null) { + CIMInstance inst = parseVALUENAMEDINSTANCE(valuenamedisntanceE); + return new CIMArgument<Object>(name, CIMDataType.OBJECT_T, inst); + } + + return new CIMArgument<Object>(name, CIMDataType.STRING_T, null); } /** @@ -3068,7 +3112,12 @@ */ private static boolean hasNodes(Element pParentE) { NodeList nl = pParentE.getChildNodes(); - return (nl != null && nl.getLength() > 0); + if (nl == null || nl.getLength() == 0) return false; + for (int i = 0; i < nl.getLength(); i++) { + Node n = nl.item(i); + if (!(n instanceof Text) || !("".equalsIgnoreCase(n.getNodeValue().trim()))) return true; + } + return false; } /** |