Push changes for Angel
parent
e74ed9dbca
commit
e342f849ef
Binary file not shown.
@ -0,0 +1,21 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project-shared-configuration>
|
||||
<!--
|
||||
This file contains additional configuration written by modules in the NetBeans IDE.
|
||||
The configuration is intended to be shared among all the users of project and
|
||||
therefore it is assumed to be part of version control checkout.
|
||||
Without this configuration present, some functionality in the IDE may be limited or fail altogether.
|
||||
-->
|
||||
<properties xmlns="http://www.netbeans.org/ns/maven-properties-data/1">
|
||||
<!--
|
||||
Properties that influence various parts of the IDE, especially code formatting and the like.
|
||||
You can copy and paste the single properties, into the pom.xml file and the IDE will pick them up.
|
||||
That way multiple projects can share the same settings (useful for formatting rules for example).
|
||||
Any value defined here will override the pom.xml file value but is only applicable to the current project.
|
||||
-->
|
||||
<org-netbeans-modules-maven-j2ee.netbeans_2e_hint_2e_j2eeVersion>10-web</org-netbeans-modules-maven-j2ee.netbeans_2e_hint_2e_j2eeVersion>
|
||||
<org-netbeans-modules-maven-j2ee.netbeans_2e_hint_2e_deploy_2e_server>gfv700ee10</org-netbeans-modules-maven-j2ee.netbeans_2e_hint_2e_deploy_2e_server>
|
||||
<org-netbeans-modules-projectapi.jsf_2e_language>JSP</org-netbeans-modules-projectapi.jsf_2e_language>
|
||||
<netbeans.hint.jdkPlatform>JDK_15__System_</netbeans.hint.jdkPlatform>
|
||||
</properties>
|
||||
</project-shared-configuration>
|
@ -0,0 +1,125 @@
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<groupId>asdv</groupId>
|
||||
<artifactId>MP1_Ajax</artifactId>
|
||||
<version>1</version>
|
||||
<packaging>war</packaging>
|
||||
<name>MP1_Ajax-1</name>
|
||||
|
||||
<properties>
|
||||
<maven.compiler.source>11</maven.compiler.source>
|
||||
<maven.compiler.target>11</maven.compiler.target>
|
||||
<endorsed.dir>${project.build.directory}/endorsed</endorsed.dir>
|
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||
<failOnMissingWebXml>false</failOnMissingWebXml>
|
||||
<jakartaee>10.0.0</jakartaee>
|
||||
</properties>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>jakarta.platform</groupId>
|
||||
<artifactId>jakarta.jakartaee-api</artifactId>
|
||||
<version>${jakartaee}</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.primefaces</groupId>
|
||||
<artifactId>primefaces</artifactId>
|
||||
<version>13.0.2</version>
|
||||
<classifier>jakarta</classifier>
|
||||
</dependency>
|
||||
|
||||
|
||||
<dependency>
|
||||
<groupId>org.eclipse.persistence</groupId>
|
||||
<artifactId>org.eclipse.persistence.core</artifactId>
|
||||
<version>2.7.12</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.eclipse.persistence</groupId>
|
||||
<artifactId>org.eclipse.persistence.asm</artifactId>
|
||||
<version>9.4.0</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.eclipse.persistence</groupId>
|
||||
<artifactId>org.eclipse.persistence.antlr</artifactId>
|
||||
<version>2.7.12</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.eclipse.persistence</groupId>
|
||||
<artifactId>org.eclipse.persistence.jpa</artifactId>
|
||||
<version>2.7.12</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.eclipse.persistence</groupId>
|
||||
<artifactId>org.eclipse.persistence.jpa.jpql</artifactId>
|
||||
<version>2.7.12</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.eclipse.persistence</groupId>
|
||||
<artifactId>org.eclipse.persistence.moxy</artifactId>
|
||||
<version>2.7.12</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.eclipse.persistence</groupId>
|
||||
<artifactId>jakarta.persistence</artifactId>
|
||||
<version>2.2.3</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>mysql</groupId>
|
||||
<artifactId>mysql-connector-java</artifactId>
|
||||
<version>8.0.33</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-compiler-plugin</artifactId>
|
||||
<version>3.8.1</version>
|
||||
<configuration>
|
||||
<source>11</source>
|
||||
<target>11</target>
|
||||
<compilerArguments>
|
||||
<endorseddirs>${endorsed.dir}</endorseddirs>
|
||||
</compilerArguments>
|
||||
</configuration>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-war-plugin</artifactId>
|
||||
<version>2.3</version>
|
||||
<configuration>
|
||||
<failOnMissingWebXml>false</failOnMissingWebXml>
|
||||
</configuration>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-dependency-plugin</artifactId>
|
||||
<version>2.6</version>
|
||||
<executions>
|
||||
<execution>
|
||||
<phase>validate</phase>
|
||||
<goals>
|
||||
<goal>copy</goal>
|
||||
</goals>
|
||||
<configuration>
|
||||
<outputDirectory>${endorsed.dir}</outputDirectory>
|
||||
<silent>true</silent>
|
||||
<artifactItems>
|
||||
<artifactItem>
|
||||
<groupId>jakarta.platform</groupId>
|
||||
<artifactId>jakarta.jakartaee-api</artifactId>
|
||||
<version>${jakartaee}</version>
|
||||
<type>jar</type>
|
||||
</artifactItem>
|
||||
</artifactItems>
|
||||
</configuration>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
</project>
|
@ -0,0 +1,25 @@
|
||||
/*
|
||||
* Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
|
||||
* Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Interface.java to edit this template
|
||||
*/
|
||||
|
||||
|
||||
import asdv.mp1_ajax.pojos.Stock;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author asdv5
|
||||
*/
|
||||
public interface Dao<T>
|
||||
{
|
||||
void create(T t);
|
||||
void edit(T t);
|
||||
void remove(T t);
|
||||
T find(Object id);
|
||||
List<T> findAll();
|
||||
List<T> findRange(int[] range);
|
||||
int count();
|
||||
}
|
||||
|
||||
|
@ -0,0 +1,13 @@
|
||||
package asdv.mp1_ajax;
|
||||
|
||||
import jakarta.ws.rs.ApplicationPath;
|
||||
import jakarta.ws.rs.core.Application;
|
||||
|
||||
/**
|
||||
* Configures Jakarta RESTful Web Services for the application.
|
||||
* @author Juneau
|
||||
*/
|
||||
@ApplicationPath("resources")
|
||||
public class JakartaRestConfiguration extends Application {
|
||||
|
||||
}
|
@ -0,0 +1,109 @@
|
||||
/*
|
||||
* Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
|
||||
* Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Main.java to edit this template
|
||||
*/
|
||||
package asdv.mp1_ajax.pojos;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author A. V. Markou
|
||||
* @param <Many1>
|
||||
* @param <Many2>
|
||||
*/
|
||||
public interface ManyToMany<Many1, Many2>
|
||||
{
|
||||
/**
|
||||
* Creates a Many to Many relationship between the parentLeft and the
|
||||
* childrenRight. Example for ( Many1 a, Many2 1, 2, 3) it creates --> (a 1)
|
||||
* ( a 2 ) ( a 3 ) and ( 1, a ), ( 2, a ), ( 3, a). No duplicate values of
|
||||
* Many2 are allowed.
|
||||
*
|
||||
* @param parentLeft - exactly one Many1 object.
|
||||
* @param childrenRight - one or more Many2 objects.
|
||||
* @return the previous value associated with Many1, or null if there was no
|
||||
* Many1 with the same "key".
|
||||
* @throws ClassCastException - if the class of the specified Many1, or
|
||||
* Many2 or value prevents it from being stored in this map( i,e Many1 is
|
||||
* String and you pass an object)
|
||||
* @throws NullPointerException - if the specified Many1 or Many2 is null
|
||||
* and ManyToMany does not permit nulls as values.
|
||||
* @throw IllegalArgumentException - if a duplicate exists in childrenRight
|
||||
* list ( s1 --> p1,p2,p2 is not allowed).
|
||||
* @return the previous value associated with parentLeft, or null if there
|
||||
* was no childrenRight for parentLeft.
|
||||
*/
|
||||
List<Many2> add(Many1 parentLeft, Many2... childrenRight);
|
||||
|
||||
/**
|
||||
* Returns the List of all left children of the parentRight.
|
||||
*
|
||||
* @param parentRight a parent at the RHS of the many to many relationship.
|
||||
* @return the List of all left children of the parentRight.
|
||||
* @throw IllegalArgumentException if the value of parameter parentRight
|
||||
* does not exist in the RHS of the many to many relationship.
|
||||
*/
|
||||
List<Many1> getChildrenLeft(Many2 parentRight);
|
||||
|
||||
/**
|
||||
* Returns the List of all right children of the parentLeft.
|
||||
*
|
||||
* @param parentLeft a parent at the LHS of the many to many relationship.
|
||||
* @return the List of all right children of the parentLeft.
|
||||
* @throws IllegalArgumentException if the value of parameter parentLeft
|
||||
* does not exist on the LHS of the many to many relationship.
|
||||
*/
|
||||
List<Many2> getChildrenRight(Many1 parentLeft);
|
||||
|
||||
/**
|
||||
* Returns a set of the Many1 elements that exist on the LHS of the many to
|
||||
* many relationship.
|
||||
*
|
||||
* @return Set of Many1
|
||||
*/
|
||||
Set<Many1> getParentsLeft();
|
||||
|
||||
/**
|
||||
* Returns a set of the Many2 elements that exist on the RHS of the many to
|
||||
* many relationship.
|
||||
*
|
||||
* @return Set of Many2
|
||||
*/
|
||||
Set<Many2> getParentsRight();
|
||||
|
||||
/**
|
||||
* Removes the many1 parameter from the LHS of the many relationship AND all
|
||||
* its corresponding values that exist in the RHS of the many to many
|
||||
* relationship. For example given: ( LHS e1: p1, p2 e2: p2, p3 RHS: p1: e1
|
||||
* p2: e1, e2 p3: e2 after removing e1 from the LHS will results into: ( LHS
|
||||
* e2: p2, p3 RHS: p2: e2 p3: e2
|
||||
*
|
||||
* @param many1 the unique element on the LHS to be removed.
|
||||
* @throws NullPointerException if parameter many1 is null.
|
||||
* @return true if the removal occurred, false if many1 does not exist in
|
||||
* the LHS of the many to many relationship.
|
||||
*/
|
||||
boolean removeLeft(Many1 many1);
|
||||
|
||||
/**
|
||||
* Removes the many1 parameter from the RHS of the many relationship AND all
|
||||
* its corresponding values that exist in the LHS of the many to many
|
||||
* relationship. For example given: LHS e2: p2, p3 RHS: p2: e2 p3: e2 after
|
||||
* removing p2 from the RHS will results into: LHS e2: p3 RHS p3: e2
|
||||
*
|
||||
*
|
||||
* @param many2 the unique element on the LHS to be removed.
|
||||
* @throws NullPointerException if parameter many1 is null.
|
||||
* @return true if the removal occurred, false if many1 does not exist in
|
||||
* the LHS of the many to many relationship.
|
||||
*/
|
||||
boolean removeRight(Many2 many2);
|
||||
|
||||
/**
|
||||
* Clears all.
|
||||
*
|
||||
*/
|
||||
void clear();
|
||||
}
|
@ -0,0 +1,212 @@
|
||||
/*
|
||||
* Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
|
||||
* Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
|
||||
*/
|
||||
package asdv.mp1_ajax.pojos;
|
||||
|
||||
import asdv.mp1_ajax.pojos.ManyToMany;
|
||||
import java.util.Arrays;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author asdv5
|
||||
*/
|
||||
public class ManyToManyFactory1
|
||||
{
|
||||
public static <Many1, Many2> //generic types to be used in the method
|
||||
ManyToMany< Many1, Many2>//return type
|
||||
createManyToMany()
|
||||
{
|
||||
return new ManyToMany<Many1, Many2>()
|
||||
{
|
||||
|
||||
private Map<Object, Object> left = new HashMap();
|
||||
private Map<Object, Object> right = new HashMap();
|
||||
|
||||
@Override
|
||||
public String toString()
|
||||
{
|
||||
return "{" + "left=" + left + ", right=" + right + '}';
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Many2> add(Many1 parentLeft, Many2... childrenRight)
|
||||
{
|
||||
if (parentLeft==null || childrenRight==null || getParentsLeft().contains(parentLeft)) {
|
||||
throw new IllegalArgumentException("Invalid input: null arguments or duplicate parent");
|
||||
}
|
||||
|
||||
left.put(parentLeft, Arrays.asList(childrenRight));
|
||||
|
||||
for(Many2 parentRight : childrenRight)
|
||||
{
|
||||
|
||||
right.put(parentRight, Arrays.asList(parentLeft));
|
||||
}
|
||||
|
||||
|
||||
return Arrays.asList(childrenRight);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Many1> getChildrenLeft(Many2 parentRight)
|
||||
{
|
||||
if(right.get(parentRight)==null)
|
||||
{
|
||||
throw new IllegalArgumentException(parentRight+" is not a valid R parent");
|
||||
}
|
||||
return (List<Many1>) right.get(parentRight);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Many2> getChildrenRight(Many1 parentLeft)
|
||||
{
|
||||
if(left.get(parentLeft)==null)
|
||||
{
|
||||
throw new IllegalArgumentException(parentLeft+" is not a valid L parent");
|
||||
}
|
||||
return (List<Many2>)left.get(parentLeft);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Set<Many1> getParentsLeft()
|
||||
{
|
||||
return (Set<Many1>) left.keySet();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Set<Many2> getParentsRight()
|
||||
{
|
||||
return (Set<Many2>) right.keySet();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean removeLeft(Many1 many1)
|
||||
{
|
||||
if(!getParentsLeft().contains(many1))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
left.remove(many1);
|
||||
for(Many2 parentRight : getParentsRight())
|
||||
{
|
||||
right.remove(parentRight, many1);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean removeRight(Many2 many2)
|
||||
{
|
||||
if(!getParentsRight().contains(many2))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
right.remove(many2);
|
||||
for(Many1 parentLeft : getParentsLeft())
|
||||
{
|
||||
left.remove(parentLeft, many2);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void clear()
|
||||
{
|
||||
left.clear();
|
||||
right.clear();
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
public static void main(String[] args) throws InterruptedException
|
||||
{
|
||||
ManyToMany<String, String> mm = ManyToManyFactory1.createManyToMany();
|
||||
//mm.add(1, 1);///will not compile, we have Many1, Many2 as String
|
||||
System.out.println("add(e1, p1, p2)returns: " + mm.add("e1", "p1", "p2"));
|
||||
System.out.println("add(e2, p2, p3)returns: " + mm.add("e2", "p2", "p3"));
|
||||
System.out.println("getParentsLeft returns: " + mm.getParentsLeft());
|
||||
System.out.println("getParentsRight returns: " + mm.getParentsRight());
|
||||
System.out.println("getChildrenLeft(p2) returns: " + mm.getChildrenLeft("p2"));
|
||||
System.out.println("getChildrenLeft(p3) returns: " + mm.getChildrenLeft("p3"));
|
||||
System.out.println("getChildrenRight(e1) returns: " + mm.getChildrenRight("e1"));
|
||||
System.out.println("getChildrenRight(e2) returns: " + mm.getChildrenRight("e2"));
|
||||
System.out.println("-----------------------------------------------");
|
||||
System.out.println("The internal hash maps of ManyToMany after insertions: " + mm);
|
||||
|
||||
System.out.println("----------AFTER REMOVAL of e1 LEFT----------------------------------------");
|
||||
System.out.println("removeLeft(e1) returns: " + mm.removeLeft("e1"));
|
||||
System.out.println("getParentsLeft returns: " + mm.getParentsLeft());
|
||||
System.out.println("getParentsRight returns: " + mm.getParentsRight());
|
||||
System.out.println("getChildrenRight(e2) returns: " + mm.getChildrenRight("e2"));
|
||||
System.out.println("getChildrenLeft(p2) returns: " + mm.getChildrenLeft("p2"));
|
||||
System.out.println("getChildrenLeft(p3) returns: " + mm.getChildrenLeft("p3"));
|
||||
System.out.println("The internal hash maps of ManyToMany after removal LEFT: " + mm);
|
||||
|
||||
System.out.println("\n----------AFTER REMOVAL of p2 RIGHT----------------------------------------");
|
||||
System.out.println("removeRight(p2) returns: " + mm.removeRight("p2"));
|
||||
System.out.println("getParentsLeft returns: " + mm.getParentsLeft());
|
||||
System.out.println("getParentsRight returns: " + mm.getParentsRight());
|
||||
System.out.println("getChildrenRight(e2) returns: " + mm.getChildrenRight("e2"));
|
||||
System.out.println("getChildrenLeft(p3) returns: " + mm.getChildrenLeft("p3"));
|
||||
System.out.println("--------------------------------------------------");
|
||||
System.out.println("mm.removeLeft(e1) returns: " + mm.removeLeft("e1"));
|
||||
|
||||
System.out.println("The internal hash maps of ManyToMany after removal RIGHT: " + mm);
|
||||
Thread.sleep(5000, 0);
|
||||
|
||||
System.out.println("---------------CATCHING EXCEPTIONS -----------------------------------");
|
||||
try
|
||||
{
|
||||
mm.getChildrenRight("e10");//e10 dos not exist
|
||||
}
|
||||
catch (RuntimeException e)
|
||||
{
|
||||
System.err.println("getChildrenRight for e10 throws exception:" + e);
|
||||
}
|
||||
try
|
||||
{
|
||||
System.out.println(mm.add("e6", new String[]
|
||||
{
|
||||
"value1", null
|
||||
}));
|
||||
}
|
||||
catch (RuntimeException e)
|
||||
{
|
||||
System.err.println("add(e6, new String[]{null } ) throws exception: " + e);
|
||||
}
|
||||
try
|
||||
{
|
||||
System.out.println(mm.add(null, "p1"));
|
||||
}
|
||||
catch (RuntimeException e)
|
||||
{
|
||||
System.err.println("add(null, p1)returns throws exception: " + e);
|
||||
}
|
||||
try
|
||||
{
|
||||
System.out.println(mm.getChildrenRight("p1"));
|
||||
}
|
||||
catch (RuntimeException e)
|
||||
{
|
||||
System.err.println("getChildrenRight(p1) throws exception: " + e);
|
||||
}
|
||||
try
|
||||
{
|
||||
mm.add((String) new Object(), (String) new Object());
|
||||
}
|
||||
catch (RuntimeException e)
|
||||
{
|
||||
System.err.println("add((String) new Object(), (String) new Object()) throws exception: " + e);
|
||||
}
|
||||
mm.clear();
|
||||
System.out.println("-----------------------------------------------");
|
||||
System.out.println("The internal hash maps of ManyToMany after clear: " + mm);
|
||||
|
||||
|
||||
}
|
||||
}
|
@ -0,0 +1,147 @@
|
||||
/*
|
||||
* Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
|
||||
* Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
|
||||
*/
|
||||
package asdv.mp1_ajax.pojos;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Collection;
|
||||
|
||||
|
||||
public class Stock implements Serializable
|
||||
{
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
private String stockId;
|
||||
|
||||
private String companyName;
|
||||
|
||||
private double priceCurrent;
|
||||
|
||||
private double priceClosing;
|
||||
|
||||
private long numberOfSharesAvailable;
|
||||
|
||||
private long numberOfSharesSold;
|
||||
private Collection<Transactions> transactionsCollection;
|
||||
|
||||
public Stock()
|
||||
{
|
||||
}
|
||||
|
||||
public Stock(String stockId)
|
||||
{
|
||||
this.stockId = stockId;
|
||||
}
|
||||
|
||||
public Stock(String stockId, String companyName, double priceCurrent, double priceClosing, long numberOfSharesAvailable, long numberOfSharesSold)
|
||||
{
|
||||
this.stockId = stockId;
|
||||
this.companyName = companyName;
|
||||
this.priceCurrent = priceCurrent;
|
||||
this.priceClosing = priceClosing;
|
||||
this.numberOfSharesAvailable = numberOfSharesAvailable;
|
||||
this.numberOfSharesSold = numberOfSharesSold;
|
||||
}
|
||||
|
||||
public String getStockId()
|
||||
{
|
||||
return stockId;
|
||||
}
|
||||
|
||||
public void setStockId(String stockId)
|
||||
{
|
||||
this.stockId = stockId;
|
||||
}
|
||||
|
||||
public String getCompanyName()
|
||||
{
|
||||
return companyName;
|
||||
}
|
||||
|
||||
public void setCompanyName(String companyName)
|
||||
{
|
||||
this.companyName = companyName;
|
||||
}
|
||||
|
||||
public double getPriceCurrent()
|
||||
{
|
||||
return priceCurrent;
|
||||
}
|
||||
|
||||
public void setPriceCurrent(double priceCurrent)
|
||||
{
|
||||
this.priceCurrent = priceCurrent;
|
||||
}
|
||||
|
||||
public double getPriceClosing()
|
||||
{
|
||||
return priceClosing;
|
||||
}
|
||||
|
||||
public void setPriceClosing(double priceClosing)
|
||||
{
|
||||
this.priceClosing = priceClosing;
|
||||
}
|
||||
|
||||
public long getNumberOfSharesAvailable()
|
||||
{
|
||||
return numberOfSharesAvailable;
|
||||
}
|
||||
|
||||
public void setNumberOfSharesAvailable(long numberOfSharesAvailable)
|
||||
{
|
||||
this.numberOfSharesAvailable = numberOfSharesAvailable;
|
||||
}
|
||||
|
||||
public long getNumberOfSharesSold()
|
||||
{
|
||||
return numberOfSharesSold;
|
||||
}
|
||||
|
||||
public void setNumberOfSharesSold(long numberOfSharesSold)
|
||||
{
|
||||
this.numberOfSharesSold = numberOfSharesSold;
|
||||
}
|
||||
|
||||
public Collection<Transactions> getTransactionsCollection()
|
||||
{
|
||||
return transactionsCollection;
|
||||
}
|
||||
|
||||
public void setTransactionsCollection(Collection<Transactions> transactionsCollection)
|
||||
{
|
||||
this.transactionsCollection = transactionsCollection;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode()
|
||||
{
|
||||
int hash = 0;
|
||||
hash += (stockId != null ? stockId.hashCode() : 0);
|
||||
return hash;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object object)
|
||||
{
|
||||
// TODO: Warning - this method won't work in the case the id fields are not set
|
||||
if (!(object instanceof Stock))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
Stock other = (Stock) object;
|
||||
if ((this.stockId == null && other.stockId != null) || (this.stockId != null && !this.stockId.equals(other.stockId)))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString()
|
||||
{
|
||||
return "asdv.mp1_ajax.entities.Stock[ stockId=" + stockId + " ]";
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,98 @@
|
||||
/*
|
||||
* Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
|
||||
* Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
|
||||
*/
|
||||
package asdv.mp1_ajax.pojos;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Collection;
|
||||
|
||||
|
||||
|
||||
public class StockHolder implements Serializable
|
||||
{
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
private Integer stockHolderId;
|
||||
|
||||
private String name;
|
||||
|
||||
//cascade
|
||||
private Collection<Transactions> transactionsCollection;
|
||||
|
||||
public StockHolder()
|
||||
{
|
||||
}
|
||||
|
||||
public StockHolder(Integer stockHolderId)
|
||||
{
|
||||
this.stockHolderId = stockHolderId;
|
||||
}
|
||||
|
||||
public StockHolder(Integer stockHolderId, String name)
|
||||
{
|
||||
this.stockHolderId = stockHolderId;
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public Integer getStockHolderId()
|
||||
{
|
||||
return stockHolderId;
|
||||
}
|
||||
|
||||
public void setStockHolderId(Integer stockHolderId)
|
||||
{
|
||||
this.stockHolderId = stockHolderId;
|
||||
}
|
||||
|
||||
public String getName()
|
||||
{
|
||||
return name;
|
||||
}
|
||||
|
||||
public void setName(String name)
|
||||
{
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public Collection<Transactions> getTransactionsCollection()
|
||||
{
|
||||
return transactionsCollection;
|
||||
}
|
||||
|
||||
public void setTransactionsCollection(Collection<Transactions> transactionsCollection)
|
||||
{
|
||||
this.transactionsCollection = transactionsCollection;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode()
|
||||
{
|
||||
int hash = 0;
|
||||
hash += (stockHolderId != null ? stockHolderId.hashCode() : 0);
|
||||
return hash;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object object)
|
||||
{
|
||||
// TODO: Warning - this method won't work in the case the id fields are not set
|
||||
if (!(object instanceof StockHolder))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
StockHolder other = (StockHolder) object;
|
||||
if ((this.stockHolderId == null && other.stockHolderId != null) || (this.stockHolderId != null && !this.stockHolderId.equals(other.stockHolderId)))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString()
|
||||
{
|
||||
return "asdv.mp1_ajax.entities.StockHolder[ stockHolderId=" + stockHolderId + " ]";
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,112 @@
|
||||
/*
|
||||
* Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
|
||||
* Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
|
||||
*/
|
||||
package asdv.mp1_ajax.pojos;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
|
||||
public class Transactions implements Serializable
|
||||
{
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
protected TransactionsPK transactionsPK;
|
||||
|
||||
private int qty;
|
||||
|
||||
private Stock stock;
|
||||
|
||||
private StockHolder stockHolder;
|
||||
|
||||
public Transactions()
|
||||
{
|
||||
}
|
||||
|
||||
public Transactions(TransactionsPK transactionsPK)
|
||||
{
|
||||
this.transactionsPK = transactionsPK;
|
||||
}
|
||||
|
||||
public Transactions(TransactionsPK transactionsPK, int qty)
|
||||
{
|
||||
this.transactionsPK = transactionsPK;
|
||||
this.qty = qty;
|
||||
}
|
||||
|
||||
public Transactions(int stockHolderId, String stockId)
|
||||
{
|
||||
this.transactionsPK = new TransactionsPK(stockHolderId, stockId);
|
||||
}
|
||||
|
||||
public TransactionsPK getTransactionsPK()
|
||||
{
|
||||
return transactionsPK;
|
||||
}
|
||||
|
||||
public void setTransactionsPK(TransactionsPK transactionsPK)
|
||||
{
|
||||
this.transactionsPK = transactionsPK;
|
||||
}
|
||||
|
||||
public int getQty()
|
||||
{
|
||||
return qty;
|
||||
}
|
||||
|
||||
public void setQty(int qty)
|
||||
{
|
||||
this.qty = qty;
|
||||
}
|
||||
|
||||
public Stock getStock()
|
||||
{
|
||||
return stock;
|
||||
}
|
||||
|
||||
public void setStock(Stock stock)
|
||||
{
|
||||
this.stock = stock;
|
||||
}
|
||||
|
||||
public StockHolder getStockHolder()
|
||||
{
|
||||
return stockHolder;
|
||||
}
|
||||
|
||||
public void setStockHolder(StockHolder stockHolder)
|
||||
{
|
||||
this.stockHolder = stockHolder;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode()
|
||||
{
|
||||
int hash = 0;
|
||||
hash += (transactionsPK != null ? transactionsPK.hashCode() : 0);
|
||||
return hash;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object object)
|
||||
{
|
||||
// TODO: Warning - this method won't work in the case the id fields are not set
|
||||
if (!(object instanceof Transactions))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
Transactions other = (Transactions) object;
|
||||
if ((this.transactionsPK == null && other.transactionsPK != null) || (this.transactionsPK != null && !this.transactionsPK.equals(other.transactionsPK)))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString()
|
||||
{
|
||||
return "asdv.mp1_ajax.entities.Transactions[ transactionsPK=" + transactionsPK + " ]";
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,87 @@
|
||||
/*
|
||||
* Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
|
||||
* Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
|
||||
*/
|
||||
package asdv.mp1_ajax.pojos;
|
||||
|
||||
import java.io.Serializable;
|
||||
import jakarta.persistence.Embeddable;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author asdv5
|
||||
*/
|
||||
@Embeddable
|
||||
public class TransactionsPK implements Serializable
|
||||
{
|
||||
|
||||
private int stockHolderId;
|
||||
|
||||
private String stockId;
|
||||
|
||||
public TransactionsPK()
|
||||
{
|
||||
}
|
||||
|
||||
public TransactionsPK(int stockHolderId, String stockId)
|
||||
{
|
||||
this.stockHolderId = stockHolderId;
|
||||
this.stockId = stockId;
|
||||
}
|
||||
|
||||
public int getStockHolderId()
|
||||
{
|
||||
return stockHolderId;
|
||||
}
|
||||
|
||||
public void setStockHolderId(int stockHolderId)
|
||||
{
|
||||
this.stockHolderId = stockHolderId;
|
||||
}
|
||||
|
||||
public String getStockId()
|
||||
{
|
||||
return stockId;
|
||||
}
|
||||
|
||||
public void setStockId(String stockId)
|
||||
{
|
||||
this.stockId = stockId;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode()
|
||||
{
|
||||
int hash = 0;
|
||||
hash += (int) stockHolderId;
|
||||
hash += (stockId != null ? stockId.hashCode() : 0);
|
||||
return hash;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object object)
|
||||
{
|
||||
// TODO: Warning - this method won't work in the case the id fields are not set
|
||||
if (!(object instanceof TransactionsPK))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
TransactionsPK other = (TransactionsPK) object;
|
||||
if (this.stockHolderId != other.stockHolderId)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
if ((this.stockId == null && other.stockId != null) || (this.stockId != null && !this.stockId.equals(other.stockId)))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString()
|
||||
{
|
||||
return "asdv.mp1_ajax.entities.TransactionsPK[ stockHolderId=" + stockHolderId + ", stockId=" + stockId + " ]";
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,20 @@
|
||||
package asdv.mp1_ajax.resources;
|
||||
|
||||
import jakarta.ws.rs.GET;
|
||||
import jakarta.ws.rs.Path;
|
||||
import jakarta.ws.rs.core.Response;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author
|
||||
*/
|
||||
@Path("jakartaee10")
|
||||
public class JakartaEE10Resource {
|
||||
|
||||
@GET
|
||||
public Response ping(){
|
||||
return Response
|
||||
.ok("ping Jakarta EE")
|
||||
.build();
|
||||
}
|
||||
}
|
@ -0,0 +1,36 @@
|
||||
/*
|
||||
* Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
|
||||
* Click nbfs://nbhost/SystemFileSystem/Templates/JSF/JSFManagedBean.java to edit this template
|
||||
*/
|
||||
|
||||
package beans;
|
||||
|
||||
import edu.slcc.ajax.bl.StockDB;
|
||||
import jakarta.enterprise.context.SessionScoped;
|
||||
import jakarta.inject.Inject;
|
||||
import jakarta.inject.Named;
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author asdv5
|
||||
*/
|
||||
@Named(value="stockBean")
|
||||
@SessionScoped
|
||||
public class StockBean implements Serializable
|
||||
{
|
||||
|
||||
@Inject
|
||||
StockDB stocks;
|
||||
/** Creates a new instance of StockBean */
|
||||
public StockBean() {
|
||||
}
|
||||
|
||||
public StockDB getStocks()
|
||||
{
|
||||
return stocks;
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
@ -0,0 +1,28 @@
|
||||
/*
|
||||
* Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
|
||||
* Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Interface.java to edit this template
|
||||
*/
|
||||
package edu.slcc.ajax.bl;
|
||||
|
||||
import java.sql.SQLException;
|
||||
import java.util.List;
|
||||
|
||||
public interface Dao<T>
|
||||
{
|
||||
void create(T t);
|
||||
|
||||
void edit(T t);
|
||||
|
||||
void remove(T t);
|
||||
|
||||
T find(Object id) ;
|
||||
|
||||
|
||||
List<T> findAll()
|
||||
throws SQLException;;
|
||||
|
||||
List<T> findRange(int[] range);
|
||||
|
||||
int count();
|
||||
|
||||
}
|
@ -0,0 +1,73 @@
|
||||
|
||||
package edu.slcc.ajax.bl;
|
||||
|
||||
import java.sql.Connection;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author ASDV2
|
||||
*/
|
||||
public interface Database
|
||||
{
|
||||
|
||||
/**
|
||||
* Returns a Connection to a database or null if no connection is done.
|
||||
*
|
||||
* @param databaseName name
|
||||
* @param userName database user name
|
||||
* @param password database password
|
||||
* @param driver driver that connects us to database
|
||||
* @return Connection the connection to database or null if no connection
|
||||
*/
|
||||
public Connection getConnection(String databaseName, String userName, String password, String driver);
|
||||
|
||||
/**
|
||||
* Selects the projected columns of a table where the AND condition of the
|
||||
* WHERE clause is true.
|
||||
*
|
||||
* @param tableName table name
|
||||
* @param projectionFields fields if SELECT clause ( projected columns)
|
||||
* @param whereFieldsNValues fields in WHERE clause, key is the field name(
|
||||
* LHS ) and value of the field ( RHS ). For example snumber = 's1', status
|
||||
* > "10".
|
||||
* @param operators the operators that apply to whereFieldsNValues. They are
|
||||
* positioned between the LHS and the RHS of the whereFieldsNValues
|
||||
* parameter. The operators are always the same size as the
|
||||
* whereFieldsNValues. That is,the first operator applies to the first entry
|
||||
* of the map, the second operator to the 2nd entry and so on.
|
||||
* @return the projected columns of a table, after the WHERE clause applies
|
||||
* by ANDing all entries of the map ( whereFieldsNValues). If an SQL
|
||||
* exception is thrown return NULL if an error ( exception occurs).
|
||||
*
|
||||
*/
|
||||
public List<String> selectFieldsFromTableWhereFields(String tableName,
|
||||
List<String> projectionFields,
|
||||
Map<String, String> whereFieldsNValues,
|
||||
List<String> operators
|
||||
);
|
||||
|
||||
/**
|
||||
* Returns the list of all rows of the table "tableName"
|
||||
*
|
||||
* @param tableName the name of the table to return
|
||||
* @return a list with all rows in the the table.
|
||||
*/
|
||||
public List<String> selectAllFromTable(String tableName);
|
||||
|
||||
/**
|
||||
* Returns true if the table exists in the database, false otherwise
|
||||
*
|
||||
* @param tableName the name of the table
|
||||
* @return true if the table exists in the database, false otherwise
|
||||
*/
|
||||
boolean isTable(String tableName);
|
||||
|
||||
/**
|
||||
* Closes a connection
|
||||
*
|
||||
* @param c the connection to close
|
||||
*/
|
||||
public void closeConnection(Connection c);
|
||||
}
|
@ -0,0 +1,129 @@
|
||||
/*
|
||||
* Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
|
||||
* Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
|
||||
*/
|
||||
package edu.slcc.ajax.bl;
|
||||
|
||||
|
||||
import asdv.mp1_ajax.pojos.Stock;
|
||||
import java.io.Serializable;
|
||||
import java.sql.Connection;
|
||||
import java.sql.PreparedStatement;
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.SQLException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.function.Supplier;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author asdv5
|
||||
*/
|
||||
public class StockDB
|
||||
implements Dao<Stock>, Serializable
|
||||
{
|
||||
@Override
|
||||
public List<Stock> findAll()
|
||||
throws SQLException
|
||||
{
|
||||
// test exception code
|
||||
//if ( true)
|
||||
// throw new SQLException();
|
||||
|
||||
List<Stock> tableStocks = new ArrayList<Stock>();
|
||||
String databaseName = "nyse";
|
||||
String userName = "java";
|
||||
String password = "dA^vTFd8&JDvt8HjiNVahgSj";
|
||||
String URL2 = "com.mysql.jdbc.Driver";
|
||||
Connection con = new UtilitiesDatabase().connection(
|
||||
databaseName, userName, password, URL2);
|
||||
PreparedStatement ps = null;
|
||||
try
|
||||
{
|
||||
if (con == null)
|
||||
{
|
||||
throw new RuntimeException("cannot connect to database");
|
||||
}
|
||||
String table = "";
|
||||
ResultSet rs = null;
|
||||
String sqlStr = "SELECT * FROM stock";
|
||||
//prepare statement
|
||||
ps = con.prepareStatement(sqlStr);
|
||||
//execute
|
||||
rs = ps.executeQuery();
|
||||
while (rs.next())
|
||||
{
|
||||
String stockId = rs.getString(1);
|
||||
String companyName = rs.getString(2);
|
||||
double priceCurrent = rs.getDouble(3);
|
||||
double priceClosing = rs.getDouble(4);
|
||||
long numberOfSharesAvailable = rs.getLong(5);
|
||||
long numberOfSharesSold = rs.getLong(6);
|
||||
Stock stock = new Stock(stockId, companyName, priceCurrent, priceClosing, numberOfSharesAvailable, numberOfSharesSold);
|
||||
tableStocks.add(stock);
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
ex.printStackTrace();
|
||||
throw ex;
|
||||
}
|
||||
finally
|
||||
{
|
||||
try
|
||||
{
|
||||
new UtilitiesDatabase().closeDatabaseConnection(con);
|
||||
// close the resources
|
||||
if (ps != null)
|
||||
{
|
||||
ps.close();
|
||||
}
|
||||
}
|
||||
catch (SQLException sqle)
|
||||
{
|
||||
System.out.println(sqle);
|
||||
sqle.printStackTrace();
|
||||
throw sqle;
|
||||
}
|
||||
}
|
||||
return tableStocks;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void create(Stock t)
|
||||
{
|
||||
throw new UnsupportedOperationException("Not supported yet."); // Generated from nbfs://nbhost/SystemFileSystem/Templates/Classes/Code/GeneratedMethodBody
|
||||
}
|
||||
|
||||
@Override
|
||||
public void edit(Stock t)
|
||||
{
|
||||
throw new UnsupportedOperationException("Not supported yet."); // Generated from nbfs://nbhost/SystemFileSystem/Templates/Classes/Code/GeneratedMethodBody
|
||||
}
|
||||
|
||||
@Override
|
||||
public void remove(Stock t)
|
||||
{
|
||||
throw new UnsupportedOperationException("Not supported yet."); // Generated from nbfs://nbhost/SystemFileSystem/Templates/Classes/Code/GeneratedMethodBody
|
||||
}
|
||||
|
||||
@Override
|
||||
public Stock find(Object id)
|
||||
{
|
||||
throw new UnsupportedOperationException("Not supported yet."); // Generated from nbfs://nbhost/SystemFileSystem/Templates/Classes/Code/GeneratedMethodBody
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Stock> findRange(int[] range)
|
||||
{
|
||||
throw new UnsupportedOperationException("Not supported yet."); // Generated from nbfs://nbhost/SystemFileSystem/Templates/Classes/Code/GeneratedMethodBody
|
||||
}
|
||||
|
||||
@Override
|
||||
public int count()
|
||||
{
|
||||
throw new UnsupportedOperationException("Not supported yet."); // Generated from nbfs://nbhost/SystemFileSystem/Templates/Classes/Code/GeneratedMethodBody
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -0,0 +1,103 @@
|
||||
/*
|
||||
* Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
|
||||
* Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
|
||||
*/
|
||||
package edu.slcc.ajax.bl;
|
||||
|
||||
import java.sql.Connection;
|
||||
import java.sql.DriverManager;
|
||||
import java.sql.SQLException;
|
||||
import java.text.ParseException;
|
||||
import java.text.SimpleDateFormat;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author asdv5
|
||||
*/
|
||||
public class UtilitiesDatabase
|
||||
{
|
||||
public Connection connection(
|
||||
String databaseName,
|
||||
String userName,
|
||||
String password,
|
||||
String URL2
|
||||
|
||||
) //throws InstantiationException, IllegalAccessException
|
||||
{
|
||||
/*
|
||||
String databaseName = "suppliers_parts_23";
|
||||
String userName = "root";
|
||||
String password = "root";
|
||||
String URL2 = "com.mysql.jdbc.Driver";
|
||||
Connection con = null;
|
||||
*/
|
||||
Connection con;
|
||||
try
|
||||
{// Load Sun's jdbc driver
|
||||
Class.forName(URL2).newInstance();
|
||||
System.out.println("JDBC Driver loaded!");
|
||||
}
|
||||
catch (Exception e) // driver not found
|
||||
{
|
||||
System.err.println("Unable to load database driver");
|
||||
System.err.println("Details : " + e);
|
||||
return null;
|
||||
}
|
||||
String ip = "localhost"; //internet connection
|
||||
String url = "jdbc:mysql://" + ip + ":3306/" + databaseName + "?allowPublicKeyRetrieval=true&useSSL=false";
|
||||
try
|
||||
{
|
||||
con = DriverManager.getConnection(url, userName, password);
|
||||
con.setReadOnly(false);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
System.err.println(e.toString());
|
||||
return null;
|
||||
}
|
||||
System.out.println("connection successfull");
|
||||
return con;
|
||||
}
|
||||
|
||||
|
||||
public void closeDatabaseConnection( Connection con)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (con != null)
|
||||
{
|
||||
con.close();
|
||||
}
|
||||
}
|
||||
catch (SQLException e)
|
||||
{
|
||||
System.out.println(e);
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
public static java.sql.Date stringDateToSqlDate(String sDate)
|
||||
{
|
||||
java.util.Date date = null;
|
||||
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
|
||||
try
|
||||
{
|
||||
date = sdf.parse(sDate);
|
||||
}
|
||||
catch (ParseException e)
|
||||
{
|
||||
e.printStackTrace();
|
||||
}
|
||||
return new java.sql.Date( date.getTime() );
|
||||
|
||||
}
|
||||
|
||||
|
||||
public static java.util.Date stringDateToJavaUtilitiesDate(String sDate)
|
||||
{
|
||||
java.sql.Date sqldate = stringDateToSqlDate(sDate);
|
||||
return new java.util.Date(sqldate.getTime() );
|
||||
}
|
||||
}
|
@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<persistence version="3.0" xmlns="https://jakarta.ee/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="https://jakarta.ee/xml/ns/persistence https://jakarta.ee/xml/ns/persistence/persistence_3_0.xsd">
|
||||
<persistence-unit name="asdv_MP1_Ajax_war_1PU" transaction-type="JTA">
|
||||
<jta-data-source>java:app/nyse</jta-data-source>
|
||||
<exclude-unlisted-classes>false</exclude-unlisted-classes>
|
||||
<properties/>
|
||||
</persistence-unit>
|
||||
</persistence>
|
@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<beans xmlns="https://jakarta.ee/xml/ns/jakartaee"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/beans_4_0.xsd"
|
||||
bean-discovery-mode="all">
|
||||
</beans>
|
@ -0,0 +1,15 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE resources PUBLIC "-//GlassFish.org//DTD GlassFish Application Server 3.1 Resource Definitions//EN" "http://glassfish.org/dtds/glassfish-resources_1_5.dtd">
|
||||
<resources>
|
||||
<jdbc-connection-pool allow-non-component-callers="false" associate-with-thread="false" connection-creation-retry-attempts="0" connection-creation-retry-interval-in-seconds="10" connection-leak-reclaim="false" connection-leak-timeout-in-seconds="0" connection-validation-method="auto-commit" datasource-classname="com.mysql.jdbc.jdbc2.optional.MysqlDataSource" fail-all-connections="false" idle-timeout-in-seconds="300" is-connection-validation-required="false" is-isolation-level-guaranteed="true" lazy-connection-association="false" lazy-connection-enlistment="false" match-connections="false" max-connection-usage-count="0" max-pool-size="32" max-wait-time-in-millis="60000" name="mysql_nyse_rootPool" non-transactional-connections="false" pool-resize-quantity="2" res-type="javax.sql.DataSource" statement-timeout-in-seconds="-1" steady-pool-size="8" validate-atmost-once-period-in-seconds="0" wrap-jdbc-objects="false">
|
||||
<property name="serverName" value="localhost"/>
|
||||
<property name="portNumber" value="8889"/>
|
||||
<property name="databaseName" value="nyse"/>
|
||||
<property name="User" value="root"/>
|
||||
<property name="Password" value="root"/>
|
||||
<property name="URL" value="jdbc:mysql://localhost:8889/nyse?zeroDateTimeBehavior=CONVERT_TO_NULL"/>
|
||||
<property name="driverClass" value="com.mysql.cj.jdbc.Driver"/>
|
||||
</jdbc-connection-pool>
|
||||
<jdbc-resource enabled="true" jndi-name="java:app/nyse" object-type="user" pool-name="mysql_nyse_rootPool"/>
|
||||
<jdbc-resource enabled="true" jndi-name="java:app/nyse1" object-type="user" pool-name="mysql_nyse_rootPool"/>
|
||||
</resources>
|
@ -0,0 +1,25 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!--
|
||||
Copyright (c) 1997, 2018 Oracle and/or its affiliates. All rights reserved.
|
||||
|
||||
This program and the accompanying materials are made available under the
|
||||
terms of the Eclipse Public License v. 2.0, which is available at
|
||||
http://www.eclipse.org/legal/epl-2.0.
|
||||
|
||||
This Source Code may also be made available under the following Secondary
|
||||
Licenses when the conditions for such availability set forth in the
|
||||
Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
|
||||
version 2 with the GNU Classpath Exception, which is available at
|
||||
https://www.gnu.org/software/classpath/license.html.
|
||||
|
||||
SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
|
||||
-->
|
||||
<!DOCTYPE glassfish-web-app PUBLIC "-//GlassFish.org//DTD GlassFish Application Server 3.1 Servlet 3.0//EN" "http://glassfish.org/dtds/glassfish-web-app_3_0-1.dtd">
|
||||
<glassfish-web-app error-url="">
|
||||
<class-loader delegate="true"/>
|
||||
<jsp-config>
|
||||
<property name="keepgenerated" value="true">
|
||||
<description>Keep a copy of the generated servlet class' java code.</description>
|
||||
</property>
|
||||
</jsp-config>
|
||||
</glassfish-web-app>
|
@ -0,0 +1,24 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<web-app version="6.0" xmlns="https://jakarta.ee/xml/ns/jakartaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_6_0.xsd">
|
||||
<context-param>
|
||||
<param-name>jakarta.faces.PROJECT_STAGE</param-name>
|
||||
<param-value>Development</param-value>
|
||||
</context-param>
|
||||
<servlet>
|
||||
<servlet-name>Faces Servlet</servlet-name>
|
||||
<servlet-class>jakarta.faces.webapp.FacesServlet</servlet-class>
|
||||
<load-on-startup>1</load-on-startup>
|
||||
</servlet>
|
||||
<servlet-mapping>
|
||||
<servlet-name>Faces Servlet</servlet-name>
|
||||
<url-pattern>/faces/*</url-pattern>
|
||||
</servlet-mapping>
|
||||
<session-config>
|
||||
<session-timeout>
|
||||
30
|
||||
</session-timeout>
|
||||
</session-config>
|
||||
<welcome-file-list>
|
||||
<welcome-file>faces/index.xhtml</welcome-file>
|
||||
</welcome-file-list>
|
||||
</web-app>
|
@ -0,0 +1,49 @@
|
||||
<?xml version='1.0' encoding='UTF-8' ?>
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml"
|
||||
xmlns:h="http://xmlns.jcp.org/jsf/html"
|
||||
xmlns:f="http://xmlns.jcp.org/jsf/core"
|
||||
xmlns:p="http://primefaces.org/ui"
|
||||
xmlns:f5="http://xmlns.jcp.org/jsf/passthrough">
|
||||
<h:head>
|
||||
<title>MP1 Ajax</title>
|
||||
<h:outputStylesheet library="css" name="styles.css"/>
|
||||
</h:head>
|
||||
<h:body>
|
||||
<h:form>
|
||||
<p:dataTable id= "id_dataTable1" value ="#{stockBean.getStocks().findAll() }"
|
||||
style="width: 100%; "
|
||||
|
||||
var="stock"
|
||||
|
||||
scrollable="true"
|
||||
paginator="true"
|
||||
rowHover ="true"
|
||||
paginatorPosition="bottom"
|
||||
>
|
||||
|
||||
|
||||
|
||||
<p:column headerText="Stock ID" >
|
||||
<p:outputLabel title= "Stock ID" value="#{stock.stockId}" />
|
||||
</p:column >
|
||||
<p:column headerText="Stock Name" >
|
||||
<p:outputLabel title= "Stock Name" value="#{stock.companyName}" />
|
||||
</p:column >
|
||||
<p:column headerText="Current Price" >
|
||||
<p:outputLabel title= "Current Price" value="#{stock.priceCurrent}" />
|
||||
</p:column >
|
||||
<p:column headerText="Closing Price" >
|
||||
<p:outputLabel title= "Closing Price" value="#{stock.priceClosing}" />
|
||||
</p:column >
|
||||
<p:column headerText="Shares Avialable" >
|
||||
<p:outputLabel title= "Shares Avialable" value="#{stock.numberOfSharesAvailable}" />
|
||||
</p:column >
|
||||
<p:column headerText="Shares Sold" >
|
||||
<p:outputLabel title= "Shares Sold" value="#{stock.numberOfSharesSold}" />
|
||||
</p:column >
|
||||
|
||||
</p:dataTable>
|
||||
</h:form>
|
||||
</h:body>
|
||||
</html>
|
Binary file not shown.
@ -0,0 +1,45 @@
|
||||
/*
|
||||
Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
|
||||
Click nbfs://nbhost/SystemFileSystem/Templates/JSP_Servlet/CascadeStyleSheet.css to edit this template
|
||||
*/
|
||||
/*
|
||||
Created on : Jan 13, 2024, 9:50:00 AM
|
||||
Author : asdv5
|
||||
*/
|
||||
|
||||
|
||||
.grandParent{
|
||||
margin:0 auto;
|
||||
float:left;
|
||||
min-width:100px;
|
||||
max-width:120px;
|
||||
height:150px;
|
||||
position:relative;
|
||||
border-left: 1px solid #000000;
|
||||
border-right: 1px solid #000000;
|
||||
background:#cccccc;
|
||||
font-size:11px;
|
||||
cursor:pointer;
|
||||
}
|
||||
.theColumn{
|
||||
width:100%;
|
||||
|
||||
padding: 20px;
|
||||
background-color: blue;
|
||||
}
|
||||
|
||||
|
||||
.elementsOfTheColumn{
|
||||
width:60%;
|
||||
margin-left: 10px;
|
||||
display:inline-table;
|
||||
position:relative;
|
||||
}
|
||||
|
||||
.elementsOfTheColumnButton{
|
||||
width:30%;
|
||||
margin-left: 10px;
|
||||
display:inline-table;
|
||||
position:relative;
|
||||
}
|
||||
|
@ -0,0 +1,44 @@
|
||||
/*
|
||||
* Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
|
||||
* Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
|
||||
*/
|
||||
package edu.slcc.asdv.caleb.maxtask;
|
||||
|
||||
import java.math.BigInteger;
|
||||
import java.util.concurrent.ForkJoinPool;
|
||||
import java.util.concurrent.RecursiveTask;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author caleb
|
||||
*/
|
||||
public class Factorial extends RecursiveTask<Integer>
|
||||
{
|
||||
final int n;
|
||||
|
||||
Factorial(int n)
|
||||
{
|
||||
this.n = n;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Integer compute()
|
||||
{
|
||||
if (n == 1 || n <= 1)
|
||||
{
|
||||
return n;
|
||||
}
|
||||
Factorial fact = new Factorial(n - 1);
|
||||
fact.fork();
|
||||
|
||||
return n * fact.join();
|
||||
}
|
||||
|
||||
public static void main(String[] args)
|
||||
{
|
||||
RecursiveTask<Integer> task = new Factorial(4);
|
||||
ForkJoinPool pool = new ForkJoinPool();
|
||||
int fact = pool.invoke(task);
|
||||
System.out.println(fact);
|
||||
}
|
||||
}
|
@ -0,0 +1,58 @@
|
||||
/*
|
||||
* Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
|
||||
* Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
|
||||
*/
|
||||
package edu.slcc.asdv.caleb.maxtask;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author caleb
|
||||
*/
|
||||
import java.math.BigInteger;
|
||||
import java.util.concurrent.ForkJoinPool;
|
||||
import java.util.concurrent.RecursiveTask;
|
||||
|
||||
public class FactorialBig extends RecursiveTask<BigInteger>
|
||||
{
|
||||
final int THRESHOLD = 50;
|
||||
public static void main(String[] args)
|
||||
{
|
||||
RecursiveTask<BigInteger> task = new FactorialBig( new BigInteger( "1060"));
|
||||
ForkJoinPool pool = new ForkJoinPool();
|
||||
BigInteger fact = pool.invoke(task);
|
||||
System.out.println(fact);
|
||||
}
|
||||
final BigInteger n;
|
||||
|
||||
FactorialBig(BigInteger n)
|
||||
{
|
||||
this.n = n;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected BigInteger compute()
|
||||
{
|
||||
if (this.n.compareTo(new BigInteger(String.valueOf(THRESHOLD))) < 0)
|
||||
{
|
||||
if (n == BigInteger.ONE || n == BigInteger.ZERO)
|
||||
return BigInteger.ONE;
|
||||
long fact = 1;
|
||||
//compare factorial with loop
|
||||
for (int i = 2; i < THRESHOLD; ++i)
|
||||
{
|
||||
fact *= i;
|
||||
}
|
||||
return new BigInteger(String.valueOf(fact));
|
||||
}
|
||||
else {
|
||||
//compute factorial in parallel
|
||||
FactorialBig factBig = new FactorialBig(n.subtract(BigInteger.ONE));
|
||||
factBig.fork();
|
||||
|
||||
return n.multiply(factBig.join());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
@ -0,0 +1,50 @@
|
||||
/*
|
||||
* Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
|
||||
* Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
|
||||
*/
|
||||
package edu.slcc.asdv.caleb.maxtask;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author caleb
|
||||
*/
|
||||
import java.util.concurrent.ForkJoinPool;
|
||||
import java.util.concurrent.RecursiveTask;
|
||||
|
||||
public class Fibonacci extends RecursiveTask<Integer>
|
||||
{
|
||||
|
||||
final int n;
|
||||
|
||||
Fibonacci(int n)
|
||||
{
|
||||
this.n = n;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Integer compute()
|
||||
{
|
||||
if (n <= 1)
|
||||
{
|
||||
return n;
|
||||
}
|
||||
Fibonacci f1 = new Fibonacci(n - 1);
|
||||
f1.fork();
|
||||
Fibonacci f2 = new Fibonacci(n - 2);
|
||||
return f2.compute() + f1.join();
|
||||
}
|
||||
public static void main(String[] args)
|
||||
{
|
||||
RecursiveTask<Integer> task = new Fibonacci(8);
|
||||
ForkJoinPool pool = new ForkJoinPool();
|
||||
int fib = pool.invoke(task);
|
||||
System.out.println(fib);
|
||||
}
|
||||
}
|
||||
|
||||
class Test
|
||||
{
|
||||
|
||||
|
||||
}
|
||||
|
@ -0,0 +1,106 @@
|
||||
-- phpMyAdmin SQL Dump
|
||||
-- version 5.2.0
|
||||
-- https://www.phpmyadmin.net/
|
||||
--
|
||||
-- Host: localhost:8889
|
||||
-- Generation Time: Feb 20, 2024 at 06:27 PM
|
||||
-- Server version: 5.7.39
|
||||
-- PHP Version: 7.4.33
|
||||
|
||||
SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
|
||||
START TRANSACTION;
|
||||
SET time_zone = "+00:00";
|
||||
|
||||
|
||||
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
|
||||
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
|
||||
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
|
||||
/*!40101 SET NAMES utf8mb4 */;
|
||||
|
||||
--
|
||||
-- Database: `nyse`
|
||||
--
|
||||
|
||||
-- --------------------------------------------------------
|
||||
|
||||
--
|
||||
-- Table structure for table `stock`
|
||||
--
|
||||
|
||||
CREATE TABLE `stock` (
|
||||
`stock_id` varchar(4) NOT NULL,
|
||||
`company_name` varchar(100) NOT NULL,
|
||||
`price_current` double NOT NULL,
|
||||
`price_closing` double NOT NULL,
|
||||
`number_of_shares_available` bigint(20) NOT NULL,
|
||||
`number_of_shares_sold` bigint(20) NOT NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||
|
||||
--
|
||||
-- Dumping data for table `stock`
|
||||
--
|
||||
|
||||
INSERT INTO `stock` (`stock_id`, `company_name`, `price_current`, `price_closing`, `number_of_shares_available`, `number_of_shares_sold`) VALUES
|
||||
('PLCE', 'Children\'s Place, Inc.', 14.515, 13.515, 10000000, 5000000);
|
||||
|
||||
-- --------------------------------------------------------
|
||||
|
||||
--
|
||||
-- Table structure for table `stock_holder`
|
||||
--
|
||||
|
||||
CREATE TABLE `stock_holder` (
|
||||
`stock_holder_id` int(11) NOT NULL,
|
||||
`name` varchar(50) NOT NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||
|
||||
-- --------------------------------------------------------
|
||||
|
||||
--
|
||||
-- Table structure for table `transactions`
|
||||
--
|
||||
|
||||
CREATE TABLE `transactions` (
|
||||
`stock_holder_id` int(11) NOT NULL,
|
||||
`stock_id` varchar(4) NOT NULL,
|
||||
`qty` int(11) NOT NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||
|
||||
--
|
||||
-- Indexes for dumped tables
|
||||
--
|
||||
|
||||
--
|
||||
-- Indexes for table `stock`
|
||||
--
|
||||
ALTER TABLE `stock`
|
||||
ADD PRIMARY KEY (`stock_id`);
|
||||
|
||||
--
|
||||
-- Indexes for table `stock_holder`
|
||||
--
|
||||
ALTER TABLE `stock_holder`
|
||||
ADD PRIMARY KEY (`stock_holder_id`);
|
||||
|
||||
--
|
||||
-- Indexes for table `transactions`
|
||||
--
|
||||
ALTER TABLE `transactions`
|
||||
ADD PRIMARY KEY (`stock_holder_id`,`stock_id`),
|
||||
ADD KEY `stock_id` (`stock_id`);
|
||||
|
||||
--
|
||||
-- Constraints for dumped tables
|
||||
--
|
||||
|
||||
--
|
||||
-- Constraints for table `transactions`
|
||||
--
|
||||
ALTER TABLE `transactions`
|
||||
ADD CONSTRAINT `transactions_ibfk_1` FOREIGN KEY (`stock_id`) REFERENCES `stock` (`stock_id`) ON DELETE CASCADE ON UPDATE CASCADE,
|
||||
ADD CONSTRAINT `transactions_ibfk_2` FOREIGN KEY (`stock_holder_id`) REFERENCES `stock_holder` (`stock_holder_id`) ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
COMMIT;
|
||||
|
||||
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
|
||||
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
|
||||
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
|
Loading…
Reference in New Issue