diff --git a/.classpath b/.classpath
index 549bb8f..029d499 100644
--- a/.classpath
+++ b/.classpath
@@ -12,7 +12,7 @@
-
+
diff --git a/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs
index 6249222..8e4055a 100644
--- a/.settings/org.eclipse.jdt.core.prefs
+++ b/.settings/org.eclipse.jdt.core.prefs
@@ -1,12 +1,12 @@
eclipse.preferences.version=1
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
-org.eclipse.jdt.core.compiler.compliance=1.7
+org.eclipse.jdt.core.compiler.compliance=1.5
org.eclipse.jdt.core.compiler.debug.lineNumber=generate
org.eclipse.jdt.core.compiler.debug.localVariable=generate
org.eclipse.jdt.core.compiler.debug.sourceFile=generate
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
-org.eclipse.jdt.core.compiler.source=1.7
+org.eclipse.jdt.core.compiler.source=1.5
diff --git a/cookbook.db b/cookbook.db
deleted file mode 100644
index 3a2daa6..0000000
Binary files a/cookbook.db and /dev/null differ
diff --git a/src/main/java/db/Cookbook.java b/src/main/java/db/Cookbook.java
index 4460b5c..ac99de6 100644
--- a/src/main/java/db/Cookbook.java
+++ b/src/main/java/db/Cookbook.java
@@ -53,6 +53,7 @@ public class Cookbook {
return true;
}
+ /* funkcja przestarzała (deprecated) - do usunięcia w bliskiej przyszłości - PioDer */
public boolean insertRecipe(String name, String ingredients, String description, String tags, ImageIcon img) {
try {
//przekształcam ImageIcon -> BuforowanyImg
@@ -90,6 +91,27 @@ public class Cookbook {
return true;
}
+ public boolean insertRecipe(Recipe ob) {
+ try {
+ PreparedStatement prepStmt = conn.prepareStatement(
+ "INSERT INTO recipes VALUES (NULL, ?, ?, ?, ?, ?);");
+ prepStmt.setString(1, ob.getName());
+ prepStmt.setString(2, ob.getIngredients());
+ prepStmt.setString(3, ob.getDescription());
+ prepStmt.setString(4, ob.getTags());
+ prepStmt.setBytes(5, ob.getImageArr());
+ prepStmt.execute();
+
+ }
+ catch (SQLException e) {
+ System.err.println("Blad przy wstawianiu przepisu");
+ e.printStackTrace();
+ return false;
+ }
+
+ return true;
+ }
+
public Recipe selectRecipe(String name) {
Recipe selectedRecipe;
try {
diff --git a/src/main/java/db/Recipe.java b/src/main/java/db/Recipe.java
index 4bf141d..e815079 100644
--- a/src/main/java/db/Recipe.java
+++ b/src/main/java/db/Recipe.java
@@ -1,5 +1,10 @@
package db;
+import java.awt.image.BufferedImage;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+
+import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
public class Recipe {
@@ -43,6 +48,28 @@ public class Recipe {
public void setImage(ImageIcon img) {
this.img = img;
}
+ public byte[] getImageArr() {
+ try {
+ //przekształcam ImageIcon -> BufferedImage
+ BufferedImage bImg = new BufferedImage(img.getIconWidth(), img.getIconHeight(), BufferedImage.TYPE_INT_ARGB);
+
+ bImg.getGraphics().drawImage(img.getImage(), 0,0, null);
+ ByteArrayOutputStream bStream = new ByteArrayOutputStream();
+ //Buffered Image -> Byte Stream
+ ImageIO.write( bImg, "png", bStream );
+ bStream.flush();
+ //Byte Stream -> Byte Array
+ byte [] arr = bStream.toByteArray();
+ bStream.close();
+
+ return arr;
+ }
+ catch (IOException e) {
+ System.err.println("Blad przy wstawianiu przepisu");
+ e.printStackTrace();
+ return null;
+ }
+ }
public Recipe() {}
public Recipe(int id, String name, String ingredients, String description, String tags, ImageIcon img) {
diff --git a/src/main/java/ksiazka/kucharska/FrmMain.java b/src/main/java/ksiazka/kucharska/FrmMain.java
index 6cd84c1..3f61034 100644
--- a/src/main/java/ksiazka/kucharska/FrmMain.java
+++ b/src/main/java/ksiazka/kucharska/FrmMain.java
@@ -11,19 +11,19 @@ import javax.swing.DefaultListModel;
import javax.swing.ImageIcon;
import javax.swing.JFileChooser;
import javax.swing.JOptionPane;
+import javax.swing.JScrollPane;
import javax.swing.JSplitPane;
import javax.swing.JButton;
import javax.swing.JTextField;
import java.awt.Graphics2D;
-import java.awt.GridLayout;
import java.awt.GridBagLayout;
import java.awt.GridBagConstraints;
import java.awt.Insets;
import java.awt.RenderingHints;
import javax.swing.JList;
-import javax.swing.JTextPane;
+import javax.swing.JTextArea;
import javax.swing.JLabel;
import java.awt.Font;
import javax.swing.border.LineBorder;
@@ -38,6 +38,8 @@ import ksiazka.kucharska.RetrieveData;
import javax.swing.event.ListSelectionListener;
import javax.swing.event.ListSelectionEvent;
import javax.swing.filechooser.FileNameExtensionFilter;
+import javax.swing.ScrollPaneConstants;
+import java.awt.Dimension;
public class FrmMain extends JFrame {
@@ -51,10 +53,8 @@ public class FrmMain extends JFrame {
public static JTextField txtTags;
private JButton btnSave;
private JButton btnCancel;
- public static JTextPane txtIngredients;
- public static JTextPane txtDescription;
+ public static JTextArea txtDescription;
private JButton btnAddRecipe;
- private JButton btnSearch;
private JButton btnDelRecipe;
private JButton btnLoadImg;
public static JLabel lblRecipeTitle;
@@ -63,13 +63,16 @@ public class FrmMain extends JFrame {
private JFileChooser fcImg;
public static ImageIcon imgDefaultRecipe;
private JList recipesList;
+ private JScrollPane scrollPane_1;
+ public static JTextArea txtIngredients;
+ private JScrollPane scrollPane_2;
void DeactivateAddMenu() {
btnAddRecipe.setEnabled(true);
btnCancel.setVisible(false);
btnDelRecipe.setEnabled(true);
btnLoadImg.setVisible(false);
- btnSearch.setEnabled(true);
+ txtSearch.setEnabled(true);
btnSave.setVisible(false);
txtDescription.setEditable(false);
txtEdTitle.setVisible(false);
@@ -84,7 +87,7 @@ public class FrmMain extends JFrame {
btnCancel.setVisible(true);
btnDelRecipe.setEnabled(false);
btnLoadImg.setVisible(true);
- btnSearch.setEnabled(false);
+ txtSearch.setEnabled(false);
btnSave.setVisible(true);
txtDescription.setEditable(true);
txtEdTitle.setVisible(true);
@@ -121,39 +124,34 @@ public class FrmMain extends JFrame {
setContentPane(contentPane);
JSplitPane splitPane = new JSplitPane();
+ splitPane.setResizeWeight(0.18);
+ splitPane.setRequestFocusEnabled(false);
+ splitPane.setPreferredSize(new Dimension(200, 27));
splitPane.setDividerSize(5);
splitPane.setEnabled(false);
- splitPane.setResizeWeight(0.1);
contentPane.add(splitPane, BorderLayout.CENTER);
JPanel panel = new JPanel();
+ panel.setMaximumSize(new Dimension(100, 32767));
splitPane.setLeftComponent(panel);
GridBagLayout gbl_panel = new GridBagLayout();
- gbl_panel.columnWidths = new int[] {0, 30};
+ gbl_panel.columnWidths = new int[] {0, 0};
gbl_panel.rowHeights = new int[] {0, 0, 0};
- gbl_panel.columnWeights = new double[]{1.0, 0.0};
+ gbl_panel.columnWeights = new double[]{1.0, 1.0};
gbl_panel.rowWeights = new double[]{0.0, 1.0, 0.0};
panel.setLayout(gbl_panel);
txtSearch = new JTextField();
txtSearch.setText("wpisz tytuł/tagi...");
GridBagConstraints gbc_txtSearch = new GridBagConstraints();
- gbc_txtSearch.insets = new Insets(0, 0, 5, 5);
+ gbc_txtSearch.gridwidth = 2;
+ gbc_txtSearch.insets = new Insets(5, 5, 5, 0);
gbc_txtSearch.fill = GridBagConstraints.HORIZONTAL;
gbc_txtSearch.gridx = 0;
gbc_txtSearch.gridy = 0;
panel.add(txtSearch, gbc_txtSearch);
txtSearch.setColumns(10);
- btnSearch = new JButton("Szukaj");
- GridBagConstraints gbc_btnSearch = new GridBagConstraints();
- gbc_btnSearch.anchor = GridBagConstraints.NORTH;
- gbc_btnSearch.fill = GridBagConstraints.HORIZONTAL;
- gbc_btnSearch.insets = new Insets(0, 0, 5, 0);
- gbc_btnSearch.gridx = 1;
- gbc_btnSearch.gridy = 0;
- panel.add(btnSearch, gbc_btnSearch);
-
recipesListModel = new DefaultListModel();
recipesList = new JList(recipesListModel);
recipesList.addListSelectionListener(new ListSelectionListener() {
@@ -162,34 +160,39 @@ public class FrmMain extends JFrame {
RetrieveData.fillComponents(recipesList.getSelectedValue().toString());
}
});
- GridBagConstraints gbc_recipesList = new GridBagConstraints();
- gbc_recipesList.insets = new Insets(0, 0, 5, 0);
- gbc_recipesList.gridwidth = 2;
- gbc_recipesList.fill = GridBagConstraints.BOTH;
- gbc_recipesList.gridx = 0;
- gbc_recipesList.gridy = 1;
- panel.add(recipesList, gbc_recipesList);
+
+ scrollPane_2 = new JScrollPane();
+ scrollPane_2.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
+ scrollPane_2.setMaximumSize(new Dimension(100, 100));
+ scrollPane_2.setViewportView(recipesList);
+ GridBagConstraints gbc_scrollPane_2 = new GridBagConstraints();
+ gbc_scrollPane_2.gridwidth = 2;
+ gbc_scrollPane_2.insets = new Insets(0, 0, 5, 0);
+ gbc_scrollPane_2.fill = GridBagConstraints.BOTH;
+ gbc_scrollPane_2.gridx = 0;
+ gbc_scrollPane_2.gridy = 1;
+ panel.add(scrollPane_2, gbc_scrollPane_2);
- JPanel panel_1 = new JPanel();
- GridBagConstraints gbc_panel_1 = new GridBagConstraints();
- gbc_panel_1.gridwidth = 2;
- gbc_panel_1.gridheight = 0;
- gbc_panel_1.insets = new Insets(0, 0, 0, 5);
- gbc_panel_1.fill = GridBagConstraints.BOTH;
- gbc_panel_1.gridx = 0;
- gbc_panel_1.gridy = 2;
- panel.add(panel_1, gbc_panel_1);
- panel_1.setLayout(new GridLayout(0, 2, 0, 0));
btnAddRecipe = new JButton("Nowy");
+ GridBagConstraints gbc_btnAddRecipe = new GridBagConstraints();
+ gbc_btnAddRecipe.fill = GridBagConstraints.HORIZONTAL;
+ gbc_btnAddRecipe.insets = new Insets(0, 5, 0, 5);
+ gbc_btnAddRecipe.gridx = 0;
+ gbc_btnAddRecipe.gridy = 2;
+ panel.add(btnAddRecipe, gbc_btnAddRecipe);
btnAddRecipe.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
ActivateAddMenu();
}
});
- panel_1.add(btnAddRecipe);
btnDelRecipe = new JButton("Usuń");
+ GridBagConstraints gbc_btnDelRecipe = new GridBagConstraints();
+ gbc_btnDelRecipe.fill = GridBagConstraints.HORIZONTAL;
+ gbc_btnDelRecipe.gridx = 1;
+ gbc_btnDelRecipe.gridy = 2;
+ panel.add(btnDelRecipe, gbc_btnDelRecipe);
btnDelRecipe.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
DefaultListModel model = (DefaultListModel) recipesList.getModel();
@@ -215,7 +218,6 @@ public class FrmMain extends JFrame {
}
}
});
- panel_1.add(btnDelRecipe);
JPanel panel_2 = new JPanel();
splitPane.setRightComponent(panel_2);
@@ -242,15 +244,6 @@ public class FrmMain extends JFrame {
panel_2.add(txtEdTitle);
txtEdTitle.setColumns(10);
- txtIngredients = new JTextPane();
- txtIngredients.setEditable(false);
- txtIngredients.setBounds(26, 88, 228, 126);
- panel_2.add(txtIngredients);
-
- txtDescription = new JTextPane();
- txtDescription.setEditable(false);
- txtDescription.setBounds(26, 254, 410, 196);
- panel_2.add(txtDescription);
lblRecipeTitle = new JLabel("Nazwa przepisu");
lblRecipeTitle.setFont(new Font("Dialog", Font.BOLD, 18));
@@ -261,10 +254,6 @@ public class FrmMain extends JFrame {
lblIngredients.setBounds(26, 61, 70, 15);
panel_2.add(lblIngredients);
- JLabel lblDescription = new JLabel("Opis wykonania:");
- lblDescription.setBounds(26, 227, 152, 15);
- panel_2.add(lblDescription);
-
imgRecipe = new JLabel("");
imgRecipe.setHorizontalAlignment(SwingConstants.CENTER);
imgRecipe.setBorder(new LineBorder(SystemColor.textHighlightText));
@@ -312,6 +301,16 @@ public class FrmMain extends JFrame {
}
});
btnLoadImg.setVisible(false);
+
+ JScrollPane scrollPane = new JScrollPane();
+ scrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
+ scrollPane.setBounds(26, 254, 410, 196);
+ panel_2.add(scrollPane);
+
+ txtDescription = new JTextArea();
+ txtDescription.setEditable(false);
+ txtDescription.setLineWrap(true);
+ scrollPane.setViewportView(txtDescription);
btnLoadImg.setBounds(304, 217, 102, 25);
panel_2.add(btnLoadImg);
@@ -337,7 +336,21 @@ public class FrmMain extends JFrame {
btnCancel.setBounds(319, 46, 117, 25);
panel_2.add(btnCancel);
+ JLabel lblDescription = new JLabel("Opis wykonania:");
+ lblDescription.setBounds(26, 227, 152, 15);
+ panel_2.add(lblDescription);
+
+ scrollPane_1 = new JScrollPane();
+ scrollPane_1.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
+ scrollPane_1.setBounds(26, 88, 228, 126);
+ panel_2.add(scrollPane_1);
+
+ txtIngredients = new JTextArea();
+ txtIngredients.setEditable(false);
+ txtIngredients.setLineWrap(true);
+ scrollPane_1.setViewportView(txtIngredients);
+
//RetrieveData.insertSampleData();
RetrieveData.fillList();
}
-}
+}
\ No newline at end of file
diff --git a/src/main/java/ksiazka/kucharska/RecipeBuilder.java b/src/main/java/ksiazka/kucharska/RecipeBuilder.java
new file mode 100644
index 0000000..ad32d5a
--- /dev/null
+++ b/src/main/java/ksiazka/kucharska/RecipeBuilder.java
@@ -0,0 +1,82 @@
+package ksiazka.kucharska;
+import javax.swing.ImageIcon;
+
+import db.Recipe;
+
+
+abstract class RecipeBuilder {
+ protected Recipe rOb;
+
+ public Recipe build() {
+ return rOb;
+ }
+
+ public void newRecipe() {
+ rOb = new Recipe();
+ }
+
+ public abstract void buildTitle();
+ public abstract void buildIngred();
+ public abstract void buildDesc();
+ public abstract void buildTags();
+ public abstract void buildImg();
+
+}
+
+class NewRecipeBuilder extends RecipeBuilder {
+
+ public void buildTitle() {
+ rOb.setName(FrmMain.txtEdTitle.getText());
+ }
+ public void buildIngred() {
+ rOb.setIngredients(FrmMain.txtIngredients.getText());
+ }
+ public void buildDesc() {
+ rOb.setDescription(FrmMain.txtDescription.getText());
+ }
+ public void buildTags() {
+ rOb.setTags(FrmMain.txtTags.getText());
+ }
+ public void buildImg() {
+ rOb.setImage((ImageIcon)FrmMain.imgRecipe.getIcon());
+ }
+}
+
+class ExampleRecipeBuilder extends RecipeBuilder {
+
+ public void buildTitle() {
+ rOb.setName("Kanapka");
+ }
+ public void buildIngred() {
+ rOb.setIngredients("Chleb, margaryna, szynka");
+ }
+ public void buildDesc() {
+ rOb.setDescription("Posmarować kanapke margaryną i położyć na niej plaster szynki");
+ }
+ public void buildTags() {
+ rOb.setTags("kanapka, szynka, chleb");
+ }
+ public void buildImg() {
+ rOb.setImage(FrmMain.imgDefaultRecipe);
+ }
+}
+
+class RecipeManager {
+
+ private RecipeBuilder recipeBuilder;
+
+ public void setRecipeBuilder(RecipeBuilder rb) {
+ recipeBuilder = rb;
+ }
+ public Recipe getRecipe() {
+ return recipeBuilder.build();
+ }
+ public void constructRecipe() {
+ recipeBuilder.newRecipe();
+ recipeBuilder.buildTitle();
+ recipeBuilder.buildIngred();
+ recipeBuilder.buildDesc();
+ recipeBuilder.buildTags();
+ recipeBuilder.buildImg();
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/ksiazka/kucharska/RetrieveData.java b/src/main/java/ksiazka/kucharska/RetrieveData.java
index 318cdff..bc5054c 100644
--- a/src/main/java/ksiazka/kucharska/RetrieveData.java
+++ b/src/main/java/ksiazka/kucharska/RetrieveData.java
@@ -51,7 +51,14 @@ public class RetrieveData extends FrmMain{
}
public static void addNewRecipe(){
Cookbook myCb = new Cookbook();
- myCb.insertRecipe(txtEdTitle.getText(), txtIngredients.getText(), txtDescription.getText(), txtTags.getText(), (ImageIcon)imgRecipe.getIcon());
+
+ RecipeManager rm = new RecipeManager();
+ rm.setRecipeBuilder(new NewRecipeBuilder());
+ rm.constructRecipe();
+
+ Recipe obj = rm.getRecipe();
+ myCb.insertRecipe(obj);
+ //myCb.insertRecipe(txtEdTitle.getText(), txtIngredients.getText(), txtDescription.getText(), txtTags.getText(), (ImageIcon)imgRecipe.getIcon());
myCb.closeConnection();
}