Package com.cloudera.recordbreaker.fisheye

Source Code of com.cloudera.recordbreaker.fisheye.SchemaPage$SchemaPageDisplay

/*
* Copyright (c) 2012, Cloudera, Inc. All Rights Reserved.
*
* Cloudera, Inc. licenses this file to you 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
*
* This software 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.
*/
package com.cloudera.recordbreaker.fisheye;

import com.cloudera.recordbreaker.analyzer.SchemaSummary;

import org.apache.wicket.markup.html.WebPage;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.request.mapper.parameter.PageParameters;
import org.apache.wicket.markup.html.list.ListView;
import org.apache.wicket.markup.html.list.ListItem;

import org.codehaus.jackson.JsonNode;
import org.codehaus.jackson.JsonParser;
import org.codehaus.jackson.JsonFactory;
import org.codehaus.jackson.map.ObjectMapper;

import java.util.List;
import java.util.ArrayList;
import java.util.Arrays;
import java.io.IOException;
import java.util.Iterator;

/**
* Wicket Page class that describes a specific Schema
*
* @author "Michael Cafarella"
* @version 1.0
* @since 1.0
* @see WebPage
*/
public class SchemaPage extends WebPage {
  static JsonFactory factory = new JsonFactory(new ObjectMapper());

  static List<List<JsonNode>> getSchemaDigest(String s) throws IOException {
    List<List<JsonNode>> listOfSchemaElts = new ArrayList<List<JsonNode>>();
    JsonParser parser = factory.createJsonParser(s);
    try {
      JsonNode root = parser.readValueAsTree();
      if (! root.isArray()) {
        // This handles default cases like CSV and XML
        // (and eventually the others when bugs are fixed)
        JsonNode fieldSet = root.get("fields");

        // Take care of strange parser case
        if (fieldSet.isArray() && fieldSet.get(0).get("name").toString().equals("\"row\"")) {
          fieldSet = fieldSet.get(0).get("type").get(0).get("fields");
        }

        // Emit results
        List<JsonNode> curListOfSchemaElts = new ArrayList<JsonNode>();
        listOfSchemaElts.add(curListOfSchemaElts);
        for (Iterator<JsonNode> it = fieldSet.getElements(); it.hasNext(); ) {
          curListOfSchemaElts.add(it.next());
        }
      } else {
        for (int i = 0; i < root.size(); i++) {
          List<JsonNode> curListOfSchemaElts = new ArrayList<JsonNode>();             
          JsonNode fieldSet = root.get(i).get("fields");
          listOfSchemaElts.add(curListOfSchemaElts);
          for (Iterator<JsonNode> it = fieldSet.getElements(); it.hasNext(); ) {
            curListOfSchemaElts.add(it.next());
          }
        }
      }
    } finally {
      parser.close();
    }
    return listOfSchemaElts;
  }
 
  final class SchemaPageDisplay extends WebMarkupContainer {
    public SchemaPageDisplay(String name, String schemaidStr) {
      super(name);
      FishEye fe = FishEye.getInstance();

      if (fe.hasFSAndCrawl()) {
        List<List<JsonNode>> listOfSchemaElts = new ArrayList<List<JsonNode>>();
        long numFilesWithSchema = -1;
        String schemaDescription = "";
        if (schemaidStr != null) {
          try {
            long schemaId = Long.parseLong(schemaidStr);
            SchemaSummary ss = new SchemaSummary(fe.getAnalyzer(), schemaId);
            if (ss.getIdentifier().length() > 0) {
              listOfSchemaElts = getSchemaDigest(ss.getIdentifier());
            } else {
              listOfSchemaElts = new ArrayList<List<JsonNode>>();
            }
            schemaDescription = ss.getDesc();
            numFilesWithSchema = fe.getAnalyzer().countFilesForSchema(schemaId);
          } catch (NumberFormatException nfe) {
            nfe.printStackTrace();
          } catch (IOException ie) {
            ie.printStackTrace();           
          }
        }

        add(new ListView<List<JsonNode>>("biglistview", listOfSchemaElts) {
          protected void populateItem(ListItem<List<JsonNode>> item) {     
            List<JsonNode> myListOfSchemaElts = item.getModelObject();
       
            ListView<JsonNode> listview = new ListView<JsonNode>("listview", myListOfSchemaElts) {
              protected void populateItem(ListItem<JsonNode> item2) {
                JsonNode jnode = item2.getModelObject();
       
                item2.add(new Label("fieldname", "" + jnode.get("name")));
                item2.add(new Label("fieldtype", "" + jnode.get("type")));
                item2.add(new Label("fielddoc", "" + jnode.get("doc")));
              }
            };
            item.add(listview);
          }
          });

        add(new Label("schemaDesc", schemaDescription));
        int numElts = 0;
        for (List<JsonNode> sublist: listOfSchemaElts) {
          for (JsonNode jn: sublist) {
            numElts++;
          }
        }
        add(new Label("numSchemaElements", "" + numElts));
        add(new Label("numFilesWithSchema", "" + numFilesWithSchema));
      }
     
      setOutputMarkupPlaceholderTag(true);
      setVisibilityAllowed(false);
    }
    public void onConfigure() {
      FishEye fe = FishEye.getInstance();
      setVisibilityAllowed(fe.hasFSAndCrawl());
    }
  }

  public SchemaPage() {
    add(new SettingsWarningBox());
    add(new CrawlWarningBox());           
    add(new SchemaPageDisplay("currentSchemaDisplay", ""));
  }

  public SchemaPage(PageParameters params) {
    add(new SettingsWarningBox());
    add(new CrawlWarningBox());           
    add(new SchemaPageDisplay("currentSchemaDisplay", params.get("schemaid").toString()));
 
}
TOP

Related Classes of com.cloudera.recordbreaker.fisheye.SchemaPage$SchemaPageDisplay

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.