From 0666f48020d87c98d3ab1f751cc913d421cb0115 Mon Sep 17 00:00:00 2001 From: George Lindholm <66577321+gnl42@users.noreply.github.com> Date: Tue, 12 Dec 2023 23:08:35 -0800 Subject: [PATCH] Tycho 4, Java 17, Eclipse 2023-06 #16 --- .mvn/extensions.xml | 2 +- csvedit.feature/feature.xml | 15 +- csvedit.plugin.ui/META-INF/MANIFEST.MF | 2 +- csvedit.plugin.ui/build.properties | 3 +- csvedit.plugin.ui/lib/javacsv.jar | Bin 13580 -> 0 bytes csvedit.plugin/.gitignore | 3 +- csvedit.plugin/META-INF/MANIFEST.MF | 6 +- csvedit.plugin/build.properties | 7 +- csvedit.plugin/lib/javacsv.jar | Bin 13580 -> 0 bytes .../csvedit/model/AbstractCSVFile.java | 172 ++++----- csvedit.site/pom.xml | 22 +- csvedit.target/csvedit.target | 24 ++ csvedit.target/pom.xml | 13 + pom.xml | 354 +++++++++++++----- 14 files changed, 415 insertions(+), 208 deletions(-) delete mode 100644 csvedit.plugin.ui/lib/javacsv.jar delete mode 100644 csvedit.plugin/lib/javacsv.jar create mode 100644 csvedit.target/csvedit.target create mode 100644 csvedit.target/pom.xml diff --git a/.mvn/extensions.xml b/.mvn/extensions.xml index 12e63a2..ecfbd8f 100644 --- a/.mvn/extensions.xml +++ b/.mvn/extensions.xml @@ -3,6 +3,6 @@ org.eclipse.tycho.extras tycho-pomless - 1.0.0 + 4.0.4 diff --git a/csvedit.feature/feature.xml b/csvedit.feature/feature.xml index 24e93c0..fc2bde1 100644 --- a/csvedit.feature/feature.xml +++ b/csvedit.feature/feature.xml @@ -52,17 +52,14 @@ permissions and limitations under the License. + version="0.0.0"/> + version="0.0.0"/> + + diff --git a/csvedit.plugin.ui/META-INF/MANIFEST.MF b/csvedit.plugin.ui/META-INF/MANIFEST.MF index 2097de5..6ef4487 100644 --- a/csvedit.plugin.ui/META-INF/MANIFEST.MF +++ b/csvedit.plugin.ui/META-INF/MANIFEST.MF @@ -5,6 +5,6 @@ Bundle-SymbolicName: org.fhsolution.eclipse.plugins.csvedit.ui;singleton:=true Bundle-Version: 1.2.0 Bundle-Vendor: www.fhsolution.com Fragment-Host: org.fhsolution.eclipse.plugins.csvedit;bundle-version="1.2.0" -Bundle-RequiredExecutionEnvironment: J2SE-1.5 +Bundle-RequiredExecutionEnvironment: JavaSE-17 Require-Bundle: org.eclipse.ui.ide, org.eclipse.core.resources diff --git a/csvedit.plugin.ui/build.properties b/csvedit.plugin.ui/build.properties index 1cbc97d..e3023e1 100644 --- a/csvedit.plugin.ui/build.properties +++ b/csvedit.plugin.ui/build.properties @@ -2,5 +2,4 @@ source.. = src/ output.. = bin/ bin.includes = META-INF/,\ .,\ - fragment.xml,\ - lib/ + fragment.xml diff --git a/csvedit.plugin.ui/lib/javacsv.jar b/csvedit.plugin.ui/lib/javacsv.jar deleted file mode 100644 index 75f404d48ef6f157baffa01f21a5fc545aeb31fe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13580 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 - listeners = new ArrayList(); - header = new ArrayList(); + rows = new ArrayList<>(); + listeners = new ArrayList<>(); + header = new ArrayList<>(); } // TODO : all abstract methods should be moved to a specific interface /** * Check if first line in the file will be considered as the file header + * * @return true if the first line in the file represents the header */ public abstract boolean isFirstLineHeader(); /** * Check search in the text must be case sensitive + * * @return true if the search must be case sensitive. */ public abstract boolean getSensitiveSearch(); /** * Get custom delimiter to use as a separator + * * @return the delimiter */ public abstract char getCustomDelimiter(); /** * Get the character that defines comment lines - * @return the comment line starting character. If no comments are allowed in this - * file, then Character.UNASSIGNED constant must be returned; + * + * @return the comment line starting character. If no comments are allowed in + * this file, then Character.UNASSIGNED constant must be returned; * */ public abstract char getCommentChar(); /** * Get custom text qualifier to use as a text qualifier in the data + * * @return the text qualifier character to use as a text qualifier in the data */ public abstract char getTextQualifier(); /** * check if the text qualifier has to be use for all fields or not + * * @return true if the text qualifier is to be used for all data fields */ public abstract boolean useQualifier(); /** * Get the delimiter used to separate different values in a same csv cell + * * @return the delimiter used to separate values */ public abstract String getInCellDelimiter(); - + /** - * Get the pattern to identify a column header where values can be splitted with the inCellDelimiter - * and displayed in a table instead of a textfield + * Get the pattern to identify a column header where values can be splitted with + * the inCellDelimiter and displayed in a table instead of a textfield + * * @return the regex */ public abstract String getRegexTableMarker(); @@ -104,14 +112,14 @@ public AbstractCSVFile() { /** * @param text */ - public void setInput(String text) { + public void setInput(final String text) { readLines(text); } /** * @param display */ - public void displayFirstLine(boolean display) { + public void displayFirstLine(final boolean display) { displayFirstLine = display; } @@ -119,14 +127,13 @@ public void displayFirstLine(boolean display) { * @param reader * @return */ - protected CsvReader initializeReader (Reader reader) - { - CsvReader csvReader = new CsvReader(reader); + protected CsvReader initializeReader(final Reader reader) { + final CsvReader csvReader = new CsvReader(reader); - char customDelimiter = getCustomDelimiter(); + final char customDelimiter = getCustomDelimiter(); csvReader.setDelimiter(customDelimiter); - char commentChar = getCommentChar(); + final char commentChar = getCommentChar(); if (commentChar != Character.UNASSIGNED) { csvReader.setComment(commentChar); // prevent loss of comment in csv source file @@ -142,11 +149,11 @@ protected CsvReader initializeReader (Reader reader) /** * @param fileText */ - protected void readLines(String fileText) { + protected void readLines(final String fileText) { rows.clear(); try { - CsvReader csvReader = initializeReader(new StringReader(fileText)); + final CsvReader csvReader = initializeReader(new StringReader(fileText)); // case when the first line is the encoding if (!displayFirstLine) { csvReader.skipLine(); @@ -154,16 +161,15 @@ protected void readLines(String fileText) { boolean setHeader = false; while (csvReader.readRecord()) { - String[] rowValues = csvReader.getValues(); - CSVRow csvRow = new CSVRow(rowValues, this); + final String[] rowValues = csvReader.getValues(); + final CSVRow csvRow = new CSVRow(rowValues, this); if (!rowValues[0].startsWith(String.valueOf(getCommentChar()))) { if (isFirstLineHeader() && !setHeader) { setHeader = true; csvRow.setHeader(true); populateHeaders(rowValues); } - } - else { + } else { csvRow.setCommentLine(true); } rows.add(csvRow); @@ -178,7 +184,7 @@ protected void readLines(String fileText) { } csvReader.close(); - } catch (Exception e) { + } catch (final Exception e) { System.out.println("exception in readLines " + e); e.printStackTrace(); } @@ -190,17 +196,17 @@ protected void readLines(String fileText) { /** * @param entries */ - private void populateHeaders (String[] entries) { + private void populateHeaders(final String[] entries) { header.clear(); if (entries != null) { - for (String entry : entries) { + for (final String entry : entries) { header.add(entry); } -/* for (int i = header.size(); i < nbOfColumns; i++) { - header.add(""); - }*/ + /* + * for (int i = header.size(); i < nbOfColumns; i++) { header.add(""); } + */ } else { for (int i = 1; i < nbOfColumns + 1; i++) { header.add("Column" + i); @@ -218,7 +224,7 @@ public ArrayList getHeader() { /** * @return */ - public String[] getArrayHeader () { + public String[] getArrayHeader() { return header.toArray(new String[header.size()]); } @@ -228,42 +234,40 @@ public String[] getArrayHeader () { /** * */ - public void addRow () { - CSVRow row = CSVRow.createEmptyLine(nbOfColumns, this); + public void addRow() { + final CSVRow row = CSVRow.createEmptyLine(nbOfColumns, this); addRow(row); } /** * @param row */ - public void addRow (CSVRow row) { + public void addRow(final CSVRow row) { rows.add(row); } /** * @param row */ - public void addRowAfterElement (CSVRow row) { - CSVRow newRow = CSVRow.createEmptyLine(nbOfColumns, this); - int indexRow = findRow(row); + public void addRowAfterElement(final CSVRow row) { + final CSVRow newRow = CSVRow.createEmptyLine(nbOfColumns, this); + final int indexRow = findRow(row); if (indexRow != -1) { rows.add(indexRow, newRow); - } - else { + } else { addRow(newRow); } } - + /** * @param row */ - public void duplicateRow (CSVRow row) { - CSVRow newRow = new CSVRow(row, this); - int indexRow = findRow(row); + public void duplicateRow(final CSVRow row) { + final CSVRow newRow = new CSVRow(row, this); + final int indexRow = findRow(row); if (indexRow != -1) { rows.add(indexRow, newRow); - } - else { + } else { addRow(newRow); } } @@ -272,9 +276,9 @@ public void duplicateRow (CSVRow row) { * @param row * @return */ - public int findRow (CSVRow findRow) { + public int findRow(final CSVRow findRow) { for (int i = 0; i <= getArrayRows(true).length; i++) { - CSVRow row = getRowAt(i); + final CSVRow row = getRowAt(i); if (row.equals(findRow)) { return i; } @@ -292,10 +296,10 @@ public List getRows() { /** * @return */ - public Object[] getArrayRows (boolean includeCommentLine) { + public Object[] getArrayRows(final boolean includeCommentLine) { // filter header and comment rows - ArrayList myrows = new ArrayList(); - for (CSVRow row : rows) { + final ArrayList myrows = new ArrayList<>(); + for (final CSVRow row : rows) { // should we return the comment line if (row.isCommentLine()) { if (includeCommentLine) { @@ -314,36 +318,37 @@ else if (!row.isHeader()) { * @param index * @return */ - public CSVRow getRowAt (int index) { + public CSVRow getRowAt(final int index) { return rows.get(index); } /** - * @see org.fhsolution.eclipse.plugins.csvedit.model.IRowChangesListener#rowChanged(org.fhsolution.eclipse.plugins.csvedit.model.CSVRow, int) + * @see org.fhsolution.eclipse.plugins.csvedit.model.IRowChangesListener#rowChanged(org.fhsolution.eclipse.plugins.csvedit.model.CSVRow, + * int) */ - public void rowChanged (CSVRow row, int rowIndex) { - for (ICsvFileModelListener l : listeners) { - ((ICsvFileModelListener) l).entryChanged(row, rowIndex); + @Override + public void rowChanged(final CSVRow row, final int rowIndex) { + for (final ICsvFileModelListener l : listeners) { + l.entryChanged(row, rowIndex); } } /** * @param rowIndex */ - public void removeRow (int rowIndex) { + public void removeRow(final int rowIndex) { rows.remove(rowIndex); } /** * */ - public void removeRow (CSVRow row) { + public void removeRow(final CSVRow row) { if (!rows.remove(row)) { // TODO return error message } } - // ---------------------------------- // Helper method on column management // ---------------------------------- @@ -351,10 +356,10 @@ public void removeRow (CSVRow row) { /** * @param colName */ - public void addColumn (String colName) { + public void addColumn(final String colName) { nbOfColumns++; header.add(colName); - for (CSVRow row : rows) { + for (final CSVRow row : rows) { row.addElement(""); } } @@ -371,14 +376,14 @@ public int getColumnCount() { * * @param colIndex */ - public void removeColumn (int colIndex) { + public void removeColumn(final int colIndex) { if (isFirstLineHeader()) { header.remove(colIndex); nbOfColumns--; } - for (CSVRow row : rows) { + for (final CSVRow row : rows) { if (!row.isCommentLine()) { - System.out.println("remove elmt:["+colIndex+"] in row [" + row +"]"); + System.out.println("remove elmt:[" + colIndex + "] in row [" + row + "]"); row.removeElementAt(colIndex); } } @@ -389,38 +394,39 @@ public void removeColumn (int colIndex) { * * @param colIndex */ - public void removeColumn (String columnName) { + public void removeColumn(final String columnName) { if (columnName == null) { return; } - int colIndex = header.indexOf(columnName); + final int colIndex = header.indexOf(columnName); removeColumn(colIndex); } /** * @param csvFileListener */ - public void removeModelListener (ICsvFileModelListener csvFileListener) { + public void removeModelListener(final ICsvFileModelListener csvFileListener) { listeners.remove(csvFileListener); } /** * @param csvFileListener */ - public void addModelListener (ICsvFileModelListener csvFileListener) { - if (!listeners.contains(csvFileListener)) + public void addModelListener(final ICsvFileModelListener csvFileListener) { + if (!listeners.contains(csvFileListener)) { listeners.add(csvFileListener); + } } /** * Initialize the CsvWriter + * * @param writer * @return */ - protected CsvWriter initializeWriter (Writer writer) - { - char delimiter = getCustomDelimiter(); - CsvWriter csvWriter = new CsvWriter(writer, delimiter); + protected CsvWriter initializeWriter(final Writer writer) { + final char delimiter = getCustomDelimiter(); + final CsvWriter csvWriter = new CsvWriter(writer, delimiter); csvWriter.setTextQualifier(getTextQualifier()); csvWriter.setForceQualifier(useQualifier()); csvWriter.setComment(getCommentChar()); @@ -430,32 +436,28 @@ protected CsvWriter initializeWriter (Writer writer) /** * @return */ - public String getTextRepresentation () { + public String getTextRepresentation() { - StringWriter sw = new StringWriter(); + final StringWriter sw = new StringWriter(); try { - CsvWriter clw = initializeWriter(sw); + final CsvWriter clw = initializeWriter(sw); /* - if (isFirstLineHeader() && header.size() > 0) { - String[] headerArray = new String[header.size()]; - for (int i=0; i 0) { String[] headerArray = new + * String[header.size()]; for (int i=0; i - - 4.0.0 - - csvedit - org.nodeclipse - 1.2.0-SNAPSHOT - - csvedit.site - eclipse-repository - csvedit :: update site + + 4.0.0 + + csvedit + org.nodeclipse + 1.2.0-SNAPSHOT + + csvedit.site + eclipse-repository + csvedit :: update site diff --git a/csvedit.target/csvedit.target b/csvedit.target/csvedit.target new file mode 100644 index 0000000..6b2e3ca --- /dev/null +++ b/csvedit.target/csvedit.target @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + org.jumpmind.symmetric + symmetric-csv + 2.5.13 + jar + + + + + \ No newline at end of file diff --git a/csvedit.target/pom.xml b/csvedit.target/pom.xml new file mode 100644 index 0000000..3aeae87 --- /dev/null +++ b/csvedit.target/pom.xml @@ -0,0 +1,13 @@ + + + 4.0.0 + + org.nodeclipse + csvedit + 1.2.0-SNAPSHOT + + csvedit.target + eclipse-target-definition + \ No newline at end of file diff --git a/pom.xml b/pom.xml index 308f723..947ee38 100644 --- a/pom.xml +++ b/pom.xml @@ -1,99 +1,271 @@ - - 4.0.0 - org.nodeclipse - csvedit - 1.2.0-SNAPSHOT - pom - csvedit :: parent - csvedit parent + + 4.0.0 + org.nodeclipse + csvedit + 1.2.0-SNAPSHOT + pom + csvedit :: parent + csvedit parent - - 3.0 - + + 17 + 4.0.4 + -Xmx512m -XX:MaxPermSize=256m + UTF-8 + - - 1.6 - 3.0 - 1.0.0 - -Xmx512m -XX:MaxPermSize=256m - UTF-8 - + + scm:git@github.com:gnl42/CsvEdit.git + scm:git@github.com:gnl42/CsvEdit.git + https://github.com/gnl42/CsvEdit + - - - luna - p2 - http://download.eclipse.org/releases/luna - - - - - sonatype-public - http://repository.sonatype.org/content/groups/sonatype-public-grid - - + + + + + org.apache.maven.plugins + maven-javadoc-plugin + 3.5.0 + + + org.apache.maven.plugins + maven-site-plugin + 3.12.1 + + + org.apache.maven.plugins + maven-deploy-plugin + 3.1.1 + + + org.codehaus.mojo + build-helper-maven-plugin + 3.4.0 + + + org.apache.maven.plugins + maven-surefire-report-plugin + 3.1.2 + + + org.apache.maven.plugins + maven-enforcer-plugin + 3.3.0 + + + org.apache.maven.plugins + maven-resources-plugin + 3.3.1 + + + org.apache.maven.plugins + maven-clean-plugin + 3.3.1 + + + org.apache.maven.plugins + maven-jxr-plugin + 3.3.0 + + + org.eclipse.tycho + tycho-compiler-plugin + ${tycho.version} + + + org.eclipse.tycho + tycho-maven-plugin + ${tycho.version} + true + + + org.eclipse.tycho + tycho-p2-repository-plugin + ${tycho.version} + + + org.eclipse.tycho + tycho-source-plugin + ${tycho.version} + + + org.eclipse.tycho.extras + tycho-source-feature-plugin + ${tycho.version} + + + org.eclipse.tycho + tycho-p2-plugin + ${tycho.version} + + + org.eclipse.tycho + tycho-versions-plugin + ${tycho.version} + + + org.eclipse.tycho + tycho-p2-director-plugin + ${tycho.version} + + + org.eclipse.tycho + tycho-surefire-plugin + ${tycho.version} + + + org.eclipse.tycho + target-platform-configuration + ${tycho.version} + + + org.eclipse.tycho.extras + tycho-eclipserun-plugin + ${tycho.version} + + + org.eclipse.tycho.extras + tycho-pack200a-plugin + ${tycho.version} + + + org.eclipse.tycho.extras + tycho-pack200b-plugin + ${tycho.version} + + + org.eclipse.cbi.maven.plugins + eclipse-jarsigner-plugin + 1.4.2 + + + + + + org.apache.maven.plugins + maven-resources-plugin + + UTF-8 + + + + org.eclipse.tycho + tycho-compiler-plugin + + 17 + true + true + + + + org.eclipse.tycho + tycho-maven-plugin + true + + + org.eclipse.tycho + tycho-p2-repository-plugin + + + org.eclipse.tycho + tycho-packaging-plugin + ${tycho.version} + + + org.codehaus.mojo + exec-maven-plugin + 3.1.0 + + + org.eclipse.tycho + tycho-p2-plugin + + + attach-p2-metadata + package + + p2-metadata + + + + + + org.eclipse.tycho + tycho-versions-plugin + + + org.eclipse.tycho + tycho-surefire-plugin + + false + true + true + + + ${ui.test.vmargs} + + + org.eclipse.equinox.launcher + 4 + true + + + + + + + + + p2-installable-unit + org.eclipse.equinox.event + + + + + + org.eclipse.tycho + target-platform-configuration + + + + linux + gtk + x86_64 + + + win32 + win32 + x86_64 + + + macosx + cocoa + x86_64 + + + + + org.nodeclipse + csvedit.target + 1.2.0-SNAPSHOT + + + + + + - - - - org.eclipse.tycho - tycho-maven-plugin - ${tycho.version} - true - - - org.eclipse.tycho - target-platform-configuration - ${tycho.version} - - p2 - consider - true - - - - - - - - org.eclipse.tycho - tycho-packaging-plugin - ${tycho.version} - - yyyyMMdd-HHmm - - - - org.eclipse.tycho - tycho-surefire-plugin - ${tycho.version} - - true - - **/*Test.java - - ${tycho.test.jvmArgs} - - 60 - - - - org.apache.maven.plugins - maven-assembly-plugin - 2.3 - - - - - - csvedit.plugin - csvedit.plugin.ui - csvedit.feature - - csvedit.site - + + csvedit.target + csvedit.plugin + csvedit.plugin.ui + csvedit.feature + csvedit.site + \ No newline at end of file