From bb83dcda1c8b42d65911fca0d9c6810b93df05fd Mon Sep 17 00:00:00 2001 From: David Huynh Date: Wed, 24 Feb 2010 18:52:54 +0000 Subject: [PATCH] Added support for specifying number of initial rows to skip when creating a new project. Fixed the height of the histogram images in range facets to eliminate jitters. git-svn-id: http://google-refine.googlecode.com/svn/trunk@135 7d457c2a-affb-35e4-300a-418c747d4874 --- .../commands/edit/CreateProjectCommand.java | 22 +++++++--- .../gridworks/importers/ExcelImporter.java | 17 +++++--- .../metaweb/gridworks/importers/Importer.java | 4 +- .../gridworks/importers/TsvCsvImporter.java | 21 ++++++---- src/main/webapp/index.html | 4 +- src/main/webapp/scripts/index.js | 41 +++++++++++-------- src/main/webapp/styles/browsing.css | 1 + src/main/webapp/styles/index.css | 1 + 8 files changed, 69 insertions(+), 42 deletions(-) diff --git a/src/main/java/com/metaweb/gridworks/commands/edit/CreateProjectCommand.java b/src/main/java/com/metaweb/gridworks/commands/edit/CreateProjectCommand.java index c7564a6b5..289c148a8 100644 --- a/src/main/java/com/metaweb/gridworks/commands/edit/CreateProjectCommand.java +++ b/src/main/java/com/metaweb/gridworks/commands/edit/CreateProjectCommand.java @@ -90,6 +90,8 @@ public class CreateProjectCommand extends Command { String url = null; int limit = -1; + int skip = 0; + if (options.containsKey("limit")) { String s = options.getProperty("limit"); try { @@ -97,6 +99,13 @@ public class CreateProjectCommand extends Command { } catch (Exception e) { } } + if (options.containsKey("skip")) { + String s = options.getProperty("skip"); + try { + skip = Integer.parseInt(s); + } catch (Exception e) { + } + } while ((part = parser.readNextPart()) != null) { @@ -108,14 +117,14 @@ public class CreateProjectCommand extends Command { if (importer.takesReader()) { Reader reader = new InputStreamReader(filePart.getInputStream()); try { - importer.read(reader, project, options, limit); + importer.read(reader, project, options, skip, limit); } finally { reader.close(); } } else { InputStream inputStream = filePart.getInputStream(); try { - importer.read(inputStream, project, options, limit); + importer.read(inputStream, project, options, skip, limit); } finally { inputStream.close(); } @@ -126,7 +135,7 @@ public class CreateProjectCommand extends Command { if (paramName.equals("raw-text")) { StringReader reader = new StringReader(paramPart.getStringValue()); try { - new TsvCsvImporter().read(reader, project, options, limit); + new TsvCsvImporter().read(reader, project, options, skip, limit); } finally { reader.close(); } @@ -139,7 +148,7 @@ public class CreateProjectCommand extends Command { } if (url != null && url.length() > 0) { - internalImportURL(request, project, options, url, limit); + internalImportURL(request, project, options, url, skip, limit); } } } @@ -149,6 +158,7 @@ public class CreateProjectCommand extends Command { Project project, Properties options, String urlString, + int skip, int limit ) throws Exception { URL url = new URL(urlString); @@ -182,9 +192,9 @@ public class CreateProjectCommand extends Command { Reader reader = new InputStreamReader( inputStream, (encoding == null) ? "ISO-8859-1" : encoding); - importer.read(reader, project, options, limit); + importer.read(reader, project, options, skip, limit); } else { - importer.read(inputStream, project, options, limit); + importer.read(inputStream, project, options, skip, limit); } } finally { inputStream.close(); diff --git a/src/main/java/com/metaweb/gridworks/importers/ExcelImporter.java b/src/main/java/com/metaweb/gridworks/importers/ExcelImporter.java index 8e2ad744f..b9f2f99b7 100644 --- a/src/main/java/com/metaweb/gridworks/importers/ExcelImporter.java +++ b/src/main/java/com/metaweb/gridworks/importers/ExcelImporter.java @@ -29,14 +29,14 @@ public class ExcelImporter implements Importer { return false; } - public void read(Reader reader, Project project, Properties options, int limit) + public void read(Reader reader, Project project, Properties options, int skip, int limit) throws Exception { throw new NotImplementedException(); } public void read(InputStream inputStream, Project project, - Properties options, int limit) throws Exception { + Properties options, int skip, int limit) throws Exception { Workbook wb = _xmlBased ? new XSSFWorkbook(inputStream) : @@ -99,6 +99,7 @@ public class ExcelImporter implements Importer { /* * Now process the data rows */ + int rowsWithData = 0; for (; r <= lastRow; r++) { org.apache.poi.ss.usermodel.Row row = sheet.getRow(r); if (row == null) { @@ -149,10 +150,14 @@ public class ExcelImporter implements Importer { } if (hasData) { - project.rows.add(newRow); - if (limit > 0 && project.rows.size() >= limit) { - break; - } + rowsWithData++; + + if (skip <= 0 || rowsWithData > skip) { + project.rows.add(newRow); + if (limit > 0 && project.rows.size() >= limit) { + break; + } + } } } } diff --git a/src/main/java/com/metaweb/gridworks/importers/Importer.java b/src/main/java/com/metaweb/gridworks/importers/Importer.java index da6ae2f34..af3e645c6 100644 --- a/src/main/java/com/metaweb/gridworks/importers/Importer.java +++ b/src/main/java/com/metaweb/gridworks/importers/Importer.java @@ -9,6 +9,6 @@ import com.metaweb.gridworks.model.Project; public interface Importer { public boolean takesReader(); - public void read(Reader reader, Project project, Properties options, int limit) throws Exception; - public void read(InputStream inputStream, Project project, Properties options, int limit) throws Exception; + public void read(Reader reader, Project project, Properties options, int skip, int limit) throws Exception; + public void read(InputStream inputStream, Project project, Properties options, int skip, int limit) throws Exception; } diff --git a/src/main/java/com/metaweb/gridworks/importers/TsvCsvImporter.java b/src/main/java/com/metaweb/gridworks/importers/TsvCsvImporter.java index def3c0545..d146616f5 100644 --- a/src/main/java/com/metaweb/gridworks/importers/TsvCsvImporter.java +++ b/src/main/java/com/metaweb/gridworks/importers/TsvCsvImporter.java @@ -13,7 +13,7 @@ import com.metaweb.gridworks.model.Row; public class TsvCsvImporter implements Importer { - public void read(Reader reader, Project project, Properties options, int limit) + public void read(Reader reader, Project project, Properties options, int skip, int limit) throws Exception { LineNumberReader lnReader = new LineNumberReader(reader); @@ -23,6 +23,7 @@ public class TsvCsvImporter implements Importer { boolean first = true; int cellCount = 1; + int rowsWithData = 0; while ((line = lnReader.readLine()) != null) { if (line.trim().length() == 0) { continue; @@ -57,12 +58,16 @@ public class TsvCsvImporter implements Importer { Row row = new Row(cellCount); if ((sep.charAt(0) == ',') ? ImporterUtilities.parseCSVIntoRow(row, line) : ImporterUtilities.parseTSVIntoRow(row, line)) { - project.rows.add(row); - project.columnModel.setMaxCellIndex(Math.max(project.columnModel.getMaxCellIndex(), row.cells.size())); - - if (limit > 0 && project.rows.size() >= limit) { - break; - } + rowsWithData++; + + if (skip <= 0 || rowsWithData > skip) { + project.rows.add(row); + project.columnModel.setMaxCellIndex(Math.max(project.columnModel.getMaxCellIndex(), row.cells.size())); + + if (limit > 0 && project.rows.size() >= limit) { + break; + } + } } } } @@ -72,7 +77,7 @@ public class TsvCsvImporter implements Importer { } public void read(InputStream inputStream, Project project, - Properties options, int limit) throws Exception { + Properties options, int skip, int limit) throws Exception { throw new NotImplementedException(); } diff --git a/src/main/webapp/index.html b/src/main/webapp/index.html index ca822fa2a..3191d15b9 100644 --- a/src/main/webapp/index.html +++ b/src/main/webapp/index.html @@ -1,3 +1 @@ - Gridworks - -

New Project

Create a new project by uploading a tab-separated value or comma-separated value file.

Project Name:
Project Password:
optional, not protected, so use some password you don't care to reveal
Upload File:
Load up to: rows
\ No newline at end of file + Gridworks

New Project

Create a new project by uploading a tab-separated value or comma-separated value file.

Project Name:
Project Password:
optional, not protected, so use some password you don't care to reveal
Upload File:
Skip: initial data rows
Load up to: data rows
\ No newline at end of file diff --git a/src/main/webapp/scripts/index.js b/src/main/webapp/scripts/index.js index 62223c38c..108662116 100644 --- a/src/main/webapp/scripts/index.js +++ b/src/main/webapp/scripts/index.js @@ -19,19 +19,15 @@ function onClickUploadFileButton(evt) { evt.preventDefault(); return false; } else { - $("#file-upload-form").attr("action", "/command/create-project-from-upload?limit=" + $("#limit-input")[0].value); + $("#file-upload-form").attr("action", + "/command/create-project-from-upload?" + [ + "skip=" + $("#skip-input")[0].value, + "limit=" + $("#limit-input")[0].value + ].join("&")); } } function renderProjects(data) { - var container = $("#projects").empty(); - - $('

').text("Projects").appendTo(container); - - var table = $('
last modified
') - .attr("cellspacing", "5") - .appendTo(container)[0]; - var projects = []; for (var n in data.projects) { if (data.projects.hasOwnProperty(n)) { @@ -41,16 +37,27 @@ function renderProjects(data) { projects.push(project); } } - projects.sort(function(a, b) { return b.date.getTime() - a.date.getTime(); }); - for (var i = 0; i < projects.length; i++) { - var project = projects[i]; - var tr = table.insertRow(table.rows.length); - var td0 = tr.insertCell(0); - var td1 = tr.insertCell(1); + if (projects.length > 0) { + projects.sort(function(a, b) { return b.date.getTime() - a.date.getTime(); }); - $('').text(project.name).attr("href", "/project.html?project=" + project.id).appendTo(td0); - $('').text(formatDate(project.date)).appendTo(td1); + var container = $("#projects").empty().show(); + + $('

').text("Projects").appendTo(container); + + var table = $('
last modified
') + .attr("cellspacing", "5") + .appendTo(container)[0]; + + for (var i = 0; i < projects.length; i++) { + var project = projects[i]; + var tr = table.insertRow(table.rows.length); + var td0 = tr.insertCell(0); + var td1 = tr.insertCell(1); + + $('').text(project.name).attr("href", "/project.html?project=" + project.id).appendTo(td0); + $('').text(formatDate(project.date)).appendTo(td1); + } } } diff --git a/src/main/webapp/styles/browsing.css b/src/main/webapp/styles/browsing.css index 3a41b48af..a2846caaf 100644 --- a/src/main/webapp/styles/browsing.css +++ b/src/main/webapp/styles/browsing.css @@ -76,6 +76,7 @@ a.facet-choice-link:hover { overflow: hidden; } .facet-range-histogram img { + height: 50px; position: relative; left: -2px; } diff --git a/src/main/webapp/styles/index.css b/src/main/webapp/styles/index.css index f98c0024f..ddf2adfdc 100644 --- a/src/main/webapp/styles/index.css +++ b/src/main/webapp/styles/index.css @@ -4,6 +4,7 @@ border: 1px solid #ccc; background: #fffee0; padding: 20px; + display: none; } #file-upload-form > table > tbody > tr > td {