Example usage for com.google.gson JsonElement isJsonObject

List of usage examples for com.google.gson JsonElement isJsonObject

Introduction

In this page you can find the example usage for com.google.gson JsonElement isJsonObject.

Prototype

public boolean isJsonObject() 

Source Link

Document

provides check for verifying if this element is a Json object or not.

Usage

From source file:com.ibm.csync.internals.response.CSValueDeserializer.java

License:Open Source License

@Override
public CSValue deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context)
        throws JsonParseException {

    if (json.isJsonObject()) {
        JsonObject jsonObject = (JsonObject) json;

        CSKey key = jsonArraytoCSKey(jsonObject.get("path").getAsJsonArray());
        String data = null;// w  w  w .jav  a 2  s. co m
        if (jsonObject.has("data")) {
            data = jsonObject.get("data").getAsString();
        }
        long cts = jsonObject.get("cts").getAsLong();
        long vts = jsonObject.get("vts").getAsLong();
        boolean keyDeleted = jsonObject.get("deletePath").getAsBoolean();
        CSAcl acl = CSAcl.customAcl(jsonObject.get("acl").getAsString());

        return new CSValue(key, data, cts, vts, acl, keyDeleted);
    }
    return null;
}

From source file:com.ibm.g11n.pipeline.resfilter.GlobalizeJsResource.java

License:Open Source License

@Override
public Bundle parse(InputStream inStream) throws IOException {
    Bundle bundle = new Bundle();
    try (InputStreamReader reader = new InputStreamReader(new BomInputStream(inStream),
            StandardCharsets.UTF_8)) {
        JsonElement root = new JsonParser().parse(reader);
        if (!root.isJsonObject()) {
            throw new IllegalResourceFormatException("The root JSON element is not a JSON object.");
        }//from   w w  w  .  ja va2s  .c om
        JsonObject root_obj = root.getAsJsonObject();
        Set<Map.Entry<String, JsonElement>> root_elements = root_obj.entrySet();
        if (root_elements.size() != 1) {
            throw new IllegalResourceFormatException(
                    "Only one top level language tag element is allowed per file.");
        }
        Map.Entry<String, JsonElement> top_level = root_elements.iterator().next();
        String language = top_level.getKey();
        // We just hang on to the language tag as part of the bundle.
        // When doing an import, we can validate that the language tag matches what they
        // say they are importing.
        bundle.setLanguage(language);
        JsonElement language_obj = top_level.getValue();
        if (!language_obj.isJsonObject()) {
            throw new IllegalResourceFormatException("The top level language element is not a JSON object.");
        }
        addBundleStrings(language_obj.getAsJsonObject(), "", bundle, 0);
    } catch (JsonParseException e) {
        throw new IllegalResourceFormatException("Failed to parse the specified JSON contents.", e);
    }
    return bundle;
}

From source file:com.ibm.g11n.pipeline.resfilter.GlobalizeJsResource.java

License:Open Source License

/**
 * The override of addBundleStrings is necessary because globalizejs treats arrays of strings
 * as a single long string, with each piece separated by a space, rather than treating it like
 * a real JSON array.//from w  w  w .j av a2 s  .  c  om
 */
@Override
protected int addBundleStrings(JsonObject obj, String keyPrefix, Bundle bundle, int sequenceNum) {
    for (Map.Entry<String, JsonElement> entry : obj.entrySet()) {
        String key = entry.getKey();
        JsonElement value = entry.getValue();
        if (value.isJsonObject()) {
            sequenceNum = addBundleStrings(value.getAsJsonObject(), encodeResourceKey(keyPrefix, key, false),
                    bundle, sequenceNum);
        } else if (value.isJsonArray()) {
            JsonArray ar = value.getAsJsonArray();
            StringBuilder sb = new StringBuilder();
            for (int i = 0; i < ar.size(); i++) {
                JsonElement arrayEntry = ar.get(i);
                if (arrayEntry.isJsonPrimitive() && arrayEntry.getAsJsonPrimitive().isString()) {
                    if (i > 0) {
                        sb.append(" "); //
                    }
                    sb.append(arrayEntry.getAsString());
                } else {
                    throw new IllegalResourceFormatException(
                            "Arrays must contain only strings in a globalizejs resource.");
                }
            }
            sequenceNum++;
            bundle.addResourceString(encodeResourceKey(keyPrefix, key, true), sb.toString(), sequenceNum);
        } else if (!value.isJsonPrimitive() || !value.getAsJsonPrimitive().isString()) {
            throw new IllegalResourceFormatException("The value of JSON element " + key + " is not a string.");
        } else {
            sequenceNum++;
            bundle.addResourceString(encodeResourceKey(keyPrefix, key, true), value.getAsString(), sequenceNum);
        }
    }
    return sequenceNum;
}

From source file:com.ibm.g11n.pipeline.resfilter.impl.GlobalizeJsResource.java

License:Open Source License

@Override
public LanguageBundle parse(InputStream inStream, FilterOptions options)
        throws IOException, ResourceFilterException {
    LanguageBundleBuilder bb = new LanguageBundleBuilder(false); // TODO: can we use auto sequence# mode?
    try (InputStreamReader reader = new InputStreamReader(new BomInputStream(inStream),
            StandardCharsets.UTF_8)) {
        JsonElement root = new JsonParser().parse(reader);
        if (!root.isJsonObject()) {
            throw new IllegalResourceFormatException("The root JSON element is not a JSON object.");
        }//ww w  .  ja  v  a 2s.c  o  m
        JsonObject root_obj = root.getAsJsonObject();
        Set<Map.Entry<String, JsonElement>> root_elements = root_obj.entrySet();
        if (root_elements.size() != 1) {
            throw new IllegalResourceFormatException(
                    "Only one top level language tag element is allowed per file.");
        }
        Map.Entry<String, JsonElement> top_level = root_elements.iterator().next();
        String language = top_level.getKey();
        // We just hang on to the language tag as part of the bundle.
        // When doing an import, we can validate that the language tag matches what they
        // say they are importing.
        bb.embeddedLanguageCode(language);
        JsonElement language_obj = top_level.getValue();
        if (!language_obj.isJsonObject()) {
            throw new IllegalResourceFormatException("The top level language element is not a JSON object.");
        }
        addBundleStrings(language_obj.getAsJsonObject(), "", bb, 0);
    } catch (JsonParseException e) {
        throw new IllegalResourceFormatException("Failed to parse the specified JSON contents.", e);
    }
    return bb.build();
}

From source file:com.ibm.g11n.pipeline.resfilter.impl.GlobalizeJsResource.java

License:Open Source License

/**
 * The override of addBundleStrings is necessary because globalizejs treats arrays of strings
 * as a single long string, with each piece separated by a space, rather than treating it like
 * a real JSON array./*from   w w  w  .  j  a va2  s .co  m*/
 */
@Override
protected int addBundleStrings(JsonObject obj, String keyPrefix, LanguageBundleBuilder bb, int sequenceNum)
        throws ResourceFilterException {
    for (Map.Entry<String, JsonElement> entry : obj.entrySet()) {
        String key = entry.getKey();
        JsonElement value = entry.getValue();
        if (value.isJsonObject()) {
            sequenceNum = addBundleStrings(value.getAsJsonObject(), encodeResourceKey(keyPrefix, key, false),
                    bb, sequenceNum);
        } else if (value.isJsonArray()) {
            JsonArray ar = value.getAsJsonArray();
            StringBuilder sb = new StringBuilder();
            for (int i = 0; i < ar.size(); i++) {
                JsonElement arrayEntry = ar.get(i);
                if (arrayEntry.isJsonPrimitive() && arrayEntry.getAsJsonPrimitive().isString()) {
                    if (i > 0) {
                        sb.append(" "); //
                    }
                    sb.append(arrayEntry.getAsString());
                } else {
                    throw new IllegalResourceFormatException(
                            "Arrays must contain only strings in a globalizejs resource.");
                }
            }
            sequenceNum++;
            bb.addResourceString(encodeResourceKey(keyPrefix, key, true), sb.toString(), sequenceNum);
        } else if (!value.isJsonPrimitive() || !value.getAsJsonPrimitive().isString()) {
            throw new IllegalResourceFormatException("The value of JSON element " + key + " is not a string.");
        } else {
            sequenceNum++;
            bb.addResourceString(encodeResourceKey(keyPrefix, key, true), value.getAsString(), sequenceNum);
        }
    }
    return sequenceNum;
}

From source file:com.ibm.g11n.pipeline.resfilter.impl.JsonResource.java

License:Open Source License

@Override
public LanguageBundle parse(InputStream inStream, FilterOptions options)
        throws IOException, ResourceFilterException {
    LanguageBundleBuilder bb = new LanguageBundleBuilder(false); // TODO: Can we use auto sequence# mode?
    try (InputStreamReader reader = new InputStreamReader(new BomInputStream(inStream),
            StandardCharsets.UTF_8)) {
        JsonElement root = new JsonParser().parse(reader);
        if (!root.isJsonObject()) {
            throw new IllegalResourceFormatException("The root JSON element is not an JSON object.");
        }//from   w  ww  .  j  a v  a2 s. com
        addBundleStrings(root.getAsJsonObject(), "", bb, 0);
    } catch (JsonParseException e) {
        throw new IllegalResourceFormatException("Failed to parse the specified JSON contents.", e);
    }
    return bb.build();
}

From source file:com.ibm.g11n.pipeline.resfilter.impl.JsonResource.java

License:Open Source License

protected int addBundleStrings(JsonObject obj, String keyPrefix, LanguageBundleBuilder bb, int sequenceNum)
        throws ResourceFilterException {
    for (Map.Entry<String, JsonElement> entry : obj.entrySet()) {
        String key = entry.getKey();
        JsonElement value = entry.getValue();
        if (value.isJsonObject()) {
            sequenceNum = addBundleStrings(value.getAsJsonObject(), encodeResourceKey(keyPrefix, key, false),
                    bb, sequenceNum);/*from  ww w . j  a  v  a2s  .c om*/
        } else if (value.isJsonArray()) {
            JsonArray ar = value.getAsJsonArray();
            for (int i = 0; i < ar.size(); i++) {
                JsonElement arrayEntry = ar.get(i);
                String arrayKey = encodeResourceKey(keyPrefix, key, false) + "[" + Integer.toString(i) + "]";
                if (arrayEntry.isJsonPrimitive() && arrayEntry.getAsJsonPrimitive().isString()) {
                    sequenceNum++;
                    bb.addResourceString(ResourceString.with(arrayKey, arrayEntry.getAsString())
                            .sequenceNumber(sequenceNum));
                } else {
                    sequenceNum = addBundleStrings(arrayEntry.getAsJsonObject(), arrayKey, bb, sequenceNum);
                }
            }
        } else if (!value.isJsonPrimitive() || !value.getAsJsonPrimitive().isString()) {
            throw new IllegalResourceFormatException("The value of JSON element " + key + " is not a string.");
        } else {
            sequenceNum++;
            bb.addResourceString(
                    ResourceString.with(encodeResourceKey(keyPrefix, key, true), value.getAsString())
                            .sequenceNumber(sequenceNum));
        }
    }
    return sequenceNum;
}

From source file:com.ibm.g11n.pipeline.resfilter.impl.JsonResource.java

License:Open Source License

@Override
public void write(OutputStream outStream, LanguageBundle languageBundle, FilterOptions options)
        throws IOException, ResourceFilterException {
    // extracts key value pairs in original sequence order
    List<ResourceString> resStrings = languageBundle.getSortedResourceStrings();

    JsonObject output = new JsonObject();
    JsonObject top_level;/*from   www. j av  a  2  s .c om*/

    if (this instanceof GlobalizeJsResource) {
        String resLanguageCode = languageBundle.getEmbeddedLanguageCode();
        if (resLanguageCode == null || resLanguageCode.isEmpty()) {
            throw new ResourceFilterException(
                    "Missing resource language code in the specified language bundle.");
        }
        top_level = new JsonObject();
        top_level.add(resLanguageCode, output);
    } else {
        top_level = output;
    }

    for (ResourceString res : resStrings) {
        String key = res.getKey();
        List<KeyPiece> keyPieces = splitKeyPieces(key);
        JsonElement current = output;
        for (int i = 0; i < keyPieces.size(); i++) {
            if (i + 1 < keyPieces.size()) { // There is structure under this
                                            // key piece
                if (current.isJsonObject()) {
                    JsonObject currentObject = current.getAsJsonObject();
                    if (!currentObject.has(keyPieces.get(i).keyValue)) {
                        if (keyPieces.get(i + 1).keyType == JsonToken.BEGIN_ARRAY) {
                            currentObject.add(keyPieces.get(i).keyValue, new JsonArray());
                        } else {
                            currentObject.add(keyPieces.get(i).keyValue, new JsonObject());
                        }
                    }
                    current = currentObject.get(keyPieces.get(i).keyValue);
                } else {
                    JsonArray currentArray = current.getAsJsonArray();
                    Integer idx = Integer.valueOf(keyPieces.get(i).keyValue);
                    for (int arrayIndex = currentArray.size(); arrayIndex <= idx; arrayIndex++) {
                        currentArray.add(JsonNull.INSTANCE);
                    }
                    if (currentArray.get(idx).isJsonNull()) {
                        if (keyPieces.get(i + 1).keyType == JsonToken.BEGIN_ARRAY) {
                            currentArray.set(idx, new JsonArray());
                        } else {
                            currentArray.set(idx, new JsonObject());
                        }
                    }
                    current = currentArray.get(idx);
                }
            } else { // This is the leaf node
                if (keyPieces.get(i).keyType == JsonToken.BEGIN_ARRAY) {
                    JsonArray currentArray = current.getAsJsonArray();
                    Integer idx = Integer.valueOf(keyPieces.get(i).keyValue);
                    JsonPrimitive e = new JsonPrimitive(res.getValue());
                    for (int arrayIndex = currentArray.size(); arrayIndex <= idx; arrayIndex++) {
                        currentArray.add(JsonNull.INSTANCE);
                    }
                    current.getAsJsonArray().set(idx, e);
                } else {
                    current.getAsJsonObject().addProperty(keyPieces.get(i).keyValue, res.getValue());
                }
            }
        }
    }
    try (OutputStreamWriter writer = new OutputStreamWriter(new BufferedOutputStream(outStream),
            StandardCharsets.UTF_8)) {
        new GsonBuilder().setPrettyPrinting().disableHtmlEscaping().create().toJson(top_level, writer);
    }
}

From source file:com.ibm.g11n.pipeline.resfilter.JsonResource.java

License:Open Source License

@Override
public Bundle parse(InputStream inStream) throws IOException {
    Bundle bundle = new Bundle();
    try (InputStreamReader reader = new InputStreamReader(new BomInputStream(inStream),
            StandardCharsets.UTF_8)) {
        JsonElement root = new JsonParser().parse(reader);
        if (!root.isJsonObject()) {
            throw new IllegalResourceFormatException("The root JSON element is not an JSON object.");
        }/*from ww w.j  a v  a2 s .com*/
        int sequenceNum = 0;
        for (Map.Entry<String, JsonElement> entry : root.getAsJsonObject().entrySet()) {
            String key = entry.getKey();
            JsonElement value = entry.getValue();
            if (!value.isJsonPrimitive() || !value.getAsJsonPrimitive().isString()) {
                throw new IllegalResourceFormatException(
                        "The value of JSON element " + key + " is not a string.");
            }
            sequenceNum++;
            bundle.addResourceString(key, value.getAsString(), sequenceNum);
        }
    } catch (JsonParseException e) {
        throw new IllegalResourceFormatException("Failed to parse the specified JSON contents.", e);
    }
    return bundle;
}

From source file:com.ibm.og.json.type.ChoiceConfigTypeAdapterFactory.java

License:Open Source License

@Override
@SuppressWarnings("unchecked")
public <T> TypeAdapter<T> create(final Gson gson, final TypeToken<T> type) {
    final Class<T> rawType = (Class<T>) type.getRawType();
    if (!ChoiceConfig.class.equals(rawType)) {
        return null;
    }/*from   ww  w . ja  v a 2 s  .  co m*/

    final TypeAdapter<T> delegate = gson.getDelegateAdapter(this, type);

    return new TypeAdapter<T>() {
        @Override
        public void write(final JsonWriter out, final T value) throws IOException {
            delegate.write(out, value);
        }

        @Override
        @SuppressWarnings("rawtypes")
        public T read(final JsonReader in) throws IOException {
            final Class<?> genericType = (Class<?>) ((ParameterizedType) type.getType())
                    .getActualTypeArguments()[0];
            final TypeAdapter<JsonElement> jsonElementAdapter = gson.getAdapter(JsonElement.class);

            // the tree api is used here rather than the stream api so that the full object can be
            // inspected and we can differentiate between a ChoiceConfig<T> object or the underlying T
            // object itself. With the stream api there would be no way to rewind the stream once this
            // determination is made
            //
            // this logic allows the user to configure a choice of T in both the standard form, or
            // compactly if the default choice weight is sufficient e.g.
            //
            // standard form
            // {"choice": {fields for T object}, "weight": 1.0} <- weight is optional here
            //
            // compact form where default weight is acceptable
            // {fields for T object}
            final JsonElement element = jsonElementAdapter.read(in);
            if (element.isJsonObject()) {
                final JsonObject object = element.getAsJsonObject();
                if (object.entrySet().size() <= 2 && object.has("choice")) {
                    return delegate.fromJsonTree(element);
                }
            }

            return (T) new ChoiceConfig(gson.getAdapter(TypeToken.get(genericType)).fromJsonTree(element));
        }
    }.nullSafe();
}