Редактор Eclipse плагин: “ОШИБКА”, когда вводный файл вне проекта

var select = document.getElementById("year");
var options = ["2018", "2019"];

for (var i = 0; i < options.length; i++) {
  var opt = options[i];
  var el = document.createElement("option");
  el.textContent = opt;
  el.value = opt;
  select.appendChild(el);
}

// get the table.
var table = document.getElementById("table");

// Read data for sorting and filtering
// ---------------------------------------

// iterate through the rows of the table.
var rows = table.getElementsByTagName("tr");
for (var i = 0; i < rows.length; i++) {

  var tr = rows[i];

  // temp vars for filtering/sorting table.
  var year = NaN;
  var month = NaN;
  var day = NaN;
  var hour = NaN;

  // iterate through columns for data/time data.
  var cols = tr.getElementsByTagName("td");
  for (var j = 0; j < cols.length; j++) {

    // get the contents of the cell.
    var td = cols[j];
    var contents = td.innerText;

    // check if contents contains date.
    var dateResult = contents.match(/([0-9]{2})[\/]{1}([0-9]{2})[\/]{1}([0-9]{4})/m);
    // if match, collect year, month, day values.
    if (dateResult != null && 0 < dateResult.length) {

      year = parseInt(dateResult[3]);
      month = parseInt(dateResult[2]);
      day = parseInt(dateResult[1]);

    } else { // only check the time if content is not a "date".

      // check if contents contains time.
      var timeResult = contents.match(/([0-9]{2}):[0-9]{2}h/m);
      // if match, collect hour value.
      if( timeResult != null && 0 < timeResult.length) {
        hour = parseInt(timeResult[1]);
      }

    }

    // break the loop if necessary data has been collected.
    if (!isNaN(year) && !isNaN(month) && !isNaN(day) && !isNaN(hour)) {
      break;
    }

  }

  // create a value for sorting.
  var sort = year * 1000000 + month * 10000 + day * 100 + hour;

  // set sorting and filtering (year) data on row.
  tr.setAttribute('data-sort', sort);
  tr.setAttribute('data-year', year);

}

// Sort the rows by Year/Month/Date/Hour
// ---------------------------------------

// convert rows (NodeList) to Array.
var rowsArray = Array.prototype.slice.call(rows);

// sort the rows array by "sort" value on elments.
rowsArray.sort(function(a, b) {
  return a.dataset.sort - b.dataset.sort;
});

// get the table body.
var tbody = table.getElementsByTagName("tbody")[0];

// reorder rows in table.
for (var i = 0; i < rowsArray.length; i++) {
  
  var row = rowsArray[i];
  
  tbody.removeChild(row);
  tbody.appendChild(row);
  
}

// Add filter event listener to select
// ---------------------------------------

var filterRows = function() {

  // get the selected year.
  var year = parseInt(this.options[this.selectedIndex].value);

  // iterate table rows. show/hide as needed.
  for (var i = 0; i < rows.length; i++) {

    var tr = rows[i];

    if( 0 < year && tr.dataset.year != year ) {
      tr.style.display = "none";
    } else {
      tr.style.display = "table-row";
    }

  }

};

// apply year filter on select change event.
select.addEventListener("change", filterRows);

// optionally call filterRows(); to initialize table sorting.
// filterRows();
<select id="year">
  <!-- added blank option to allow for first year to be selected on load -->
  <option>----</option>
</select>

<table id="table">
  <tbody>
    <tr>
      <td>06/05/2018</td>
      <td>16:00h</td>
      <td>Chris</td>
    </tr>

    <tr>
      <td>24/10/2019</td>
      <td>20:00h</td>
      <td>Alex</td>
    </tr>

    <tr>
      <td>11/03/2018</td>
      <td>15:00h</td>
      <td>Dani</td>
    </tr>

    <tr>
      <td>08/04/2019</td>
      <td>12:30h</td>
      <td>Joe</td>
    </tr>

    <tr>
      <td>22/04/2018</td>
      <td>10:30h</td>
      <td>Mike</td>
    </tr>
  </tbody>
</table>

8
задан Michael Borgwardt 26 January 2009 в 22:05
поделиться

3 ответа

Я имел тот же probleam и наконец нашел решение, работающее на меня. Необходимо предоставить 2 различным поставщикам документа - сначала расширяющийся FileDocumentProvider для файлов в инструментальных средствах и второй расширяющийся TextFileDocumentProvider для других ресурсов вне рабочей области. Затем Вы регистрируете правильного поставщика соответственно к входу в Ваших редакторах doSetInput метод как это:

private IDocumentProvider createDocumentProvider(IEditorInput input) {
    if(input instanceof IFileEditorInput){
        return new XMLTextDocumentProvider();
    } else if(input instanceof IStorageEditorInput){
        return new XMLFileDocumentProvider();
    } else {
        return new XMLTextDocumentProvider();
    }
}

@Override
protected final void doSetInput(IEditorInput input) throws CoreException {
    setDocumentProvider(createDocumentProvider(input));
    super.doSetInput(input);
}

затем в Вашем новом поставщике документа (расширяющий TextFileDocumentProvider) вставляют что-то как это:

protected FileInfo createFileInfo(Object element) throws CoreException {
        FileInfo info = super.createFileInfo(element);
        if(info==null){
            info = createEmptyFileInfo();
        }
        IDocument document = info.fTextFileBuffer.getDocument();
        if (document != null) {

            /* register your partitioner and other things here 
                       same way as in your fisrt document provider */
        }
        return info;
    }

Это работает на меня :) Наконец я должен упомянуть, что я не так умен и что я скопировал это решение с Amateras проекта (Плагин редактора HTML с открытым исходным кодом для затмения)

9
ответ дан 5 December 2019 в 15:27
поделиться

Я немного вдали от исходного кода в данный момент, хотя я подозреваю, что проблемой является a ClassCastException:

  • Для файла рабочей области, IEditorInput org.eclipse.ui.IFileEditorInput.
  • Для локального файла нерабочей области, IEditorInput org.eclipse.ui.IStorageEditorInput

Различие находится в том, как Вы получаете содержание от IEditorInput. JDT делает явное instanceof проверьте для переключений.

Я не думаю что getAdapter(Class clazz) возвратит a java.io.InputStream если Вы предлагаете его.

Я не вполне понимаю, почему они делают это как это, но это чувствует себя ужасным.

Править: Более общая точка об отладке затмевает приложения - действительно очень полезно попытаться собрать все Ваши журналы в одно место (т.е. консоль).

Чтобы сделать это, удостоверьтесь, что Вы используете параметры командной строки -console и -consoleLog. Последний помог сохранить бесчисленные часы времени. Если Вы уже не имеете, изучаете самые основные вещи о том, как использовать консоль (ss и start мой чаще всего используется). Это сэкономит еще некоторое время, диагностируя определенный класс проблемы.

2
ответ дан 5 December 2019 в 15:27
поделиться

Вы пытались создать файл JAVA с помощью редактора вне рабочей области?

При вызове редактора с путем к файлу, concat "file://" в начале файла path.e.g: если путь является C://временный файл//Sample.java, то измените его как file://C://temp//Sample.java.

0
ответ дан 5 December 2019 в 15:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: