package com.example.crazybiz;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import com.vaadin.data.Property.ValueChangeEvent;
import com.vaadin.ui.Alignment;
import com.vaadin.ui.Button;
import com.vaadin.ui.HorizontalLayout;
import com.vaadin.ui.Table;
import com.vaadin.ui.TextArea;
import com.vaadin.ui.TextField;
import com.vaadin.ui.VerticalLayout;
import com.vaadin.ui.Button.ClickEvent;
import com.vaadin.ui.Button.ClickListener;
import com.vaadin.ui.Window;
import com.vaadin.ui.themes.BaseTheme;
import db.DBactions;
import db.MyResult;
import db.ResultContainer;
public class SearchItem extends VerticalLayout {
private CrazybizApplication crazybizApplication;
private HorizontalLayout searchOptionsLayout;
private Button searchAll;
private Button searchBrand;
private Button searchModel;
private Button searchStatus;
private Button searchCustomQuery;
private Window subwindow;
private TextField filter;
private Table table;
private Button backButton;
private String queryString;
private VerticalLayout detailsLayout;
private TextArea detailsTextArea;
private Button editItem;
private int itemID;
public SearchItem(final CrazybizApplication crazybizApplication, final String username) {
this.crazybizApplication = crazybizApplication;
setMargin(true);
setSpacing(true);
itemID = -1;
// Search options
searchOptionsLayout = new HorizontalLayout();
searchOptionsLayout.setSpacing(true);
filter = new TextField();
searchAll = new Button("all");
searchBrand = new Button("by brand");
searchModel = new Button("by model");
searchStatus = new Button("by status");
searchCustomQuery = new Button("custom");
subwindow = new Window("A modal subwindow");
subwindow.setModal(true);
// Configure the modal window layout and components
VerticalLayout layout = (VerticalLayout) subwindow.getContent();
layout.setMargin(true);
layout.setSpacing(true);
TextField customQuery = new TextField("This is a modal subwindow.");
subwindow.addComponent(customQuery);
Button closeSubwindow = new Button("Close", new Button.ClickListener() {
public void buttonClick(ClickEvent event) {
(subwindow.getParent()).removeWindow(subwindow);
}
});
layout.addComponent(closeSubwindow);
layout.setComponentAlignment(closeSubwindow, Alignment.TOP_RIGHT);
searchAll.addListener(new ClickListener() {
@Override
public void buttonClick(ClickEvent event) {
queryString = "SELECT item.item_id,brand.brand_name,model.model_name,item.status,item.source " +
"FROM brand,model,item " +
"WHERE item.model_id = model.model_id AND model.brand_id = brand.brand_id " +
"ORDER BY item.lastModified DESC";
table.removeAllItems();
table.setContainerDataSource(ResultContainer.create(queryString));
}
});
searchBrand.addListener(new ClickListener() {
@Override
public void buttonClick(ClickEvent event) {
queryString = "SELECT item.item_id,brand.brand_name,model.model_name,item.status,item.source " +
"FROM brand,model,item " +
"WHERE item.model_id = model.model_id AND model.brand_id = brand.brand_id " +
"AND brand.brand_name = '"+filter.getValue().toString()+"' " +
"ORDER BY item.lastModified DESC";
table.removeAllItems();
table.setContainerDataSource(ResultContainer.create(queryString));
}
});
searchModel.addListener(new ClickListener() {
@Override
public void buttonClick(ClickEvent event) {
queryString = "SELECT item.item_id,brand.brand_name,model.model_name,item.status,item.source " +
"FROM brand,model,item " +
"WHERE item.model_id = model.model_id AND model.brand_id = brand.brand_id " +
"AND model.model_name = '"+filter.getValue().toString()+"' " +
"ORDER BY item.lastModified DESC";
table.removeAllItems();
table.setContainerDataSource(ResultContainer.create(queryString));
}
});
searchStatus.addListener(new ClickListener() {
@Override
public void buttonClick(ClickEvent event) {
queryString = "SELECT item.item_id,brand.brand_name,model.model_name,item.status,item.source " +
"FROM brand,model,item " +
"WHERE item.model_id = model.model_id AND model.brand_id = brand.brand_id " +
"AND item.status = '"+filter.getValue().toString()+"' " +
"ORDER BY item.lastModified DESC";
table.removeAllItems();
table.setContainerDataSource(ResultContainer.create(queryString));
}
});
searchCustomQuery.addListener(new ClickListener() {
@Override
public void buttonClick(ClickEvent event) {
if(subwindow.getParent()==null){
// INIT MODAL WINDOW
subwindow = new Window("A modal subwindow");
subwindow.setWidth("500px");
subwindow.setHeight("260px");
subwindow.setModal(true);
// Configure the modal window layout and components
VerticalLayout layout = (VerticalLayout) subwindow.getContent();
layout.setMargin(true);
layout.setSpacing(true);
final TextField customQuery = new TextField("This is a modal subwindow.");
customQuery.setSizeFull();
customQuery.setHeight("180px");
subwindow.addComponent(customQuery);
Button cancel = new Button("Cancel", new Button.ClickListener() {
public void buttonClick(ClickEvent event) {
(subwindow.getParent()).removeWindow(subwindow);
}
});
Button confirmQuery = new Button("Confirm", new Button.ClickListener() {
public void buttonClick(ClickEvent event) {
queryString = customQuery.getValue().toString();
table.removeAllItems();
table.setContainerDataSource(ResultContainer.create(queryString));
(subwindow.getParent()).removeWindow(subwindow);
}
});
HorizontalLayout buttonsLayout = new HorizontalLayout();
buttonsLayout.addComponent(confirmQuery);
buttonsLayout.addComponent(cancel);
layout.addComponent(buttonsLayout);
// SHOW MODAL WINDOW
getWindow().addWindow(subwindow);
}
}
});
searchOptionsLayout.addComponent(searchAll);
searchOptionsLayout.addComponent(searchBrand);
searchOptionsLayout.addComponent(searchModel);
searchOptionsLayout.addComponent(searchStatus);
searchOptionsLayout.addComponent(searchCustomQuery);
searchOptionsLayout.addComponent(filter);
detailsLayout = new VerticalLayout();
detailsLayout.setSizeFull();
detailsTextArea = new TextArea();
detailsTextArea.setWidth("500px");
detailsTextArea.setHeight("150px");
detailsLayout.addComponent(detailsTextArea);
detailsLayout.setComponentAlignment(detailsTextArea, Alignment.MIDDLE_CENTER);
table = new Table("Results");
table.setWidth("500px");
table.setSelectable(true);
table.setMultiSelect(false);
table.setImmediate(true);
table.setColumnReorderingAllowed(false);
table.setColumnCollapsingAllowed(true);
table.addContainerProperty("ItemID", Integer.class, null);
table.addContainerProperty("Brand", String.class, null);
table.addContainerProperty("Model", String.class, null);
table.addContainerProperty("Status", String.class, null);
// Populate from db with Default query
queryString = "SELECT item.item_id,brand.brand_name,model.model_name,item.status,item.source " +
"FROM brand,model,item " +
"WHERE item.model_id = model.model_id AND model.brand_id = brand.brand_id " +
"ORDER BY item.lastModified DESC";
table.setContainerDataSource(ResultContainer.create(queryString));
//table.setVisibleColumns(new String[]{"brand","model","status"});
// Action handler
table.addListener(new Table.ValueChangeListener() {
@Override
public void valueChange(ValueChangeEvent event) {
// in multiselect mode, a Set of itemIds is returned,
// in singleselect mode the itemId is returned directly
MyResult result = (MyResult)event.getProperty().getValue();
if (result != null) {
// Get details to show
itemID = result.getItemID();
String text = "";
try {
/*
PreparedStatement stm = DBactions.conn.prepareStatement(
"SELECT brand.brand_name,model.model_name,item.status,buy.price,buy.date,buy.name,sell.price,sell.date,sell.buyer,proposal.price " +
"FROM brand,model,item,buy,sell,proposal " +
"WHERE item.item_id=? AND brand.brand_id=model.brand_id AND item.model_id=model.model_id AND buy.item_id=? AND sell.item_id=? AND proposal.item_id=? " +
"ORDER BY proposal.price DESC;");
stm.setInt(1, itemID);
stm.setInt(2, itemID);
stm.setInt(3, itemID);
stm.setInt(4, itemID);
ResultSet rs = stm.executeQuery();
if(rs.next()){
text = "Brand:\t\t\t\t\t" + rs.getString(1) + "\n" +
"Model:\t\t\t\t\t" + rs.getString(2) + "\n" +
"Status:\t\t\t\t\t" + rs.getString(3) + "\n" +
"Bougth:\t\t\t\t\t" + rs.getInt(4) + " �" + " on " + rs.getDate(5) + " by " + rs.getString(6) + "\n" +
"Sold:\t\t\t\t\t" + rs.getInt(7) + " �" + " on " + rs.getDate(8) + " by " + rs.getString(9) + "\n" +
"Best proposal:\t\t\t\t" + rs.getInt(10) + " �\n\n" +
"Item ID:\t\t\t\t\t" + itemID;
}
*/
PreparedStatement stm = DBactions.conn.prepareStatement(
"SELECT brand.brand_name,model.model_name,item.status " +
"FROM brand,model,item " +
"WHERE item.item_id=? AND model.model_id=item.model_id AND brand.brand_id=model.brand_id;");
stm.setInt(1, itemID);
ResultSet rs = stm.executeQuery();
if(rs.next()){
text = text +
"Brand:\t\t\t\t\t" + rs.getString(1) + "\n" +
"Model:\t\t\t\t\t" + rs.getString(2) + "\n" +
"Status:\t\t\t\t\t" + rs.getString(3) + "\n";
}
stm = DBactions.conn.prepareStatement(
"SELECT buy.price,buy.date,buy.name " +
"FROM buy " +
"WHERE buy.item_id=?;");
stm.setInt(1, itemID);
rs = stm.executeQuery();
if(rs.next()){
text = text +
"Bougth:\t\t\t\t\t" + rs.getBigDecimal(1) + " �" + " on " + rs.getDate(2) + " by " + rs.getString(3) + "\n";
}
stm = DBactions.conn.prepareStatement(
"SELECT sell.price,sell.date,sell.buyer " +
"FROM sell " +
"WHERE sell.item_id=?;");
stm.setInt(1, itemID);
rs = stm.executeQuery();
if(rs.next()){
text = text +
"Sold:\t\t\t\t\t" + rs.getBigDecimal(1) + " �" + " on " + rs.getDate(2) + " by " + rs.getString(3) + "\n";
}
stm = DBactions.conn.prepareStatement(
"SELECT proposal.price " +
"FROM proposal " +
"WHERE proposal.item_id=? " +
"ORDER BY proposal.price DESC;");
stm.setInt(1, itemID);
rs = stm.executeQuery();
if(rs.next()){
text = text +
"Best proposal:\t\t\t\t" + rs.getInt(10) + " �\n\n";
}
text = text + "Item ID:\t\t\t\t\t" + itemID;
} catch (SQLException e) {
e.printStackTrace();
}
// Show details
detailsTextArea.setValue(text);
}
}
});
// Back button layout
HorizontalLayout backLayout = new HorizontalLayout();
backLayout.setMargin(false,true,false,false);
backButton = new Button("Back");
backButton.addListener(new ClickListener() {
@Override
public void buttonClick(ClickEvent event) {
crazybizApplication.getWindow().removeAllComponents();
crazybizApplication.setHome(new Homepage(crazybizApplication, username));
crazybizApplication.getWindow().setContent(crazybizApplication.getHome());
}
});
backButton.setStyleName(BaseTheme.BUTTON_LINK);
backLayout.addComponent(backButton);
editItem = new Button("Edit item");
editItem.addListener(new ClickListener() {
public void buttonClick(ClickEvent event) {
crazybizApplication.setInsert(new InsertItem(crazybizApplication, username, itemID));
crazybizApplication.getWindow().setContent(crazybizApplication.getInsert());
}
});
addComponent(backLayout);
addComponent(searchOptionsLayout);
addComponent(table);
detailsLayout.addComponent(editItem);
addComponent(detailsLayout);
this.setComponentAlignment(backLayout, Alignment.TOP_LEFT);
this.setComponentAlignment(searchOptionsLayout, Alignment.TOP_CENTER);
this.setComponentAlignment(table, Alignment.MIDDLE_CENTER);
}
}