Package edu.isi.karma.service.json

Source Code of edu.isi.karma.service.json.Element

/*******************************************************************************
* Copyright 2012 University of Southern California
* 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.
* See the License for the specific language governing permissions and
* limitations under the License.
*
* This code was developed by the Information Integration Group as part
* of the Karma project at the Information Sciences Institute of the
* University of Southern California.  For more information, publications,
* and related projects, please see: http://www.isi.edu/integration
******************************************************************************/
package edu.isi.karma.service.json;

import java.util.ArrayList;
import java.util.List;

import edu.isi.karma.rep.sources.Attribute;
import edu.isi.karma.rep.sources.Table;

public class Element {
  private String key;
  private int valueType;
  private Value value;
  private String fullPath = "";
  private Element parent;
 
 
  public Element getParent() {
    return parent;
  }
  public void setParent(Element parent) {
    this.parent = parent;
  }
  public String getLocalName(int depth) {
    String result = "";
    if (valueType == ValueType.SINGLE)
      result += "d=" + depth + ",k=" + getKey() + ",v=" + ((SingleValue)getValue()).getValueString();
    return result;
  }
  public String getFullPath() {
    return fullPath.trim();
  }
  public void setFullPath(String fullPath) {
    this.fullPath = fullPath;
  }
  public String getKey() {
    // to remove @ in front of keys in process of converting xml to json
    if (key.startsWith("@"))
      key = key.substring(1);
    return key.trim();
  }
  public void setKey(String key) {
    this.key = key;
  }
  public int getValueType() {
    return valueType;
  }
  public void setValueType(int valueType) {
    this.valueType = valueType;
  }
  public Value getValue() {
    return value;
  }
  public void setValue(Value value) {
    this.value = value;
  }
 
    public void print() {
      this.print(this, 0);
    }
   
    private void print(Element root, int depth) {
      String tabs = "";
      for (int i = 0; i < depth; i++)
        tabs += "\t";
      System.out.println(tabs + "name:" + root.key);
      System.out.print(tabs + "value:");

      if (root.valueType == ValueType.SINGLE) {
        System.out.println(((SingleValue)root.value).getValueString());
        System.out.println();
      } else {
        System.out.println();
        for (int i = 0; i < ((ArrayValue)root.value).getElements().size(); i++)
          print(((ArrayValue)root.value).getElements().get(i), depth + 1);
      }
    }

    public void computeFullPaths(List<String> result) {
      this.computeFullPaths(this, result);
    }
   
    private void computeFullPaths(Element root, List<String> result) {
      if (root.getFullPath().length() > 0)
        result.add(root.getFullPath());
      if (root.valueType == ValueType.SINGLE) {
      } else {
        for (int i = 0; i < ((ArrayValue)root.value).getElements().size(); i++)
          computeFullPaths(((ArrayValue)root.value).getElements().get(i), result);
      }
    }

    public void updateHeaders() {
      this.updateHeaders(this,"");
    }
   
    private void updateHeaders(Element root, String prefix) {
      if (prefix.trim().length() > 0) {
        if (root.key.trim().length() > 0)
          root.key = prefix + ":" + root.key;
        else
          root.key = prefix;
      }
      if (root.valueType == ValueType.SINGLE) {
        return;
      } else {
      for (Element children : ((ArrayValue)root.getValue()).getElements())
        updateHeaders(children, root.key);
      }
    }
   
    public Table getFlatTable() {
      Table t = new Table();
      this.getFlatTable(this, t);
      return t;
    }
   
    private void getFlatTable(Element root, Table t) {
   
      Table innerT = new Table();
     
      if (root.valueType == ValueType.SINGLE) {
        innerT.getHeaders().add(new Attribute(root.getKey(), root.getKey()));
        List<String> v = new ArrayList<String>();
        v.add(((SingleValue)root.getValue()).getValueString());
        innerT.getValues().add(v);
        t.cartesianProductOrUnionIfSameHeaders(innerT);
        return;
      } else {
        List<String> v = new ArrayList<String>();
      for (Element child : ((ArrayValue)root.getValue()).getElements())
      {
        if (child.valueType == ValueType.SINGLE) {
            innerT.getHeaders().add(new Attribute(child.getKey(), child.getKey()));
            v.add(((SingleValue)child.getValue()).getValueString());
        }
      }
      if (v.size() > 0) {
        innerT.getValues().add(v);
        t.cartesianProductOrUnionIfSameHeaders(innerT);
      }   
     
      Table unionT = new Table();
      for (Element child : ((ArrayValue)root.getValue()).getElements())
      {
        if (child.valueType == ValueType.ARRAY) {
          innerT = new Table();
            getFlatTable(child, innerT);
            unionT.cartesianProductOrUnionIfSameHeaders(innerT);
        }
      }
      if (unionT.getColumnsCount() > 0)
        t.cartesianProductOrUnionIfSameHeaders(unionT);
    }
    }
   
    public void moveUpOneValueElements() {
      this.moveUpOneValueElements(this);
    }
   
    private void moveUpOneValueElements(Element root) {

      if (root.valueType == ValueType.ARRAY && ((ArrayValue)root.getValue()).getElements().size() <= 1) {
        while (true) {
         
          if (((ArrayValue)root.getValue()).getElements().size() > 1)
            break;
         
          if (((ArrayValue)root.getValue()).getElements().size() == 0) {
//            if (root.getParent() != null)
//              ((ArrayValue)root.getParent().getValue()).getElements().remove(root);
            return;
          }
         
          Element e = ((ArrayValue)root.getValue()).getElements().get(0);
         
        root.setValue(e.getValue());
        root.setValueType(e.getValueType());
        root.setKey(e.getKey());
        if (e.valueType == ValueType.SINGLE)
          return;
        }
      }
      if (root.valueType == ValueType.SINGLE)
        return;
     
      for (int i = 0; i < ((ArrayValue)root.value).getElements().size(); i++) {
      moveUpOneValueElements(((ArrayValue)root.value).getElements().get(i));
      }
    }
}
TOP

Related Classes of edu.isi.karma.service.json.Element

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.