:(
This commit is contained in:
parent
f6d0920781
commit
346c76633e
1
.gitignore
vendored
1
.gitignore
vendored
@ -99,3 +99,4 @@
|
||||
/Semester 3/Assignments/TermProject1_CalebFontenot/target/
|
||||
/Semester 3/Assignments/params/target/
|
||||
/Semester 3/Assignments/templatesMatricesSample/target/
|
||||
/Semester 3/Assignments/StockBrokerAjaxThreads/target/
|
||||
|
BIN
Semester 3/Assignments/StockBrokerAjaxThreads.zip
Normal file
BIN
Semester 3/Assignments/StockBrokerAjaxThreads.zip
Normal file
Binary file not shown.
@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Scene Scope="Project" version="2">
|
||||
<Scope Scope="Faces Configuration Only"/>
|
||||
<Scope Scope="Project"/>
|
||||
<Scope Scope="All Faces Configurations"/>
|
||||
</Scene>
|
@ -0,0 +1,20 @@
|
||||
<?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>Facelets</org-netbeans-modules-projectapi.jsf_2e_language>
|
||||
</properties>
|
||||
</project-shared-configuration>
|
53
Semester 3/Assignments/StockBrokerAjaxThreads/pom.xml
Normal file
53
Semester 3/Assignments/StockBrokerAjaxThreads/pom.xml
Normal file
@ -0,0 +1,53 @@
|
||||
<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>StockBrokerAjaxThreads</artifactId>
|
||||
<version>1</version>
|
||||
<packaging>war</packaging>
|
||||
<name>StockBrokerAjaxThreads-1</name>
|
||||
|
||||
<properties>
|
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||
<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>com.mysql</groupId>
|
||||
<artifactId>mysql-connector-j</artifactId>
|
||||
<version>8.1.0</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>
|
||||
</configuration>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-war-plugin</artifactId>
|
||||
<version>3.3.2</version>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
</project>
|
@ -0,0 +1,138 @@
|
||||
/*
|
||||
* 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 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;
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
|
||||
@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,13 @@
|
||||
package asdv.stockbrokerajaxthreads;
|
||||
|
||||
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,20 @@
|
||||
package asdv.stockbrokerajaxthreads.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,188 @@
|
||||
|
||||
package beans;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import jakarta.faces.context.FacesContext;
|
||||
import jakarta.faces.event.AbortProcessingException;
|
||||
import jakarta.faces.event.AjaxBehaviorEvent;
|
||||
import jakarta.faces.view.ViewScoped;
|
||||
import jakarta.inject.Named;
|
||||
import java.util.Date;
|
||||
|
||||
@Named(value = "clientBean")
|
||||
@ViewScoped
|
||||
public class ClientBean implements Serializable
|
||||
{
|
||||
|
||||
|
||||
private boolean viewStcokPrices = false;
|
||||
|
||||
|
||||
private String fromCallerUrlOfParent;
|
||||
private String fromCallerEmail;
|
||||
private String name = "";
|
||||
private String totalValue = "120.00";
|
||||
private String email = "";
|
||||
private String emailAgain = "";
|
||||
private Date date;
|
||||
private String tickets = "1";
|
||||
private String price = "120";
|
||||
private Map<String, Object> ticketAttrs;
|
||||
|
||||
public ClientBean()
|
||||
{
|
||||
getParametersFromCaller();
|
||||
this.ticketAttrs = new HashMap<>();
|
||||
this.ticketAttrs.put("type", "number");
|
||||
this.ticketAttrs.put("min", "1");
|
||||
this.ticketAttrs.put("max", "4");
|
||||
this.ticketAttrs.put("required", "required");
|
||||
this.ticketAttrs.put("title",
|
||||
"Enter a number between 1 and 4 inclusive.");
|
||||
}
|
||||
private void getParametersFromCaller()
|
||||
{
|
||||
//> Get parameters from caller
|
||||
Map<String, String> m = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap();
|
||||
this.fromCallerUrlOfParent = m.get("parent");
|
||||
this.fromCallerEmail = m.get("email");
|
||||
}
|
||||
|
||||
public boolean isViewStcokPrices()
|
||||
{
|
||||
return viewStcokPrices;
|
||||
}
|
||||
|
||||
public void setViewStcokPrices(boolean viewStcokPrices)
|
||||
{
|
||||
this.viewStcokPrices = viewStcokPrices;
|
||||
}
|
||||
public String getFromCallerStockId()
|
||||
{
|
||||
return fromCallerEmail;
|
||||
}
|
||||
|
||||
|
||||
public String getName()
|
||||
{
|
||||
return name;
|
||||
}
|
||||
|
||||
public void setName(String name)
|
||||
{
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public String getTotalValue()
|
||||
{
|
||||
return totalValue;
|
||||
}
|
||||
|
||||
public void setTotalValue(String totalValue)
|
||||
{
|
||||
this.totalValue = totalValue;
|
||||
}
|
||||
|
||||
public String getEmail()
|
||||
{
|
||||
return email;
|
||||
}
|
||||
|
||||
public void setEmail(String email)
|
||||
{
|
||||
this.email = email;
|
||||
}
|
||||
|
||||
public String getEmailAgain()
|
||||
{
|
||||
return emailAgain;
|
||||
}
|
||||
|
||||
public void setEmailAgain(String emailAgain)
|
||||
{
|
||||
this.emailAgain = emailAgain;
|
||||
}
|
||||
|
||||
public Date getDate()
|
||||
{
|
||||
return date;
|
||||
}
|
||||
|
||||
public void setDate(Date date)
|
||||
{
|
||||
this.date = date;
|
||||
}
|
||||
|
||||
public String getTickets()
|
||||
{
|
||||
return tickets;
|
||||
}
|
||||
|
||||
public void setTickets(String tickets)
|
||||
{
|
||||
this.tickets = tickets;
|
||||
}
|
||||
|
||||
public String getPrice()
|
||||
{
|
||||
return price;
|
||||
}
|
||||
|
||||
public void setPrice(String price)
|
||||
{
|
||||
this.price = price;
|
||||
}
|
||||
|
||||
public Map<String, Object> getTicketAttrs()
|
||||
{
|
||||
return ticketAttrs;
|
||||
}
|
||||
|
||||
public void setTicketAttrs(Map<String, Object> ticketAttrs)
|
||||
{
|
||||
this.ticketAttrs = ticketAttrs;
|
||||
}
|
||||
|
||||
public void calculateTotal(AjaxBehaviorEvent event)
|
||||
throws AbortProcessingException
|
||||
{
|
||||
int ticketsNum = 1;
|
||||
int ticketPrice = 0;
|
||||
int total;
|
||||
if (tickets.trim().length() > 0)
|
||||
{
|
||||
ticketsNum = Integer.parseInt(tickets);
|
||||
}
|
||||
if (price.trim().length() > 0)
|
||||
{
|
||||
ticketPrice = Integer.parseInt(price);
|
||||
}
|
||||
total = (ticketsNum * ticketPrice);
|
||||
totalValue = String.valueOf(total) + ".00";
|
||||
}
|
||||
|
||||
public void clear(AjaxBehaviorEvent event)
|
||||
throws AbortProcessingException
|
||||
{
|
||||
name = "";
|
||||
email = "";
|
||||
emailAgain = "";
|
||||
date = null;
|
||||
price = "120.00";
|
||||
totalValue = "120.00";
|
||||
tickets = "1";
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
@ -0,0 +1,57 @@
|
||||
/*
|
||||
* 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 asdv.mp1_ajax.pojos.Stock;
|
||||
import jakarta.inject.Named;
|
||||
import jakarta.enterprise.context.RequestScoped;
|
||||
import jakarta.faces.application.ConfigurableNavigationHandler;
|
||||
import jakarta.faces.context.ExternalContext;
|
||||
import jakarta.faces.context.FacesContext;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author asdv5
|
||||
*/
|
||||
@Named(value = "login")
|
||||
@RequestScoped
|
||||
public class Login
|
||||
{
|
||||
private String email;
|
||||
private String password;
|
||||
|
||||
public String getPassword()
|
||||
{
|
||||
return password;
|
||||
}
|
||||
|
||||
public void setPassword(String password)
|
||||
{
|
||||
this.password = password;
|
||||
}
|
||||
|
||||
|
||||
public String getEmail()
|
||||
{
|
||||
return email;
|
||||
}
|
||||
|
||||
public void setEmail(String email)
|
||||
{
|
||||
this.email = email;
|
||||
}
|
||||
|
||||
|
||||
public void go()
|
||||
{
|
||||
FacesContext fc = FacesContext.getCurrentInstance();
|
||||
ExternalContext ec = fc.getExternalContext();
|
||||
String page = "client-page";
|
||||
String params = "&parent=" + "login";
|
||||
params += "&email=" + this.email;
|
||||
ConfigurableNavigationHandler handler = (ConfigurableNavigationHandler) fc.getApplication().getNavigationHandler();
|
||||
handler.performNavigation(page + "?faces-redirect=true" + params);
|
||||
}
|
||||
}
|
@ -0,0 +1,82 @@
|
||||
|
||||
package beans;
|
||||
|
||||
import factory_1_m.OneToMany;
|
||||
import factory_1_m.OneToManyFactory;
|
||||
import jakarta.faces.view.ViewScoped;
|
||||
import jakarta.inject.Named;
|
||||
import java.io.Serializable;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collection;
|
||||
|
||||
@Named(value = "oneToManyBean")
|
||||
@ViewScoped
|
||||
public class OneToManyBean implements Serializable
|
||||
{
|
||||
private String country;
|
||||
private String city;
|
||||
private String[] countries =
|
||||
{
|
||||
"Greece", "USA"
|
||||
};
|
||||
private String[] citiesGreece =
|
||||
{
|
||||
"Athens", "Sparta"
|
||||
};
|
||||
private String[] citiesUsa =
|
||||
{
|
||||
"Lafayette", "New Orleans", "Houston"
|
||||
};
|
||||
private OneToMany oneToMany = OneToManyFactory.createOneToMany();
|
||||
|
||||
public OneToManyBean()
|
||||
{
|
||||
country = this.countries[1];
|
||||
oneToMany.initializeOne(this.countries);
|
||||
oneToMany.initializeMany(this.countries[0], citiesGreece);
|
||||
oneToMany.initializeMany(this.countries[1], citiesUsa);
|
||||
}
|
||||
|
||||
public OneToMany getOneToMany()
|
||||
{
|
||||
return oneToMany;
|
||||
}
|
||||
|
||||
public String getCountry()
|
||||
{
|
||||
return country;
|
||||
}
|
||||
|
||||
public void setCountry(String country)
|
||||
{
|
||||
this.country = country;
|
||||
}
|
||||
|
||||
public String getCity()
|
||||
{
|
||||
return city;
|
||||
}
|
||||
|
||||
public void setCity(String city)
|
||||
{
|
||||
this.city = city;
|
||||
}
|
||||
|
||||
|
||||
public void handleCountryChange()
|
||||
{
|
||||
if (country != null && !country.equals(""))
|
||||
{
|
||||
getMany();
|
||||
}
|
||||
}
|
||||
|
||||
public Collection<String> getMany()
|
||||
{
|
||||
if (country != null && !country.equals(""))
|
||||
{
|
||||
return this.oneToMany.getMany(country);
|
||||
}
|
||||
return Arrays.asList(citiesGreece);
|
||||
}
|
||||
}
|
@ -0,0 +1,179 @@
|
||||
/*
|
||||
* 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 asdv.mp1_ajax.pojos.Stock;
|
||||
import edu.slcc.ajax.bl.CheckStockPricesThread;
|
||||
import edu.slcc.ajax.utilities.UtilitiesDatabase;
|
||||
import jakarta.annotation.PostConstruct;
|
||||
import jakarta.annotation.PreDestroy;
|
||||
import jakarta.faces.application.FacesMessage;
|
||||
import jakarta.faces.event.AbortProcessingException;
|
||||
import jakarta.faces.event.AjaxBehaviorEvent;
|
||||
import jakarta.faces.view.ViewScoped;
|
||||
import jakarta.inject.Named;
|
||||
import java.io.Serializable;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import org.primefaces.PrimeFaces;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author a.v. markou
|
||||
*/
|
||||
@Named(value = "stockPricesBean")
|
||||
@ViewScoped
|
||||
public class StockPricesBean implements Serializable
|
||||
{
|
||||
private boolean isThreadRunning = false;
|
||||
private List<Stock> stocks;
|
||||
private CheckStockPricesThread stocksThread;
|
||||
private Thread thread;
|
||||
private Object parentIDfromJSF;//the id of the element that contains the
|
||||
// client-page.xhtml
|
||||
// the ID is: "id_form_container:id_pgStocks"
|
||||
|
||||
/**
|
||||
* Creates a new instance of StockBean
|
||||
*
|
||||
* @throws java.lang.Exception
|
||||
*/
|
||||
public StockPricesBean()
|
||||
throws Exception
|
||||
{
|
||||
stocksThread = new CheckStockPricesThread();
|
||||
}
|
||||
|
||||
public void parametersFromJSF(Object o)
|
||||
{
|
||||
parentIDfromJSF = o;
|
||||
System.out.println(o + " ------------------parametersFromJSF");
|
||||
}
|
||||
|
||||
@PostConstruct
|
||||
void init()
|
||||
{
|
||||
try
|
||||
{
|
||||
thread = new Thread(stocksThread);
|
||||
thread.start();
|
||||
isThreadRunning = true;
|
||||
stocks = this.stocksThread.getStocks();
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
System.out.println(e);
|
||||
UtilitiesDatabase.addMessage(FacesMessage.SEVERITY_FATAL, "Problem occurred with the database.", e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* The PreDestroy for this bean will not be called until the application
|
||||
* terminates There is an issue with JSF. You can verify this by looking ta
|
||||
* the log of Glassfish for the sout "destroy called" WE HAVE TO KILL THE
|
||||
* THREADS manually with stop method since pre-destroy is not called when
|
||||
* the this Bean is not viewed anymore.
|
||||
*
|
||||
* @ViewScoped: a bean in this scope lives as long as you're interacting
|
||||
* with the same JSF view in the browser window/tab. It get created upon a
|
||||
* HTTP request and get destroyed once you postback to a different view. It
|
||||
* doesn't immediately get destroyed when you leave/close the view by a GET
|
||||
* request, but it is not accessible the usual way anymore. JSF stores the
|
||||
* bean in the UIViewRoot#getViewMap() with the managed bean name as key,
|
||||
* which is in turn stored in the session. You need to return null or void
|
||||
* from action (listener) methods to keep the bean alive. Use this scope for
|
||||
* more complex forms which use ajax, data tables and/or several
|
||||
* rendered/disabled attributes whose state needs to be retained in the
|
||||
* subsequent requests within the same browser window/tab (view). When you
|
||||
* want to destroy the bean manually) call the @PreDesroy, use commandLink
|
||||
* to leave the page.
|
||||
*/
|
||||
@PreDestroy
|
||||
void destroy()
|
||||
{
|
||||
System.out.println("destroy called");
|
||||
if (thread != null)
|
||||
{
|
||||
if (thread.isAlive())
|
||||
{
|
||||
thread.stop();
|
||||
isThreadRunning = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public List<Stock> getStocks()
|
||||
{
|
||||
return stocks;
|
||||
}
|
||||
|
||||
public void setStocks(List<Stock> stocks)
|
||||
{
|
||||
this.stocks = stocks;
|
||||
}
|
||||
|
||||
public void mouseClickListener(AjaxBehaviorEvent event)
|
||||
throws AbortProcessingException
|
||||
{
|
||||
System.out.println("+++on click called" + " isThreadRunning=" + isThreadRunning);
|
||||
if (thread != null)
|
||||
{
|
||||
if (!thread.isAlive())
|
||||
{
|
||||
if (isThreadRunning == false)
|
||||
{
|
||||
isThreadRunning = true;
|
||||
System.out.println("\tthread.isAlive()=" + thread.isAlive());
|
||||
System.out.println("\tcreating new thread");
|
||||
thread = new Thread(stocksThread);
|
||||
thread.start();
|
||||
System.out.println("\tthread.start() called");
|
||||
refresh();
|
||||
UtilitiesDatabase.addMessage(FacesMessage.SEVERITY_INFO, "on click", "started a thread");
|
||||
}
|
||||
}
|
||||
else//thread is alive, kill it
|
||||
{
|
||||
System.out.println("\tthread=" + thread);
|
||||
System.out.println("\tthread.isAlive()=" + thread.isAlive());
|
||||
thread.stop();
|
||||
System.out.println("\tthread.stop() called");
|
||||
isThreadRunning = false;
|
||||
UtilitiesDatabase.addMessage(FacesMessage.SEVERITY_INFO, "on click", "destoyed a thread");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (isThreadRunning == false)
|
||||
{
|
||||
isThreadRunning = true;
|
||||
System.out.println("\tthread.isAlive()=" + thread.isAlive());
|
||||
System.out.println("\tcreating new thread");
|
||||
thread = new Thread(stocksThread);
|
||||
thread.start();
|
||||
System.out.println("\tthread.start() called");
|
||||
refresh();
|
||||
UtilitiesDatabase.addMessage(FacesMessage.SEVERITY_INFO, "on click", "started a thread");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void refresh()
|
||||
{
|
||||
System.out.println("refresh!!!()");
|
||||
if (stocksThread != null)
|
||||
{
|
||||
List<String> id = new ArrayList();
|
||||
id.add(this.parentIDfromJSF.toString());
|
||||
stocks = stocksThread.getStocks();
|
||||
PrimeFaces.current().ajax().update(this.parentIDfromJSF.toString());
|
||||
}
|
||||
else
|
||||
{
|
||||
UtilitiesDatabase.addMessage(FacesMessage.SEVERITY_INFO, "stocksThread is null", "");
|
||||
}
|
||||
//FacesContext.getCurrentInstance().getPartialViewContext().getRenderIds().add("f1:id_dataTable1");
|
||||
}
|
||||
}
|
@ -0,0 +1,87 @@
|
||||
package edu.slcc.ajax.bl;
|
||||
|
||||
import asdv.mp1_ajax.pojos.Stock;
|
||||
import edu.slcc.ajax.utilities.UtilitiesDatabase;
|
||||
import java.io.Serializable;
|
||||
import java.sql.Connection;
|
||||
import java.sql.PreparedStatement;
|
||||
import java.sql.SQLException;
|
||||
import java.util.List;
|
||||
|
||||
public class CheckStockPricesThread
|
||||
implements Runnable, Serializable
|
||||
{
|
||||
static int numberOfThreads = 0;//
|
||||
long numberOfCallsToDatabase = 0;
|
||||
StockDB stockDB;
|
||||
List<Stock> stocks;
|
||||
String databaseName = "nyse";
|
||||
String userName = "java";
|
||||
String password = "java";
|
||||
String URL2 = "com.mysql.jdbc.Driver";
|
||||
PreparedStatement ps = null;
|
||||
Connection con = null;
|
||||
|
||||
public CheckStockPricesThread() throws Exception
|
||||
{
|
||||
con = new UtilitiesDatabase().connection(databaseName, userName, password, URL2);
|
||||
// close the resources
|
||||
stockDB = new StockDB();
|
||||
System.out.println("CheckStockPrices Runnable created.");
|
||||
stocks = stockDB.findAll(
|
||||
con,
|
||||
databaseName,
|
||||
userName,
|
||||
password,
|
||||
URL2
|
||||
);
|
||||
}
|
||||
|
||||
public List<Stock> getStocks()
|
||||
{
|
||||
return stocks;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run()
|
||||
{
|
||||
numberOfThreads++;
|
||||
|
||||
try
|
||||
{
|
||||
while (true)//isInterrupted method Does not clear flag
|
||||
{
|
||||
System.out.println("threads = " + numberOfThreads + "\t" + this +": database-calls = " + ++numberOfCallsToDatabase);
|
||||
stocks = stockDB.findAll(
|
||||
con,
|
||||
databaseName,
|
||||
userName,
|
||||
password,
|
||||
URL2
|
||||
);
|
||||
Thread.sleep(2000);
|
||||
}
|
||||
}
|
||||
catch (InterruptedException e)
|
||||
{
|
||||
System.out.println("---------------------------------Thread interrupt:" + e);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
try
|
||||
{
|
||||
new UtilitiesDatabase().closeDatabaseConnection(con);
|
||||
}
|
||||
catch (SQLException se)
|
||||
{
|
||||
System.out.println(se);
|
||||
}
|
||||
}
|
||||
finally
|
||||
{
|
||||
numberOfThreads--;
|
||||
System.out.println(this + " finally called threads=" + numberOfThreads + ", \ttotal database-calls=" + ++numberOfCallsToDatabase);
|
||||
numberOfCallsToDatabase = 0;
|
||||
}
|
||||
}
|
||||
}
|
@ -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)
|
||||
throws Exception;
|
||||
|
||||
void edit(T t)
|
||||
throws Exception;
|
||||
|
||||
void remove(T t)
|
||||
throws Exception;
|
||||
|
||||
T find(Object id)
|
||||
throws Exception;
|
||||
|
||||
List<T> findAll()
|
||||
throws Exception;
|
||||
|
||||
int count() throws Exception;
|
||||
}
|
@ -0,0 +1,413 @@
|
||||
/*
|
||||
* 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 edu.slcc.ajax.utilities.UtilitiesDatabase;
|
||||
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.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author asdv5
|
||||
*/
|
||||
public class StockDB
|
||||
implements Dao<Stock>, Serializable
|
||||
{
|
||||
@Override
|
||||
public List<Stock> findAll()
|
||||
throws Exception
|
||||
{
|
||||
List<Stock> tableStocks = new ArrayList<Stock>();
|
||||
String databaseName = "nyse";
|
||||
String userName = "java";
|
||||
String password = "java";
|
||||
String URL2 = "com.mysql.jdbc.Driver";
|
||||
PreparedStatement ps = null;
|
||||
Connection con = null;
|
||||
try
|
||||
{
|
||||
con = new UtilitiesDatabase().connection(
|
||||
databaseName, userName, password, URL2);
|
||||
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;
|
||||
}
|
||||
|
||||
public List<Stock> findAll(Connection con,
|
||||
String databaseName,
|
||||
String userName,
|
||||
String password,
|
||||
String URL2
|
||||
)
|
||||
throws Exception
|
||||
{
|
||||
List<Stock> tableStocks = new ArrayList<Stock>();
|
||||
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
|
||||
{
|
||||
if (ps != null)
|
||||
{
|
||||
ps.close();
|
||||
}
|
||||
}
|
||||
return tableStocks;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void create(Stock t)
|
||||
throws Exception
|
||||
{
|
||||
int result = 0;
|
||||
Connection con = null;
|
||||
try
|
||||
{
|
||||
con = new UtilitiesDatabase().connection(
|
||||
"nyse", "java", "java", "com.mysql.jdbc.Driver");
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
System.err.println(e);
|
||||
throw e;
|
||||
}
|
||||
PreparedStatement updateStock = null;
|
||||
try
|
||||
{
|
||||
updateStock = con.prepareStatement(
|
||||
"INSERT INTO stock (stock_id, company_name, price_current, price_closing, number_of_shares_available, number_of_shares_sold ) "
|
||||
+ "VALUES ( ?, ?, ? , ? ,? , ?)");
|
||||
updateStock.setString(1, t.getStockId());
|
||||
updateStock.setString(2, t.getCompanyName());
|
||||
updateStock.setDouble(3, t.getPriceCurrent());
|
||||
updateStock.setDouble(4, t.getPriceClosing());
|
||||
updateStock.setLong(5, t.getNumberOfSharesAvailable());
|
||||
updateStock.setLong(6, t.getNumberOfSharesSold());
|
||||
int updateCount = updateStock.executeUpdate();
|
||||
result = updateCount;
|
||||
}
|
||||
catch (SQLException ex)
|
||||
{
|
||||
System.err.println(ex.toString());
|
||||
throw ex;
|
||||
}
|
||||
finally
|
||||
{
|
||||
try
|
||||
{
|
||||
new UtilitiesDatabase().closeDatabaseConnection(con);
|
||||
// close the resources
|
||||
if (updateStock != null)
|
||||
{
|
||||
updateStock.close();
|
||||
}
|
||||
}
|
||||
catch (SQLException e)
|
||||
{
|
||||
System.err.println(e.toString());
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void edit(Stock t)
|
||||
throws Exception
|
||||
{
|
||||
String databaseName = "nyse";
|
||||
String userName = "java";
|
||||
String password = "java";
|
||||
String URL2 = "com.mysql.jdbc.Driver";
|
||||
Connection con = null;
|
||||
PreparedStatement updateSupplier = null;
|
||||
try
|
||||
{
|
||||
con = new UtilitiesDatabase().connection(
|
||||
databaseName, userName, password, URL2);
|
||||
if (con == null)
|
||||
{
|
||||
throw new RuntimeException("cannot connect to database");
|
||||
}
|
||||
updateSupplier = null;
|
||||
updateSupplier = con.prepareStatement(
|
||||
"UPDATE stock SET stock_id=?, company_name=?, price_current=?, price_closing=?, number_of_shares_available=?, "
|
||||
+ "number_of_shares_sold=? "
|
||||
+ "WHERE stock_id=?");
|
||||
updateSupplier.setString(1, t.getStockId());
|
||||
updateSupplier.setString(2, t.getCompanyName());
|
||||
updateSupplier.setDouble(3, t.getPriceCurrent());
|
||||
updateSupplier.setDouble(4, t.getPriceClosing());
|
||||
updateSupplier.setLong(5, t.getNumberOfSharesAvailable());
|
||||
updateSupplier.setLong(6, t.getNumberOfSharesSold());
|
||||
updateSupplier.setString(7, t.getStockId());
|
||||
int result = updateSupplier.executeUpdate();
|
||||
}
|
||||
catch (SQLException ex)
|
||||
{
|
||||
System.err.println(ex.toString());
|
||||
throw ex;
|
||||
}
|
||||
finally
|
||||
{
|
||||
try
|
||||
{
|
||||
new UtilitiesDatabase().closeDatabaseConnection(con);
|
||||
// close the resources
|
||||
if (updateSupplier != null)
|
||||
{
|
||||
updateSupplier.close();
|
||||
}
|
||||
}
|
||||
catch (SQLException sqlee)
|
||||
{
|
||||
sqlee.printStackTrace();
|
||||
throw sqlee;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void remove(Stock t)
|
||||
throws Exception
|
||||
{
|
||||
String databaseName = "nyse";
|
||||
String userName = "java";
|
||||
String password = "java";
|
||||
String URL2 = "com.mysql.jdbc.Driver";
|
||||
Connection con = null;
|
||||
PreparedStatement ps = null;
|
||||
try
|
||||
{
|
||||
con = new UtilitiesDatabase().connection(
|
||||
databaseName, userName, password, URL2);
|
||||
if (con == null)
|
||||
{
|
||||
throw new RuntimeException("cannot connect to database");
|
||||
}
|
||||
int rowsAffected = -1;
|
||||
String query = "DELETE FROM stock WHERE stock_id=? ";
|
||||
ps = con.prepareStatement(query);
|
||||
ps.setString(1, t.getStockId());
|
||||
rowsAffected = ps.executeUpdate();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
System.err.println(ex.toString());
|
||||
}
|
||||
finally
|
||||
{
|
||||
try
|
||||
{
|
||||
new UtilitiesDatabase().closeDatabaseConnection(con);
|
||||
// close the resources
|
||||
if (ps != null)
|
||||
{
|
||||
ps.close();
|
||||
}
|
||||
}
|
||||
catch (SQLException sqlee)
|
||||
{
|
||||
sqlee.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Stock find(Object id)
|
||||
throws Exception
|
||||
{
|
||||
String databaseName = "nyse";
|
||||
String userName = "java";
|
||||
String password = "java";
|
||||
String URL2 = "com.mysql.jdbc.Driver";
|
||||
PreparedStatement ps = null;
|
||||
Connection con = null;
|
||||
try
|
||||
{
|
||||
con = new UtilitiesDatabase().connection(
|
||||
databaseName, userName, password, URL2);
|
||||
if (con == null)
|
||||
{
|
||||
throw new RuntimeException("cannot connect to database");
|
||||
}
|
||||
String table = "";
|
||||
ResultSet rs = null;
|
||||
String sqlStr = "SELECT * FROM stock WHERE stock_id=? ";
|
||||
//prepare statement
|
||||
ps = con.prepareStatement(sqlStr);
|
||||
ps.setString(1, (String) id);
|
||||
//execute
|
||||
rs = ps.executeQuery();
|
||||
if (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);
|
||||
return 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 null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int count()
|
||||
throws Exception
|
||||
{
|
||||
String databaseName = "nyse";
|
||||
String userName = "java";
|
||||
String password = "java";
|
||||
String URL2 = "com.mysql.jdbc.Driver";
|
||||
PreparedStatement ps = null;
|
||||
Connection con = null;
|
||||
int rowCount = -1;
|
||||
try
|
||||
{
|
||||
con = new UtilitiesDatabase().connection(
|
||||
databaseName, userName, password, URL2);
|
||||
if (con == null)
|
||||
{
|
||||
throw new RuntimeException("cannot connect to database");
|
||||
}
|
||||
ResultSet rs = null;
|
||||
String sqlStr = "SELECT count(*) " + " FROM " + "stock";
|
||||
ps = con.prepareStatement(sqlStr);
|
||||
rs = ps.executeQuery(sqlStr);
|
||||
if (rs.next() == true)
|
||||
{
|
||||
rowCount = rs.getInt(1);
|
||||
}
|
||||
}
|
||||
catch (SQLException ex)
|
||||
{
|
||||
Logger.getLogger(StockDB.class.getName()).log(Level.SEVERE, null, ex);
|
||||
ex.printStackTrace();
|
||||
throw ex;
|
||||
}
|
||||
finally
|
||||
{
|
||||
try
|
||||
{
|
||||
if (ps != null)
|
||||
{
|
||||
ps.close();
|
||||
}
|
||||
}
|
||||
catch (SQLException sqle)
|
||||
{
|
||||
Logger.getLogger(StockDB.class.getName()).log(Level.WARNING, null, sqle);
|
||||
sqle.printStackTrace();
|
||||
throw sqle;
|
||||
}
|
||||
}
|
||||
return rowCount;
|
||||
}
|
||||
}
|
@ -0,0 +1,111 @@
|
||||
/*
|
||||
* 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.utilities;
|
||||
|
||||
import jakarta.faces.application.FacesMessage;
|
||||
import jakarta.faces.context.FacesContext;
|
||||
import java.sql.Connection;
|
||||
import java.sql.DriverManager;
|
||||
import java.sql.SQLException;
|
||||
import java.text.ParseException;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.Iterator;
|
||||
|
||||
public class UtilitiesDatabase
|
||||
{
|
||||
public Connection connection(
|
||||
String databaseName,
|
||||
String userName,
|
||||
String password,
|
||||
String URL2
|
||||
) throws SQLException, InstantiationException,
|
||||
IllegalAccessException, ClassNotFoundException
|
||||
{
|
||||
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);
|
||||
throw e;
|
||||
}
|
||||
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());
|
||||
throw e;
|
||||
}
|
||||
System.out.println("connection successfull");
|
||||
return con;
|
||||
}
|
||||
|
||||
public void closeDatabaseConnection(Connection con)
|
||||
throws SQLException
|
||||
{
|
||||
try
|
||||
{
|
||||
if (con != null)
|
||||
{
|
||||
con.close();
|
||||
}
|
||||
}
|
||||
catch (SQLException e)
|
||||
{
|
||||
System.out.println(e);
|
||||
e.printStackTrace();
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
|
||||
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());
|
||||
}
|
||||
|
||||
|
||||
public static void addMessage(FacesMessage.Severity severity, String summary, String detail)
|
||||
{
|
||||
FacesMessage msg = new FacesMessage(severity, summary, detail);
|
||||
FacesContext.getCurrentInstance().addMessage(null, msg);
|
||||
}
|
||||
|
||||
public static void clearAllMessages()
|
||||
{
|
||||
FacesContext context = FacesContext.getCurrentInstance();
|
||||
Iterator<FacesMessage> it = context.getMessages();
|
||||
while (it.hasNext())
|
||||
{
|
||||
it.next();
|
||||
it.remove();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,68 @@
|
||||
/*
|
||||
* 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 factory_1_m;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author asdv5
|
||||
* @param <One>
|
||||
* @param <Many>
|
||||
*/
|
||||
public interface OneToMany<One, Many>
|
||||
{
|
||||
/**
|
||||
* Initialization of Ones. The method should be used first before any other
|
||||
* methods
|
||||
*
|
||||
* @param one - the ones ( i.e, countries, or SelectItem or any Object) to
|
||||
* use for initialization
|
||||
* @return true if the initialization succeeded by using the method once,
|
||||
* false when the method is used more than once.
|
||||
*/
|
||||
boolean initializeOne(One... one);
|
||||
|
||||
/**
|
||||
* Initialization of the many for a given one. The method can be used
|
||||
* multiple times after the method initializeOne has succeeded.
|
||||
*
|
||||
* @param one - the one that has the many
|
||||
* @param many - the many which belong to th eone
|
||||
* @throws IllegalArgumentException when the one does not exist (i.e. user's
|
||||
* typing error for the name of one) or when the initialization of the one
|
||||
* has not occurred.
|
||||
*
|
||||
*/
|
||||
void initializeMany(One one, Many... many)
|
||||
throws IllegalArgumentException;
|
||||
|
||||
|
||||
/**
|
||||
* Gets the many of a specific one.
|
||||
*
|
||||
* @param one the one to get its many
|
||||
* @return the many of the parameter one or null if the one does not exist.
|
||||
*/
|
||||
Collection<Many> getMany(One one);
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Given a value of the many it gets the one that the many belongs to.
|
||||
*
|
||||
* @param many one of the values of the many
|
||||
* @return the one
|
||||
*/
|
||||
One getOne(Many many);
|
||||
|
||||
/**
|
||||
* Gets a set with all the ones
|
||||
*
|
||||
* @return the set of ones.
|
||||
*/
|
||||
Set<One> getAllOnes();
|
||||
}
|
@ -0,0 +1,204 @@
|
||||
package factory_1_m;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collection;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.Map.Entry;
|
||||
import java.util.Set;
|
||||
|
||||
public class OneToManyFactory
|
||||
{
|
||||
/**
|
||||
* Creates an object of type OneToMany
|
||||
*
|
||||
* @param <One> a generic parameter can be any object that denotes a One.
|
||||
* @param <Many> a generic parameter can be any object that denotes a city
|
||||
* that belongs to the one generic type.
|
||||
* @return a OneCity object.
|
||||
*/
|
||||
public static <One, Many> //generic types to be used in the method
|
||||
OneToMany<One, Many> //rturn type
|
||||
createOneToMany()
|
||||
{
|
||||
return new OneToMany<One, Many>()
|
||||
{
|
||||
private Map<Object, Object> oneToMany = new HashMap();
|
||||
boolean oneInitialized = false;
|
||||
boolean manyInitialized = false;
|
||||
|
||||
@Override
|
||||
public boolean initializeOne(One... one)
|
||||
{
|
||||
if (oneInitialized == false && manyInitialized == false)
|
||||
{
|
||||
for (int i = 0; i < one.length; ++i)
|
||||
{
|
||||
oneToMany.put(one[i], new Boolean(true));
|
||||
}
|
||||
oneInitialized = true;
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void initializeMany(One one, Many... many)
|
||||
throws IllegalArgumentException
|
||||
{
|
||||
if (oneToMany.get(one) == null)//if the key of the one is null
|
||||
{//the method initializekey has not been used
|
||||
throw new IllegalArgumentException(one + " is not valid");
|
||||
}
|
||||
oneToMany.put(one, new ArrayList<Many>(Arrays.asList(many)));
|
||||
manyInitialized = true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Collection<Many> getMany(One one)
|
||||
throws IllegalArgumentException
|
||||
{
|
||||
if (oneInitialized == true && manyInitialized == true)
|
||||
{
|
||||
if (oneToMany.get(one) == null)
|
||||
{
|
||||
throw new IllegalArgumentException(one + " is not a valid One");
|
||||
}
|
||||
Collection c1 = (Collection) oneToMany.get(one);
|
||||
return c1;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public One getOne(Many many)
|
||||
{
|
||||
Set< Entry<Object, Object>> set = oneToMany.entrySet();
|
||||
for (Map.Entry<Object, Object> entry : oneToMany.entrySet())
|
||||
{
|
||||
One key = (One) entry.getKey();
|
||||
Collection<Many> value = (Collection<Many>) oneToMany.get(key);
|
||||
if (value.contains(many))
|
||||
{
|
||||
return key;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Set<One> getAllOnes()
|
||||
{
|
||||
return (Set<One>) oneToMany.keySet();
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
public static void main(String[] args)
|
||||
{
|
||||
OneToMany cc = OneToManyFactory.createOneToMany();
|
||||
try
|
||||
{
|
||||
cc.initializeMany("France", "Paris");
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
System.err.println(e);
|
||||
}
|
||||
boolean b1 = cc.initializeOne("USA", "Greece");
|
||||
System.out.println(b1);
|
||||
boolean b2 = cc.initializeOne("USA", "Greece");
|
||||
System.out.println(b2);
|
||||
cc.initializeMany("USA", "Lafayette", "New Orleans");
|
||||
cc.initializeMany("Greece", "Athens", "Sparta");
|
||||
Collection<String> cities1 = cc.getMany("USA");
|
||||
System.out.println(cities1);
|
||||
Collection<String> cities2 = cc.getMany("Greece");
|
||||
System.out.println(cities2);
|
||||
System.out.println(cc.getOne("Athens"));
|
||||
System.out.println(cc.getOne("Lafayette"));
|
||||
System.out.println(cc.getOne("France"));
|
||||
try
|
||||
{
|
||||
System.out.println(cc.getMany("Germany"));
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
System.err.println(e);
|
||||
}
|
||||
System.out.println(cc.getAllOnes());
|
||||
System.out.println("--------------------------------------");
|
||||
OneToMany supplierParts = OneToManyFactory.createOneToMany();
|
||||
Supplier s1 = new Supplier("s1");
|
||||
Supplier s2 = new Supplier("s2");
|
||||
supplierParts.initializeOne(s1, s2);
|
||||
|
||||
Part p1 = new Part("p1");
|
||||
Part p2 = new Part("p2");
|
||||
Part p3 = new Part("p3");
|
||||
Part p4 = new Part("p4");
|
||||
supplierParts.initializeMany(s1, p1,p2);
|
||||
supplierParts.initializeMany(s2, p3,p4);
|
||||
|
||||
System.out.println( supplierParts.getMany(s1));
|
||||
System.out.println( supplierParts.getMany(s2));
|
||||
System.out.println( supplierParts.getOne(p1) );
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
class Supplier
|
||||
{
|
||||
private String name;
|
||||
|
||||
public Supplier(String name)
|
||||
{
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public String getName()
|
||||
{
|
||||
return name;
|
||||
}
|
||||
|
||||
public void setName(String name)
|
||||
{
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString()
|
||||
{
|
||||
return "Supplier{" + "name=" + name + '}';
|
||||
}
|
||||
}
|
||||
|
||||
class Part
|
||||
{
|
||||
private String name;
|
||||
|
||||
public Part(String name)
|
||||
{
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public String getName()
|
||||
{
|
||||
return name;
|
||||
}
|
||||
|
||||
public void setName(String name)
|
||||
{
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString()
|
||||
{
|
||||
return "Part{" + "name=" + name + '}';
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
@ -0,0 +1,39 @@
|
||||
/*
|
||||
* 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 factory_1_m;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.HashMap;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author asdv5
|
||||
*/
|
||||
public class TestMap
|
||||
{
|
||||
public static void main(String[] args)
|
||||
{
|
||||
HashMap<String, ArrayList<String>> map = new HashMap();
|
||||
ArrayList l1 = new ArrayList<String>();
|
||||
l1.add("p1");
|
||||
l1.add("p2");
|
||||
map.put("e1", l1);
|
||||
ArrayList l2 = new ArrayList<String>();
|
||||
l2.add("p2");
|
||||
l2.add("p3");
|
||||
map.put("e2", l2);
|
||||
System.out.println(map);
|
||||
|
||||
|
||||
Collection<ArrayList<String>> c = map.values();
|
||||
System.out.println(c);
|
||||
for (ArrayList<String> a : c )
|
||||
a.remove("p2");
|
||||
System.out.println(c);
|
||||
System.out.println(map);
|
||||
|
||||
}
|
||||
}
|
@ -0,0 +1,7 @@
|
||||
<?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">
|
||||
<!-- Define Persistence Unit -->
|
||||
<persistence-unit name="my_persistence_unit">
|
||||
|
||||
</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,16 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
|
||||
<faces-config version="4.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-facesconfig_4_0.xsd">
|
||||
|
||||
<!-- We can start the bean automatically -->
|
||||
<!--
|
||||
<managed-bean>
|
||||
<managed-bean-name>userBean</managed-bean-name>
|
||||
<managed-bean-class>beans.CheckStockPricesBean</managed-bean-class>
|
||||
|
||||
<managed-bean-scope>application</managed-bean-scope></managed-bean>
|
||||
-->
|
||||
</faces-config>
|
@ -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,60 @@
|
||||
<?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>
|
||||
|
||||
|
||||
<mime-mapping>
|
||||
<extension>otf</extension>
|
||||
<mime-type>font/opentype</mime-type>
|
||||
</mime-mapping>
|
||||
|
||||
<mime-mapping>
|
||||
<extension>ttf</extension>
|
||||
<mime-type>application/x-font-ttf</mime-type>
|
||||
</mime-mapping>
|
||||
|
||||
<mime-mapping>
|
||||
<extension>woff</extension>
|
||||
<mime-type>application/x-font-woff</mime-type>
|
||||
</mime-mapping>
|
||||
|
||||
<mime-mapping>
|
||||
<extension>woff2</extension>
|
||||
<mime-type>application/x-font-woff2</mime-type>
|
||||
</mime-mapping>
|
||||
<mime-mapping>
|
||||
<extension>svg</extension>
|
||||
<mime-type>image/svg+xml</mime-type>
|
||||
</mime-mapping>
|
||||
<mime-mapping>
|
||||
<extension>eot</extension>
|
||||
<mime-type>application/vnd.ms-fontobject</mime-type>
|
||||
</mime-mapping>
|
||||
|
||||
|
||||
|
||||
<welcome-file-list>
|
||||
<welcome-file>faces/login.xhtml</welcome-file>
|
||||
</welcome-file-list>
|
||||
|
||||
|
||||
|
||||
|
||||
</web-app>
|
@ -0,0 +1,97 @@
|
||||
<?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:p="http://primefaces.org/ui"
|
||||
xmlns:f5="http://xmlns.jcp.org/jsf/passthrough"
|
||||
|
||||
xmlns:ui="jakarta.faces.facelets"
|
||||
xmlns:f="jakarta.faces.core">
|
||||
<h:head>
|
||||
<title>Client</title>
|
||||
</h:head>
|
||||
|
||||
<h:body>
|
||||
<h:form id="f1">
|
||||
<p:growl id="id_growl_messages_client"
|
||||
globalOnly="true"
|
||||
showDetail="true" redisplay="false"/>
|
||||
<h1> User Name: #{clientBean.fromCallerStockId} </h1>
|
||||
<h:panelGrid columns="1" cellpadding="10" >
|
||||
<p:column>
|
||||
<p:outputLabel value="Your Country: " />
|
||||
<p:selectOneMenu
|
||||
id="countries" value="#{oneToManyBean.country}">
|
||||
<f:selectItems value="#{oneToManyBean.oneToMany.getAllOnes()}" />
|
||||
|
||||
<p:ajax listener= "#{oneToManyBean.handleCountryChange}"
|
||||
event="change" update="cities" process="@this"/>
|
||||
</p:selectOneMenu>
|
||||
|
||||
<p:outputLabel value="Your City: " />
|
||||
<p:selectOneMenu id="cities" value="#{oneToManyBean.city}">
|
||||
<f:selectItems value="#{oneToManyBean.getMany()}" />
|
||||
</p:selectOneMenu>
|
||||
|
||||
</p:column>
|
||||
<p:column>
|
||||
<p:calendar id="date"
|
||||
f5:placeholder="Date to buy/sell stocks"
|
||||
readonlyInput="true"
|
||||
value="#{clientBean.date}"
|
||||
required="required"
|
||||
title="Enter or choose a date."/>
|
||||
</p:column>
|
||||
<p:column>
|
||||
<p:outputLabel value="Number of Stocks: " />
|
||||
|
||||
<h:inputText id="tickets" value="#{clientBean.tickets}">
|
||||
<f:passThroughAttributes value="#{clientBean.ticketAttrs}"/>
|
||||
<p:ajax event="change" update="total"
|
||||
listener="#{clientBean.calculateTotal}"/>
|
||||
</h:inputText>
|
||||
<p:outputLabel value="Stock price: " />
|
||||
<p:inputText id="price"
|
||||
value="#{clientBean.price}"
|
||||
|
||||
p:step="20" p:required="required" >
|
||||
<p:ajax event="change" update="total" process="@this"
|
||||
listener="#{clientBean.calculateTotal}"/>
|
||||
</p:inputText>
|
||||
<br/>
|
||||
<p:outputLabel value="Estimated total: " />
|
||||
<p:outputLabel id="total"
|
||||
value="#{clientBean.totalValue}"
|
||||
>
|
||||
</p:outputLabel>
|
||||
</p:column>
|
||||
</h:panelGrid>
|
||||
<p:commandButton value="Clear"
|
||||
action="confirmation">
|
||||
<p:ajax update="@all" listener="#{clientBean.clear}"/>
|
||||
</p:commandButton>
|
||||
<br/>
|
||||
<p:selectBooleanCheckbox itemLabel="See Stock Prices"
|
||||
value="#{clientBean.viewStcokPrices}" >
|
||||
<p:ajax
|
||||
event="change" process="@this"
|
||||
update="id_form_container:id_pgStocks"
|
||||
/>
|
||||
</p:selectBooleanCheckbox>
|
||||
|
||||
</h:form >
|
||||
<h:form id="id_form_container">
|
||||
<p:panelGrid id="id_pgStocks" columns="1" >
|
||||
<p:column rendered="#{clientBean.viewStcokPrices}" >
|
||||
<ui:include src="stock-prices.xhtml" >
|
||||
<ui:param name="id_parent"
|
||||
value="id_form_container:id_pgStocks"/>
|
||||
</ui:include >
|
||||
</p:column>
|
||||
</p:panelGrid>
|
||||
<p:commandLink value="destroy the view-scoped clientBean and the included view-scoped bean " action="client-page"/>
|
||||
|
||||
</h:form>
|
||||
</h:body>
|
||||
</html>
|
||||
|
@ -0,0 +1,35 @@
|
||||
<?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:ui="http://xmlns.jcp.org/jsf/facelets"
|
||||
xmlns:f5="http://xmlns.jcp.org/jsf/passthrough"
|
||||
xmlns:p="http://primefaces.org/ui">
|
||||
<h:head>
|
||||
<title >Login</title>
|
||||
</h:head>
|
||||
<h:body>
|
||||
|
||||
<h:form style=" margin-top:10%; display: block;
|
||||
margin-left: auto; margin-right: auto;
|
||||
width: fit-content" >
|
||||
<h3 style="color: grey"> Login </h3>
|
||||
<p:panelGrid columns="1" style=" border-top: solid lightgray; border-bottom: solid lightgray">
|
||||
<p:column style=" background:#fffffa" >
|
||||
<p:inputText required="true" style="margin-right: 20px" value="#{login.email}" f5:type="email" f5:placeholder="E-mail"/>
|
||||
<p:password required="true" value="#{login.password}" f5:placeholder="Password"
|
||||
/>
|
||||
</p:column>
|
||||
<p:column style=" background:#fffffa" >
|
||||
<p:commandButton style=" display: block;
|
||||
margin-left: auto;
|
||||
border-radius: 30%;
|
||||
margin-right: auto;border: 3px solid lightblue;"
|
||||
|
||||
ajax="false" value="Login" action="#{login.go}" />
|
||||
</p:column>
|
||||
</p:panelGrid>
|
||||
</h:form>
|
||||
</h:body>
|
||||
</html>
|
||||
|
@ -0,0 +1,79 @@
|
||||
<?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"
|
||||
xmlns:ui="jakarta.faces.facelets">
|
||||
<h:head>
|
||||
<title>MP1 Ajax</title>
|
||||
<h:outputStylesheet library="css" name="styles.css"/>
|
||||
</h:head>
|
||||
<h:body>
|
||||
<ui:composition>
|
||||
${stockPricesBean.parametersFromJSF(id_parent)}
|
||||
<h:form id="id_f11" >
|
||||
<p:growl id="id_growl_messages"
|
||||
globalOnly="true"
|
||||
showDetail="true" redisplay="false"/>
|
||||
|
||||
<p:dataTable id= "id_d11" value ="#{stockPricesBean.stocks }"
|
||||
style="width: 100%; "
|
||||
|
||||
var="stock"
|
||||
scrollable="true"
|
||||
paginator="true"
|
||||
paginatorPosition="bottom"
|
||||
paginatorTemplate="{RowsPerPageDropdown} {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {CurrentPageReport}"
|
||||
currentPageReportTemplate="{startRecord} to {endRecord} of #{stockPricesBean.getStocks().size() } "
|
||||
rows="2"
|
||||
resizableColumns="true"
|
||||
rowHover ="true"
|
||||
draggableRows="true"
|
||||
draggableColumns="true"
|
||||
rowKey="#{stock.stockId}"
|
||||
selectionMode="single"
|
||||
selection="#{stock}"
|
||||
>
|
||||
|
||||
|
||||
|
||||
<p:column headerText="Stock ID"
|
||||
sortBy="#{stock.stockId}" >
|
||||
<p:outputLabel title= "Stock ID" value="#{stock.stockId}" />
|
||||
</p:column >
|
||||
<p:column id="id_stockName" headerText="Stock Name"
|
||||
sortBy="#{stock.companyName}" >
|
||||
<p:outputLabel title= "Stock Name" value="#{stock.companyName}" />
|
||||
</p:column >
|
||||
<p:column id="id_col" headerText="Current Price" >
|
||||
<p:outputLabel id="id_l11" title= "Current Price" value="#{stock.priceCurrent}" />
|
||||
</p:column >
|
||||
<p:column id="id_closingPriceColumn" headerText="Closing Price"
|
||||
sortBy="#{stock.priceClosing}" >
|
||||
<p:outputLabel id="id_closingPriceLabel" title= "Closing Price" value="#{stock.priceClosing}" />
|
||||
</p:column >
|
||||
<p:column id="id_sharesAvailable"
|
||||
|
||||
headerText="Shares Availlable"
|
||||
sortBy="#{stock.numberOfSharesAvailable}" >
|
||||
<p:outputLabel title= "Shares Available" value="#{stock.numberOfSharesAvailable}" />
|
||||
</p:column >
|
||||
<p:column id="id_sharesSold"
|
||||
headerText="Shares Sold"
|
||||
sortBy="#{stock.numberOfSharesSold}" >
|
||||
<p:outputLabel title= "Shares Sold" value="#{stock.numberOfSharesSold}" />
|
||||
</p:column >
|
||||
|
||||
</p:dataTable>
|
||||
<p:draggable for="id_d11" helper="clone" opacity="0.5"/>
|
||||
|
||||
<p:ajax event="click" update="id_growl_messages"
|
||||
listener="#{stockPricesBean.mouseClickListener}" />
|
||||
|
||||
</h:form>
|
||||
|
||||
</ui:composition>
|
||||
</h:body>
|
||||
</html>
|
@ -0,0 +1,11 @@
|
||||
<?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="jakarta.faces.html">
|
||||
<h:head>
|
||||
<title>test</title>
|
||||
</h:head>
|
||||
<h:body>
|
||||
test
|
||||
</h:body>
|
||||
</html>
|
109
Semester 3/Assignments/nyse-1.sql
Normal file
109
Semester 3/Assignments/nyse-1.sql
Normal file
@ -0,0 +1,109 @@
|
||||
-- phpMyAdmin SQL Dump
|
||||
-- version 5.2.0
|
||||
-- https://www.phpmyadmin.net/
|
||||
--
|
||||
-- Host: localhost:8889
|
||||
-- Generation Time: Mar 25, 2024 at 02:28 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
|
||||
('AMZN', 'Amazon Inc.', 6, 188, 7779754, 1111),
|
||||
('GOO', 'Google Inc.', 986, 399, 1000000, 1000000),
|
||||
('PLCE', 'Children\'s Place, Inc.', 14.515, 13.515, 10000000, 5000000),
|
||||
('TSLA', 'Tesla Inc.', 191.73, 202.98, 4000000, 1000000);
|
||||
|
||||
-- --------------------------------------------------------
|
||||
|
||||
--
|
||||
-- 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
Block a user