Skip to content

Commit

Permalink
Checking for null object values, tiny refactoring.
Browse files Browse the repository at this point in the history
  • Loading branch information
Michal Jaron committed Sep 7, 2021
1 parent 631908d commit bb0ad2f
Show file tree
Hide file tree
Showing 10 changed files with 264 additions and 24 deletions.
6 changes: 4 additions & 2 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,8 @@
* OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/

import java.io.File

plugins {
id 'java'
id 'maven-publish'
Expand All @@ -31,7 +33,7 @@ def detectVersionTag() {
def allTags = new String(procAllTags.getInputStream().readAllBytes())

def allTagsByLine = allTags.split('\n')
for (int i = allTagsByLine.size() -1; i >= 0; --i) {
for (int i = allTagsByLine.size() - 1; i >= 0; --i) {
def iLine = allTagsByLine[i] as String
def iTrimmedLine = iLine.trim()
if (!iTrimmedLine.isEmpty()) {
Expand Down Expand Up @@ -65,7 +67,7 @@ def detectVersionTag() {
}

group 'pl.mjaron'
version "0.1.1"
version "0.1.2"
println("Project version determined: $version")

java {
Expand Down
23 changes: 23 additions & 0 deletions src/main/java/pl/mjaron/etudes/Str.java
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,29 @@
* String utilities class.
*/
public abstract class Str {

/**
* @param what Any nullable String.
* @return String object given in parameter or empty String it
*/
public static String orEmpty(final String what) {
if (what == null) {
return "";
}
return what;
}

/**
* @param what Any object.
* @return toString() result or empty String if given object was null.
*/
public static String orEmpty(final Object what) {
if (what == null) {
return "";
}
return what.toString();
}

/**
* @param what String where looking for char occurrences.
* @param ch Searched character.
Expand Down
8 changes: 2 additions & 6 deletions src/main/java/pl/mjaron/etudes/flat/BeanTableSource.java
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
package pl.mjaron.etudes.flat;

import pl.mjaron.etudes.Obj;
import pl.mjaron.etudes.Str;

import java.lang.reflect.Field;
import java.util.ArrayList;
Expand All @@ -45,11 +46,6 @@ public BeanTableSource(final Iterable<BeanT> values, final Class<BeanT> tClass)
this.headers = Obj.getFieldNames(this.tClass, tFields);
}

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

@Override
public int getColumnsCount() {
return tFields.length;
Expand Down Expand Up @@ -89,7 +85,7 @@ public Iterable<String> next() {
Obj.visitFieldValues(bean, this.tClass, this.tFields, new Obj.IFieldVisitor() {
@Override
public void visit(final String name, final Object value) {
stringSeries.add(value.toString());
stringSeries.add(Str.orEmpty(value));
}
});
return stringSeries;
Expand Down
9 changes: 7 additions & 2 deletions src/main/java/pl/mjaron/etudes/flat/ITableSource.java
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,9 @@
*/
public interface ITableSource extends Iterable<Iterable<String>> {

boolean hasHeaders();

/**
* @return Width of table.
*/
int getColumnsCount();

/**
Expand All @@ -41,6 +42,10 @@ public interface ITableSource extends Iterable<Iterable<String>> {
@Override
Iterator<Iterable<String>> iterator();

default boolean hasHeaders() {
return getHeaders() != null;
}

default void readTo(final ITableWriter writer) {
ITableWriter.writeOperation(this, writer);
}
Expand Down
12 changes: 2 additions & 10 deletions src/main/java/pl/mjaron/etudes/flat/ListTableSource.java
Original file line number Diff line number Diff line change
Expand Up @@ -19,10 +19,10 @@

package pl.mjaron.etudes.flat;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

@Deprecated
public class ListTableSource<T> implements ITableSource {

final List<List<T>> array;
Expand All @@ -31,11 +31,6 @@ public ListTableSource(final List<List<T>> array) {
this.array = array;
}

@Override
public boolean hasHeaders() {
return false;
}

@Override
public int getColumnsCount() {
if (array.size() == 0) return 0;
Expand All @@ -44,10 +39,7 @@ public int getColumnsCount() {

@Override
public Iterable<String> getHeaders() {
if (array.size() == 0) {
return new ArrayList<>();
}
return StringSeries.from(array.get(0));
return null;
}

@Override
Expand Down
157 changes: 157 additions & 0 deletions src/main/java/pl/mjaron/etudes/flat/SeriesIteratorFactory.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,157 @@
/*
* Copyright 2021 Michał Jaroń <m.jaron@protonmail.com>
*
* Permission is hereby granted, free of charge, to any person obtaining a copy of this software and
* associated documentation files (the "Software"), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the
* following conditions:
*
* The above copyright notice and this permission notice shall be included in all copies
* or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
* KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
* PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT
* OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/

package pl.mjaron.etudes.flat;

import java.util.Iterator;

public abstract class SeriesIteratorFactory {

private SeriesIteratorFactory() {
}

public static Iterator<String> from(final byte[] src) {
return new Iterator<String>() {
private int idx = 0;

@Override
public boolean hasNext() {
return idx < src.length;
}

@Override
public String next() {
return "" + src[idx++];
}
};
}

public static Iterator<String> from(final short[] src) {
return new Iterator<String>() {
private int idx = 0;

@Override
public boolean hasNext() {
return idx < src.length;
}

@Override
public String next() {
return "" + src[idx++];
}
};
}

public static Iterator<String> from(final int[] src) {
return new Iterator<String>() {
private int idx = 0;

@Override
public boolean hasNext() {
return idx < src.length;
}

@Override
public String next() {
return "" + src[idx++];
}
};
}

public static Iterator<String> from(final long[] src) {
return new Iterator<String>() {
private int idx = 0;

@Override
public boolean hasNext() {
return idx < src.length;
}

@Override
public String next() {
return "" + src[idx++];
}
};
}

public static Iterator<String> from(final float[] src) {
return new Iterator<String>() {
private int idx = 0;

@Override
public boolean hasNext() {
return idx < src.length;
}

@Override
public String next() {
return "" + src[idx++];
}
};
}

public static Iterator<String> from(final double[] src) {
return new Iterator<String>() {
private int idx = 0;

@Override
public boolean hasNext() {
return idx < src.length;
}

@Override
public String next() {
return "" + src[idx++];
}
};
}

public static Iterator<String> from(final boolean[] src) {
return new Iterator<String>() {
private int idx = 0;

@Override
public boolean hasNext() {
return idx < src.length;
}

@Override
public String next() {
return "" + src[idx++];
}
};
}

public static Iterator<String> from(final char[] src) {
return new Iterator<String>() {
private int idx = 0;

@Override
public boolean hasNext() {
return idx < src.length;
}

@Override
public String next() {
return "" + src[idx++];
}
};
}

}
7 changes: 5 additions & 2 deletions src/main/java/pl/mjaron/etudes/flat/StringSeries.java
Original file line number Diff line number Diff line change
Expand Up @@ -19,23 +19,26 @@

package pl.mjaron.etudes.flat;

import pl.mjaron.etudes.Str;

import java.util.ArrayList;
import java.util.List;

@Deprecated
public abstract class StringSeries {

public static <T> List<String> from(final List<T> objects) {
final List<String> series = new ArrayList<>(objects.size());
for (final T obj : objects) {
series.add(obj.toString());
series.add(Str.orEmpty(obj));
}
return series;
}

public static <T> List<String> from(final T[] objects) {
final List<String> series = new ArrayList<>(objects.length);
for (final T obj : objects) {
series.add(obj.toString());
series.add(Str.orEmpty(obj));
}
return series;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
import java.util.ArrayList;
import java.util.List;

public abstract class StringSeriesArray {
public abstract class StringSeriesList {

public static <T> List<List<String>> from(final List<List<T>> rows) {
final List<List<String>> stringTable = new ArrayList<>(rows.size());
Expand Down
Loading

0 comments on commit bb0ad2f

Please sign in to comment.