aboutsummaryrefslogtreecommitdiff
path: root/challenge-259/luca-ferrari/pljava/src/main/java
diff options
context:
space:
mode:
authorMohammad S Anwar <mohammad.anwar@yahoo.com>2024-03-04 17:24:02 +0000
committerMohammad S Anwar <mohammad.anwar@yahoo.com>2024-03-04 17:24:02 +0000
commit58d2a420a8de4551ea694c94ab1088cd795dad7d (patch)
treed9ef49892910b3051d7c084c93fec202bcb6647e /challenge-259/luca-ferrari/pljava/src/main/java
parent93e897d94b55160397eff52df0d0b59f1b00a861 (diff)
parent074cecb5fed0a7961ba5c5f4b2605676fe589f25 (diff)
downloadperlweeklychallenge-club-58d2a420a8de4551ea694c94ab1088cd795dad7d.tar.gz
perlweeklychallenge-club-58d2a420a8de4551ea694c94ab1088cd795dad7d.tar.bz2
perlweeklychallenge-club-58d2a420a8de4551ea694c94ab1088cd795dad7d.zip
Merge branch 'master' of https://github.com/manwar/perlweeklychallenge-club
Diffstat (limited to 'challenge-259/luca-ferrari/pljava/src/main/java')
-rw-r--r--challenge-259/luca-ferrari/pljava/src/main/java/Task1.java73
-rw-r--r--challenge-259/luca-ferrari/pljava/src/main/java/Task2.java107
2 files changed, 180 insertions, 0 deletions
diff --git a/challenge-259/luca-ferrari/pljava/src/main/java/Task1.java b/challenge-259/luca-ferrari/pljava/src/main/java/Task1.java
new file mode 100644
index 0000000000..de464e56c0
--- /dev/null
+++ b/challenge-259/luca-ferrari/pljava/src/main/java/Task1.java
@@ -0,0 +1,73 @@
+
+
+
+package PWC259;
+
+/**
+ * PL/Java implementation for PWC 259
+ * Task 1
+ * See <https://perlweeklychallenge.org/blog/perl-weekly-challenge-259>
+ *
+ *
+ * To compile on the local machine:
+
+ $ export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64/ # if not already set
+ $ mvn clean build
+ $ scp target/PWC259-1.jar luca@rachel:/tmp
+
+
+ * To install into PostgreSQL execute:
+
+ select sqlj.install_jar( 'file:///tmp/PWC259-1.jar', 'PWC259', true );
+
+ select pwc259.task2_pljava();
+
+ and then to redeploy:
+
+ select sqlj.replace_jar( 'file:///tmp/PWC259-1.jar', 'PWC259', true );
+
+*/
+
+import org.postgresql.pljava.*;
+import org.postgresql.pljava.annotation.Function;
+import static org.postgresql.pljava.annotation.Function.Effects.IMMUTABLE;
+import static org.postgresql.pljava.annotation.Function.OnNullInput.RETURNS_NULL;
+
+import java.util.*;
+import java.util.stream.*;
+import java.sql.SQLException;
+import java.util.logging.*;
+import java.sql.ResultSet;
+import java.sql.Date;
+
+public class Task1 {
+
+ private final static Logger logger = Logger.getAnonymousLogger();
+
+ @Function( schema = "pwc259",
+ onNullInput = RETURNS_NULL,
+ effects = IMMUTABLE )
+ public static final java.sql.Date task1_pljava( Date startDay, int how_many, Date[] holidays ) throws SQLException {
+ logger.log( Level.INFO, "Entering pwc259.task1_pljava" );
+
+ Calendar day = Calendar.getInstance();
+ day.setTime( startDay );
+
+ while ( how_many > 0 ) {
+ day.add( Calendar.DAY_OF_YEAR, 1 );
+
+ while ( day.get( Calendar.DAY_OF_MONTH ) == Calendar.SUNDAY
+ || day.get( Calendar.DAY_OF_MONTH ) == Calendar.SATURDAY )
+ day.add( Calendar.DAY_OF_YEAR, 1 );
+
+ if ( holidays != null )
+ for ( Date skip : holidays )
+ if ( skip.equals( day.getTime() ) )
+ day.add( Calendar.DAY_OF_YEAR, 1 );
+
+ how_many--;
+ }
+
+ return new java.sql.Date( day.getTimeInMillis() );
+ }
+}
diff --git a/challenge-259/luca-ferrari/pljava/src/main/java/Task2.java b/challenge-259/luca-ferrari/pljava/src/main/java/Task2.java
new file mode 100644
index 0000000000..1a33f13bea
--- /dev/null
+++ b/challenge-259/luca-ferrari/pljava/src/main/java/Task2.java
@@ -0,0 +1,107 @@
+
+
+
+package PWC259;
+
+/**
+ * PL/Java implementation for PWC 259
+ * Task 2
+ * See <https://perlweeklychallenge.org/blog/perl-weekly-challenge-259>
+ *
+ *
+ * To compile on the local machine:
+
+ $ export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64/ # if not already set
+ $ mvn clean build
+ $ scp target/PWC259-1.jar luca@rachel:/tmp
+
+
+ * To install into PostgreSQL execute:
+
+ select sqlj.install_jar( 'file:///tmp/PWC259-1.jar', 'PWC259', true );
+
+ select pwc259.task2_pljava();
+
+ and then to redeploy:
+
+ select sqlj.replace_jar( 'file:///tmp/PWC259-1.jar', 'PWC259', true );
+
+*/
+
+import org.postgresql.pljava.*;
+import org.postgresql.pljava.annotation.Function;
+import static org.postgresql.pljava.annotation.Function.Effects.IMMUTABLE;
+import static org.postgresql.pljava.annotation.Function.OnNullInput.RETURNS_NULL;
+
+import java.util.*;
+import java.util.regex.*;
+import java.util.stream.*;
+import java.sql.SQLException;
+import java.util.logging.*;
+import java.sql.ResultSet;
+import java.sql.Date;
+
+public class Task2 implements ResultSetProvider {
+
+ private final static Logger logger = Logger.getAnonymousLogger();
+
+ @Function( schema = "pwc259",
+ onNullInput = RETURNS_NULL,
+ effects = IMMUTABLE )
+ public static final ResultSetProvider task2_pljava( String line ) throws SQLException {
+ logger.log( Level.INFO, "Entering pwc259.task2_pljava : " + line );
+ return new Task2( line );
+ }
+
+
+ public Task2( String line ) throws SQLException {
+ params = new LinkedList< List<String> >();
+ parse( line );
+ }
+
+
+ private final void parse( String line ) throws SQLException {
+ Pattern pattern = Pattern.compile( "[{][%] (\\w+)\\s*(.*)\\s* [%][}]" );
+ Matcher matcher = pattern.matcher( line );
+
+ if ( matcher.find() ) {
+ id = matcher.group( 1 );
+
+ Pattern subPattern = Pattern.compile( "(\\w+)[=](\\w+)\\s*" );
+ Matcher subMatch = subPattern.matcher( matcher.group( 2 ) );
+
+ while ( subMatch.find() ) {
+ List<String> current = new LinkedList<String>();
+ current.add( subMatch.group( 1 ) );
+ current.add( subMatch.group( 2 ) );
+ params.add( current );
+
+ }
+ }
+ else
+ throw new SQLException( "Cannot parse " + line );
+
+ }
+
+ private List< List<String> > params;
+ private String id;
+
+ @Override
+ public boolean assignRowValues(ResultSet rs, int row)
+ throws SQLException {
+
+ // stop the result set
+ if ( row >= params.size() )
+ return false;
+
+ rs.updateInt( 1, row );
+ rs.updateString( 2, id );
+ rs.updateString( 3, params.get( row ).get( 0 ) );
+ rs.updateString( 4, params.get( row ).get( 1 ) );
+ return true;
+ }
+
+ @Override
+ public void close() {
+ }
+}