List of usage examples for com.google.gson.stream JsonReader nextString
public String nextString() throws IOException
From source file:org.bimserver.emf.SharedJsonDeserializer.java
License:Open Source License
@SuppressWarnings({ "rawtypes", "unchecked" }) private IdEObject processObject(IfcModelInterface model, WaitingList<Long> waitingList, JsonReader jsonReader, EClass eClass) throws IOException, DeserializeException, IfcModelInterfaceException { IdEObjectImpl object = null;//from ww w . j av a2 s . c o m jsonReader.beginObject(); if (jsonReader.nextName().equals("_i")) { long oid = jsonReader.nextLong(); if (jsonReader.nextName().equals("_t")) { String type = jsonReader.nextString(); if (eClass == null) { eClass = model.getPackageMetaData().getEClassIncludingDependencies(type); } if (eClass == null) { throw new DeserializeException("No class found with name " + type); } if (model.containsNoFetch(oid)) { object = (IdEObjectImpl) model.getNoFetch(oid); } else { if (eClass == StorePackage.eINSTANCE.getIfcHeader()) { object = (IdEObjectImpl) StoreFactory.eINSTANCE.createIfcHeader(); } else { object = (IdEObjectImpl) model.create(eClass, oid); } } if (jsonReader.nextName().equals("_s")) { int state = jsonReader.nextInt(); if (state == 1) { object.setLoadingState(State.LOADED); while (jsonReader.hasNext()) { String featureName = jsonReader.nextName(); boolean embedded = false; if (featureName.startsWith("_r")) { featureName = featureName.substring(2); } else if (featureName.startsWith("_e")) { embedded = true; featureName = featureName.substring(2); } EStructuralFeature eStructuralFeature = eClass.getEStructuralFeature(featureName); if (eStructuralFeature == null) { throw new DeserializeException( "Unknown field (" + featureName + ") on class " + eClass.getName()); } if (eStructuralFeature.isMany()) { jsonReader.beginArray(); if (eStructuralFeature instanceof EAttribute) { List list = (List) object.eGet(eStructuralFeature); List<String> stringList = null; if (eStructuralFeature.getEType() == EcorePackage.eINSTANCE.getEDoubleObject() || eStructuralFeature.getEType() == EcorePackage.eINSTANCE .getEDouble()) { EStructuralFeature asStringFeature = eClass .getEStructuralFeature(eStructuralFeature.getName() + "AsString"); stringList = (List<String>) object.eGet(asStringFeature); } while (jsonReader.hasNext()) { Object e = readPrimitive(jsonReader, eStructuralFeature); list.add(e); if (eStructuralFeature.getEType() == EcorePackage.eINSTANCE.getEDouble()) { double val = (Double) e; stringList.add("" + val); // TODO // this // is // losing // precision, // maybe // also // send // the // string // value? } } } else if (eStructuralFeature instanceof EReference) { int index = 0; AbstractEList list = (AbstractEList) object.eGet(eStructuralFeature); while (jsonReader.hasNext()) { if (embedded) { JsonToken peek = jsonReader.peek(); if (peek == JsonToken.NUMBER) { long refOid = jsonReader.nextLong(); processRef(model, waitingList, object, eStructuralFeature, index, list, refOid); } else { jsonReader.beginObject(); String nextName = jsonReader.nextName(); if (nextName.equals("_t")) { String t = jsonReader.nextString(); IdEObject wrappedObject = (IdEObject) model .create(model.getPackageMetaData().getEClass(t), -1); if (jsonReader.nextName().equals("_v")) { EStructuralFeature wv = wrappedObject.eClass() .getEStructuralFeature("wrappedValue"); wrappedObject.eSet(wv, readPrimitive(jsonReader, wv)); list.add(wrappedObject); } else { // error } } else if (nextName.equals("_i")) { // Not all are embedded... long refOid = jsonReader.nextLong(); processRef(model, waitingList, object, eStructuralFeature, index, list, refOid); } jsonReader.endObject(); } } else { long refOid = jsonReader.nextLong(); processRef(model, waitingList, object, eStructuralFeature, index, list, refOid); } index++; } } jsonReader.endArray(); } else { if (eStructuralFeature instanceof EAttribute) { Object x = readPrimitive(jsonReader, eStructuralFeature); if (eStructuralFeature.getEType() == EcorePackage.eINSTANCE.getEDouble()) { EStructuralFeature asStringFeature = object.eClass() .getEStructuralFeature(eStructuralFeature.getName() + "AsString"); if (asStringFeature != null) { object.eSet(asStringFeature, "" + x); // TODO } // this // is // losing // precision, // maybe // also // send // the // string // value? } object.eSet(eStructuralFeature, x); } else if (eStructuralFeature instanceof EReference) { if (eStructuralFeature.getName().equals("GlobalId")) { IfcGloballyUniqueId globallyUniqueId = Ifc2x3tc1Factory.eINSTANCE .createIfcGloballyUniqueId(); globallyUniqueId.setWrappedValue(jsonReader.nextString()); object.eSet(eStructuralFeature, globallyUniqueId); } else if (embedded) { jsonReader.beginObject(); if (jsonReader.nextName().equals("_t")) { String t = jsonReader.nextString(); IdEObject wrappedObject = (IdEObject) model.create( model.getPackageMetaData().getEClassIncludingDependencies(t), -1); if (eStructuralFeature.getEAnnotation("dbembed") != null) { for (EStructuralFeature eStructuralFeature2 : wrappedObject.eClass() .getEAllStructuralFeatures()) { String fn = jsonReader.nextName(); if (fn.equals(eStructuralFeature2.getName())) { wrappedObject.eSet(eStructuralFeature2, readPrimitive(jsonReader, eStructuralFeature2)); } else { throw new DeserializeException( fn + " / " + eStructuralFeature2.getName()); } } object.eSet(eStructuralFeature, wrappedObject); } else { if (jsonReader.nextName().equals("_v")) { EStructuralFeature wv = wrappedObject.eClass() .getEStructuralFeature("wrappedValue"); wrappedObject.eSet(wv, readPrimitive(jsonReader, wv)); object.eSet(eStructuralFeature, wrappedObject); } } } jsonReader.endObject(); } else { long refOid = jsonReader.nextLong(); boolean isInverse = false; EntityDefinition entityBN = model.getPackageMetaData().getSchemaDefinition() .getEntityBN(object.eClass().getName()); if (entityBN != null) { // Some entities like GeometryInfo/Data are not in IFC schema, but valid Attribute attributeBN = entityBN .getAttributeBNWithSuper(eStructuralFeature.getName()); if (attributeBN != null) { if (attributeBN instanceof InverseAttribute) { isInverse = true; } } } if (!isInverse) { if (model.contains(refOid)) { object.eSet(eStructuralFeature, model.get(refOid)); } else { waitingList.add(refOid, new SingleWaitingObject(-1, object, (EReference) eStructuralFeature)); } } } } } } } else { // state not_loaded } if (waitingList.containsKey(oid)) { waitingList.updateNode(oid, eClass, object); } model.add(object.getOid(), object); } else { LOGGER.info("_s expected"); } } else { LOGGER.info("_t expected"); } } else { LOGGER.info("_i expected"); } jsonReader.endObject(); return object; }
From source file:org.bimserver.emf.SharedJsonDeserializer.java
License:Open Source License
private Object readPrimitive(JsonReader jsonReader, EStructuralFeature eStructuralFeature) throws IOException { EClassifier eClassifier = eStructuralFeature.getEType(); if (eClassifier == EcorePackage.eINSTANCE.getEString()) { return jsonReader.nextString(); } else if (eClassifier == EcorePackage.eINSTANCE.getEDouble()) { return jsonReader.nextDouble(); } else if (eClassifier == EcorePackage.eINSTANCE.getEBoolean()) { return jsonReader.nextBoolean(); } else if (eClassifier == EcorePackage.eINSTANCE.getEInt()) { return jsonReader.nextInt(); } else if (eClassifier == EcorePackage.eINSTANCE.getELong()) { return jsonReader.nextLong(); } else if (eClassifier == EcorePackage.eINSTANCE.getEIntegerObject()) { return jsonReader.nextInt(); } else if (eClassifier == EcorePackage.eINSTANCE.getEByteArray()) { return Base64.decodeBase64(jsonReader.nextString()); } else if (eClassifier == EcorePackage.eINSTANCE.getEDate()) { long timestamp = jsonReader.nextLong(); return new Date(timestamp); } else if (eClassifier == EcorePackage.eINSTANCE.getEFloat()) { return (float) jsonReader.nextDouble(); } else if (eClassifier == EcorePackage.eINSTANCE.getEEnum()) { EEnum eEnum = (EEnum) eStructuralFeature.getEType(); return eEnum.getEEnumLiteral(jsonReader.nextString()).getInstance(); } else if (eClassifier instanceof EClass) { if (eStructuralFeature.getEType().getName().equals("IfcGloballyUniqueId")) { IfcGloballyUniqueId ifcGloballyUniqueId = Ifc2x3tc1Factory.eINSTANCE.createIfcGloballyUniqueId(); ifcGloballyUniqueId.setWrappedValue(jsonReader.nextString()); return ifcGloballyUniqueId; } else {//from w w w . j a v a 2 s .co m throw new RuntimeException(); } } else if (eClassifier instanceof EEnum) { EEnum eEnum = (EEnum) eStructuralFeature.getEType(); if (jsonReader.peek() == JsonToken.BOOLEAN) { return eEnum.getEEnumLiteral(jsonReader.nextBoolean() ? "TRUE" : "FALSE").getInstance(); } else { return eEnum.getEEnumLiteral(jsonReader.nextString()).getInstance(); } } else { throw new RuntimeException("Unimplemented type " + eStructuralFeature.getEType().getName()); } }
From source file:org.cgiar.ccafs.marlo.utils.BigDecimalTypeAdapter.java
License:Open Source License
@Override public BigDecimal read(JsonReader jsonReader) throws IOException { if (jsonReader.peek() == JsonToken.NULL) { jsonReader.nextNull();//ww w . j a v a 2s .c o m return null; } try { String value = jsonReader.nextString(); if (value.contains("%")) { value = value.replace("%", ""); } if ("".equals(value)) { return new BigDecimal(0); } return BigDecimal.valueOf(Double.parseDouble(value)); } catch (NumberFormatException e) { return new BigDecimal(0); } }
From source file:org.cgiar.ccafs.marlo.utils.DateTypeAdapter.java
License:Open Source License
@Override public Date read(JsonReader in) throws IOException { if (in.peek() == JsonToken.NULL) { in.nextNull();//from ww w. ja v a2s . co m return null; } return this.deserializeToDate(in.nextString()); }
From source file:org.cgiar.ccafs.marlo.utils.DoubleTypeAdapter.java
License:Open Source License
@Override public Double read(JsonReader jsonReader) throws IOException { if (jsonReader.peek() == JsonToken.NULL) { jsonReader.nextNull();//from w ww .ja v a 2 s. co m return null; } try { String value = jsonReader.nextString(); if (value.contains("%")) { value = value.replace("%", ""); } if ("".equals(value)) { return new Double(0); } return Double.valueOf(Double.parseDouble(value)); } catch (NumberFormatException e) { return new Double(0); } }
From source file:org.cgiar.ccafs.marlo.utils.FloatTypeAdapter.java
License:Open Source License
@Override public Float read(JsonReader jsonReader) throws IOException { if (jsonReader.peek() == JsonToken.NULL) { jsonReader.nextNull();/* w ww .j a v a 2s. c o m*/ return null; } try { String value = jsonReader.nextString(); if (value.contains("%")) { value = value.replace("%", ""); } if ("".equals(value)) { return new Float(0); } return Float.valueOf(Float.parseFloat(value)); } catch (NumberFormatException e) { return new Float(0); } }
From source file:org.cgiar.ccafs.marlo.utils.IntegerTypeAdapter.java
License:Open Source License
@Override public Number read(JsonReader jsonReader) throws IOException { if (jsonReader.peek() == JsonToken.NULL) { jsonReader.nextNull();/*from w w w . ja v a 2s . c o m*/ return null; } try { String value = jsonReader.nextString(); if ("".equals(value)) { return 0; } return Integer.parseInt(value); } catch (NumberFormatException e) { return null; } }
From source file:org.cgiar.ccafs.marlo.utils.LongTypeAdapter.java
License:Open Source License
@Override public Long read(JsonReader reader) throws IOException { if (reader.peek() == JsonToken.NULL) { reader.nextNull();/*from www . jav a 2 s. co m*/ return null; } String stringValue = reader.nextString(); // stringValue = stringValue.replaceAll(",", ""); try { Long value = NumberFormat.getNumberInstance(java.util.Locale.US).parse(stringValue).longValue(); return value; } catch (Exception e) { return null; } }
From source file:org.cgiar.ccafs.marlo.utils.StringTypeAdapter.java
License:Open Source License
@Override public String read(JsonReader jsonReader) throws IOException { if (jsonReader.peek() == JsonToken.NULL) { jsonReader.nextNull();/* w w w . ja va2 s .co m*/ return null; } try { String value = jsonReader.nextString(); return value; } catch (IllegalStateException e) { String values = ""; jsonReader.beginArray(); while (jsonReader.hasNext()) { if (values.length() < 1) { values = jsonReader.nextString(); } else { values = values + "," + jsonReader.nextString(); } } jsonReader.endArray(); return values; } }
From source file:org.cyanogenmod.changelog.ChangelogParser.java
License:Open Source License
/** * Read ChangeInfo JSON entity/*from w w w.j ava2 s. com*/ * See http://review.cyanogenmod.org/Documentation/rest-api.html * @param reader the JsonReader to use * @return the parsed Change. * @throws IOException */ private Change parseChangeInfo(JsonReader reader) throws IOException { Change change = new Change(); reader.beginObject(); while (reader.hasNext()) { switch (reader.nextName()) { case "_number": change.setChangeId(reader.nextString()); break; case "project": change.setProject(reader.nextString()); break; case "subject": change.setSubject(reader.nextString()); break; case "updated": change.setLastUpdate(parseTimestamp(reader.nextString())); break; case "insertions": change.setInsertions(reader.nextInt()); break; case "deletions": change.setDeletions(reader.nextInt()); break; default: reader.skipValue(); } } reader.endObject(); return change; }