datahub/wherehows-api/app/utils/SchemaHistory.java

117 lines
3.8 KiB
Java
Raw Normal View History

2015-11-19 14:39:21 -08:00
/**
* Copyright 2015 LinkedIn Corp. All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
*/
package utils;
import com.fasterxml.jackson.databind.JsonNode;
import java.util.Iterator;
import java.util.Map;
public class SchemaHistory
{
public static int calculateDict(JsonNode node) {
int count = 0;
Iterator<Map.Entry<String, JsonNode>> iterator = node.fields();
while (iterator.hasNext())
{
Map.Entry<String,JsonNode> element = iterator.next();
if (element.getValue().isArray()) {
if (element.getKey().toLowerCase() == "fields")
{
count += element.getValue().size();
}
count += calculateList(element.getValue());
} else if (element.getValue().isContainerNode()) {
if (element.getKey().toLowerCase() == "fields")
{
count += element.getValue().size();
}
count += calculateDict(element.getValue());
}
else if (element.getKey().toLowerCase() == "fields")
{
count += 1;
}
}
return count;
}
public static int calculateList(JsonNode node) {
int count = 0;
Iterator<JsonNode> arrayIterator = node.elements();
while (arrayIterator.hasNext()) {
JsonNode element = arrayIterator.next();
if (element.isArray()) {
count += calculateList(element);
} else if (element.isContainerNode()) {
count += calculateDict(element);
}
}
return count;
}
public static int calculateFieldCount(JsonNode node)
{
int count = 0;
JsonNode schemaNode = null;
2015-11-19 14:39:21 -08:00
if (node != null && node.has("schema")) {
schemaNode = node.get("schema");
}
else
{
schemaNode = node;
}
if (schemaNode.isArray()) {
2015-11-19 14:39:21 -08:00
Iterator<JsonNode> arrayIterator = schemaNode.elements();
while (arrayIterator.hasNext()) {
JsonNode element = arrayIterator.next();
if (element.isArray()) {
count += calculateList(element);
} else if (element.isContainerNode()) {
count += calculateDict(element);
2015-11-19 14:39:21 -08:00
}
}
}
else if (schemaNode.isContainerNode())
{
Iterator<Map.Entry<String, JsonNode>> iterator = schemaNode.fields();
while (iterator.hasNext())
2015-11-19 14:39:21 -08:00
{
Map.Entry<String,JsonNode> element = iterator.next();
if (element.getValue().isArray()) {
if (element.getKey().toLowerCase() == "fields")
{
count += element.getValue().size();
2015-11-19 14:39:21 -08:00
}
count += calculateList(element.getValue());
} else if (element.getValue().isContainerNode()) {
if (element.getKey().toLowerCase() == "fields")
2015-11-19 14:39:21 -08:00
{
count += element.getValue().size();
2015-11-19 14:39:21 -08:00
}
count += calculateDict(element.getValue());
}
else if (element.getKey().toLowerCase() == "fields")
{
count += 1;
2015-11-19 14:39:21 -08:00
}
}
}
return count;
}
}