org.rstudio.studio.client.workbench.views.output.find.FindOutputCodec.java Source code

Java tutorial

Introduction

Here is the source code for org.rstudio.studio.client.workbench.views.output.find.FindOutputCodec.java

Source

/*
 * FindOutputCodec.java
 *
 * Copyright (C) 2009-12 by RStudio, Inc.
 *
 * Unless you have received this program directly from RStudio pursuant
 * to the terms of a commercial license agreement with RStudio, then
 * this program is licensed to you under the terms of version 3 of the
 * GNU Affero General Public License. This program is distributed WITHOUT
 * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,
 * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the
 * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.
 *
 */
package org.rstudio.studio.client.workbench.views.output.find;

import com.google.gwt.dom.client.Document;
import com.google.gwt.dom.client.TableCellElement;
import com.google.gwt.dom.client.TableRowElement;
import org.rstudio.core.client.CodeNavigationTarget;
import org.rstudio.core.client.FilePosition;
import org.rstudio.core.client.widget.HeaderBreaksItemCodec;
import org.rstudio.studio.client.workbench.views.output.find.FindOutputResources.Styles;
import org.rstudio.studio.client.workbench.views.output.find.model.FindResult;

public class FindOutputCodec extends HeaderBreaksItemCodec<FindResult, CodeNavigationTarget, Object> {
    public FindOutputCodec(FindOutputResources resources) {
        styles_ = resources.styles();
    }

    @Override
    public TableRowElement getRowForItem(FindResult entry) {
        if (entry == null) {
            // Overflow message
            TableRowElement tr = Document.get().createTRElement();
            TableCellElement td = Document.get().createTDElement();
            td.setClassName(styles_.overflowWarning());
            td.setColSpan(2);
            td.setInnerText("More than 1000 matching lines were found. " + "Only the first 1000 lines are shown.");
            tr.appendChild(td);
            return tr;
        }

        TableRowElement tr = Document.get().createTRElement();
        tr.setAttribute(DATA_FILE, entry.getFile());
        tr.setAttribute(DATA_LINE, entry.getLine() + "");

        TableCellElement td1 = Document.get().createTDElement();
        td1.setClassName(styles_.line());
        td1.setInnerText(entry.getLine() + ":\u00A0");
        tr.appendChild(td1);

        TableCellElement td2 = Document.get().createTDElement();
        td2.setClassName(styles_.lineValue());
        td2.setInnerHTML(entry.getLineHTML().asString());
        tr.appendChild(td2);

        return tr;
    }

    @Override
    protected boolean needsBreak(TableRowElement prevRow, TableRowElement row) {
        if (!row.hasAttribute(DATA_FILE))
            return false;

        return prevRow == null || !prevRow.getAttribute(DATA_FILE).equals(row.getAttribute(DATA_FILE));
    }

    @Override
    protected int addBreak(TableRowElement row) {
        TableRowElement tr = Document.get().createTRElement();
        tr.setClassName(styles_.headerRow());

        TableCellElement td = Document.get().createTDElement();
        td.setColSpan(2);
        td.setInnerText(row.getAttribute(DATA_FILE));
        tr.appendChild(td);

        row.getParentElement().insertBefore(tr, row);
        return 1;
    }

    @Override
    public CodeNavigationTarget getOutputForRow(TableRowElement row) {
        String file = row.getAttribute(DATA_FILE);
        int line = Integer.parseInt(row.getAttribute(DATA_LINE));

        return new CodeNavigationTarget(file, FilePosition.create(line, 1));
    }

    @Override
    public Object getOutputForRow2(TableRowElement row) {
        return null;
    }

    @Override
    public boolean isValueRow(TableRowElement row) {
        return row.hasAttribute(DATA_FILE);
    }

    @Override
    public boolean hasNonValueRows() {
        return true;
    }

    private Styles styles_;

    private static final String DATA_FILE = "data-file";
    private static final String DATA_LINE = "data-line";
}