Package edu.isi.karma.controller.update

Source Code of edu.isi.karma.controller.update.WorksheetDataUpdate

/*******************************************************************************
* 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.controller.update;

import java.io.PrintWriter;
import java.util.List;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import edu.isi.karma.controller.command.selection.SuperSelection;
import edu.isi.karma.rep.Node;
import edu.isi.karma.rep.Row;
import edu.isi.karma.rep.Table;
import edu.isi.karma.rep.TablePager;
import edu.isi.karma.rep.Worksheet;
import edu.isi.karma.view.VHNode;
import edu.isi.karma.view.VWorksheet;
import edu.isi.karma.view.VWorkspace;
import edu.isi.karma.view.ViewPreferences.ViewPreference;

public class WorksheetDataUpdate extends AbstractUpdate {

  private final String worksheetId;
  private static Logger logger = LoggerFactory.getLogger(WorksheetDataUpdate.class);
  private final SuperSelection selection;
  private enum JsonKeys {
    worksheetId, rows, columnName, characterLength, hasNestedTable, columnClass,
    displayValue, expandedValue, nestedRows, additionalRowsCount, tableId,
    nodeId, rowId, isSelected, rowValueArray
  }

  public WorksheetDataUpdate(String worksheetId, SuperSelection selection) {
    super();
    this.worksheetId = worksheetId;
    this.selection = selection;
  }

  @Override
  public void generateJson(String prefix, PrintWriter pw, VWorkspace vWorkspace) {
    VWorksheet vWorksheet =  vWorkspace.getViewFactory().getVWorksheetByWorksheetId(worksheetId);

    try {
      JSONObject response = new JSONObject();
      response.put(JsonKeys.worksheetId.name(), worksheetId);
      response.put(AbstractUpdate.GenericJsonKeys.updateType.name(),
          this.getClass().getSimpleName());

      Worksheet wk = vWorksheet.getWorksheet();
      Table dataTable = wk.getDataTable();
      TablePager pager = vWorksheet.getTopTablePager();

      JSONArray rows = getRowsUsingPager(
          pager, vWorksheet,
          vWorksheet.getHeaderViewNodes(), vWorkspace.getPreferences().getIntViewPreferenceValue(
              ViewPreference.maxCharactersInCell));
      int rowsLeft = dataTable.getNumRows() - rows.length();
      rowsLeft = rowsLeft < 0 ? 0 : rowsLeft;
      response.put(JsonKeys.additionalRowsCount.name(), rowsLeft);
      response.put(JsonKeys.tableId.name(), dataTable.getId());
      response.put(JsonKeys.rows.name(), rows);

      pw.println(response.toString());
    } catch (JSONException e) {
      logger.error("JSONException", e);
    }
  }

  private JSONArray getRowsUsingPager(TablePager pager, VWorksheet vWorksheet, List<VHNode> orderedHnodeIds, int maxDataDisplayLength) throws JSONException {
    return getRowsJsonArray(pager.getRows(),vWorksheet,  orderedHnodeIds, maxDataDisplayLength);
  }

  public JSONArray getRowsJsonArray(List<Row> rows, VWorksheet vWorksheet, List<VHNode> orderedHnodeIds,
      int maxDataDisplayLength) throws JSONException {
    JSONArray rowsArr = new JSONArray();

    for (Row row:rows) {
      JSONObject rowObj = new JSONObject();
      JSONArray rowValueArray = new JSONArray();
      rowObj.put(JsonKeys.rowId.name(), row.getId());
      rowObj.put(JsonKeys.isSelected.name(), selection.isSelected(row));
      rowObj.put(JsonKeys.rowValueArray.name(), rowValueArray);
      for (VHNode vNode : orderedHnodeIds) {
        if(vNode.isVisible()) {
          Node rowNode = row.getNode(vNode.getId());
          JSONObject nodeObj = new JSONObject();
          nodeObj.put(JsonKeys.columnClass.name(),
              WorksheetHeadersUpdate.getColumnClass(vNode.getId()));
          nodeObj.put(JsonKeys.nodeId.name(), rowNode.getId());

          if (vNode.hasNestedTable()) {
            nodeObj.put(JsonKeys.hasNestedTable.name(), true);
            Table nestedTable = rowNode.getNestedTable();
            JSONArray nestedTableRows = getRowsUsingPager(
                vWorksheet.getNestedTablePager(nestedTable),
                vWorksheet,
                vNode.getNestedNodes(),
                maxDataDisplayLength);
            nodeObj.put(JsonKeys.nestedRows.name(), nestedTableRows);
            nodeObj.put(JsonKeys.tableId.name(), rowNode.getNestedTable().getId());

            int rowsLeft = nestedTable.getNumRows() - nestedTableRows.length();
            rowsLeft = rowsLeft < 0 ? 0 : rowsLeft;
            nodeObj.put(JsonKeys.additionalRowsCount.name(), rowsLeft);

          } else {
            String nodeVal = rowNode.getValue().asString();
            nodeVal = (nodeVal == null) ? "" : nodeVal;
            String displayVal = (nodeVal.length() > maxDataDisplayLength)
                ? nodeVal.substring(0, maxDataDisplayLength) + "..." : nodeVal;
            nodeObj.put(JsonKeys.displayValue.name(), displayVal);
            nodeObj.put(JsonKeys.expandedValue.name(), nodeVal);
            nodeObj.put(JsonKeys.hasNestedTable.name(), false);
          }
          rowValueArray.put(nodeObj);
        }
      }
      rowsArr.put(rowObj);
    }
    return rowsArr;
  }

  public boolean equals(Object o) {
    if (o instanceof WorksheetDataUpdate) {
      WorksheetDataUpdate t = (WorksheetDataUpdate)o;
      return t.worksheetId.equals(worksheetId);
    }
    return false;
  }
}
TOP

Related Classes of edu.isi.karma.controller.update.WorksheetDataUpdate

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.