diff --git a/src/main/java/ru/egspt/Base.java b/src/main/java/ru/egspt/Base.java index da85056..0f251e9 100644 --- a/src/main/java/ru/egspt/Base.java +++ b/src/main/java/ru/egspt/Base.java @@ -1,6 +1,8 @@ package ru.egspt; import java.sql.Connection; import java.sql.DriverManager; +import java.sql.ResultSet; +import java.sql.Statement; public class Base { private Connection connection = null; @@ -71,5 +73,18 @@ public class Base { } } } + public ResultSet querry(String querry){ + ResultSet rs = null; + try{ + Statement stmt = getConnection().createStatement(); + rs = stmt.executeQuery(querry); + } + catch (Exception ex){ + System.err.println ("Подключение к серверу баз данных не установлено ... "); + ex.printStackTrace(); + System.out.println (ex); + } + return rs; + } } diff --git a/src/main/java/ru/egspt/Data.java b/src/main/java/ru/egspt/Data.java index 5f80edf..b5cfe02 100644 --- a/src/main/java/ru/egspt/Data.java +++ b/src/main/java/ru/egspt/Data.java @@ -1,4 +1,4 @@ package ru.egspt; -public class Data { +public class Data extends UserListModel{ } diff --git a/src/main/java/ru/egspt/TagControls.java b/src/main/java/ru/egspt/TagControls.java new file mode 100644 index 0000000..323dabc --- /dev/null +++ b/src/main/java/ru/egspt/TagControls.java @@ -0,0 +1,39 @@ +package ru.egspt; + +public class TagControls { + //добавляем тег в модель + public static void addTag(Base base, TagModel tm, TagPane tp){ + //тег в модель + tm.addTag(tp.getCurrentTag()); + //обновляем текстовую область + tp.updateTagArea(tm); + //tp.getTagArea().update(tp.getTagArea().getGraphics()); + tp.getCurrentTagField().setText(""); + //выводим пользователей в консоль + UserListModel ul = new UserListModel(); + ul.setUsersFromBase(base); + int i = 0; + while (i < ul.getUsers().size()){ + System.out.println(ul.getUsers().get(i).getLogin()); + i++; + } + } + //добавляем тег в модель + public static void addTag(TagModel tm, TagPane tp){ + //тег в модель + tm.addTag(tp.getCurrentTag()); + //обновляем текстовую область + tp.updateTagArea(tm); + //tp.getTagArea().update(tp.getTagArea().getGraphics()); + tp.getCurrentTagField().setText(""); + } + //удаляем тег из модели + public static void removeTag(TagModel tm, TagPane tp){ + //удаляем тег из модели + tm.removeTag(tp.getCurrentTag()); + //обновляем текстовую область + tp.updateTagArea(tm); + //tp.getTagArea().update(tp.getTagArea().getGraphics()); + tp.getCurrentTagField().setText(""); + } +} diff --git a/src/main/java/ru/egspt/TagModel.java b/src/main/java/ru/egspt/TagModel.java new file mode 100644 index 0000000..7a64663 --- /dev/null +++ b/src/main/java/ru/egspt/TagModel.java @@ -0,0 +1,52 @@ +package ru.egspt; + +import java.util.ArrayList; + +public class TagModel { + private ArrayList tags; + public TagModel(){ + tags = new ArrayList<>(); + } + /** + * @param tags the tags to set + */ + public void setTags(ArrayList ts) { + this.tags = ts; + } + /** + * @return the tags + */ + public ArrayList getTags() { + return tags; + } + public void addTag(String t){ + int i = 0; + boolean b = true; + while (i < tags.size()){ + if (tags.get(i).equals(t) ){ + b = false; + } + i++; + } + if (b){ + tags.add(t); + } + } + /** + * создаем новый список тегов + * пишем в него теги старого списка, если они не совпадают с заданным + */ + public void removeTag(String t){ + System.out.println("Удаление тега: " + t); + ArrayList newTags = new ArrayList<>(); + int i = 0; + while (i < tags.size()){ + if (tags.get(i).equals(t) ){ } + else{ + newTags.add(tags.get(i)); + } + i++; + } + setTags(newTags); + } +} diff --git a/src/main/java/ru/egspt/TagPane.java b/src/main/java/ru/egspt/TagPane.java new file mode 100644 index 0000000..f161602 --- /dev/null +++ b/src/main/java/ru/egspt/TagPane.java @@ -0,0 +1,95 @@ +package ru.egspt; + +import javax.swing.JButton; +import javax.swing.JFrame; +import javax.swing.JLabel; +import javax.swing.JPanel; +import javax.swing.JTextArea; +import javax.swing.JTextField; +import javax.swing.WindowConstants; +import javax.swing.border.LineBorder; +import javax.swing.border.TitledBorder; +import java.awt.Color; + +public class TagPane extends JPanel{ + private JLabel newTagLabel = new JLabel("Текущий тег: "); + private JTextField CurrentTagField = new JTextField(25); + private JButton addTagButton = new JButton("Добавить"); + private JButton removeTagButton = new JButton("Удалить"); + private JTextArea tagArea = new JTextArea(); + public TagPane(Base base, TagModel tm){ + this.add(newTagLabel); + this.add(CurrentTagField); + this.add(addTagButton); + addTagButton.addActionListener(e -> TagControls.addTag(base, tm, this)); + this.add(removeTagButton); + removeTagButton.addActionListener(e -> TagControls.removeTag(tm, this)); + //заполняем tagArea + tagArea.setText("Перечень тегов:"); + int i = 0; + while (i < tm.getTags().size()){ + tagArea.append(tm.getTags().get(i)); + i++; + } + this.add(tagArea); + TitledBorder border = new TitledBorder(new LineBorder(Color.black), "tag-controls", TitledBorder.CENTER, TitledBorder.CENTER); + this.setBorder(border); + } + public TagPane(TagModel tm){ + this.add(newTagLabel); + this.add(CurrentTagField); + this.add(addTagButton); + addTagButton.addActionListener(e -> TagControls.addTag(tm, this)); + this.add(removeTagButton); + removeTagButton.addActionListener(e -> TagControls.removeTag(tm, this)); + //заполняем tagArea + tagArea.setText("Перечень тегов:"); + int i = 0; + while (i < tm.getTags().size()){ + tagArea.append(tm.getTags().get(i)); + i++; + } + this.add(tagArea); + TitledBorder border = new TitledBorder(new LineBorder(Color.black), "tag-controls", TitledBorder.CENTER, TitledBorder.CENTER); + this.setBorder(border); + } + /** + * @return the newTagField + */ + public String getCurrentTag() { + return CurrentTagField.getText(); + } + /** + * @return the tagArea + */ + public JTextArea getTagArea() { + return tagArea; + } + public void updateTagArea(TagModel tm){ + tagArea.setText("Перечень тегов:"); + int i = 0; + while (i < tm.getTags().size()){ + tagArea.append("\n" + tm.getTags().get(i)); + i++; + } + tagArea.repaint(); + } + /** + * @return the currentTagField + */ + public JTextField getCurrentTagField() { + return CurrentTagField; + } + public static void main( String[] args ){ + //Base base = new Base(); + //Data data; + TagModel tm = new TagModel(); + System.out.println( "Проверка работоспособности класса TagPane ..." ); + JFrame mainframe = new JFrame("TagPane-test"); + TagPane tp = new TagPane(tm); + mainframe.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); + mainframe.add(tp); + mainframe.setSize(320, 240); + mainframe.setVisible(true); + } +} diff --git a/src/main/java/ru/egspt/User.java b/src/main/java/ru/egspt/User.java new file mode 100644 index 0000000..57ba48e --- /dev/null +++ b/src/main/java/ru/egspt/User.java @@ -0,0 +1,51 @@ +package ru.egspt; + +public class User { + int id; + String login; + String mail; + + public User(){} + public User(int id, String login, String mail){ + setId(id); + setLogin(login); + setMail(mail); + } + /** + * @param id the id to set + */ + public void setId(int id) { + this.id = id; + } + /** + * @return the id + */ + public int getId() { + return id; + } + /** + * @param login the login to set + */ + public void setLogin(String login) { + this.login = login; + } + /** + * @return the login + */ + public String getLogin() { + return login; + } + /** + * @param mail the mail to set + */ + public void setMail(String mail) { + this.mail = mail; + } + /** + * @return the mail + */ + public String getMail() { + return mail; + } + +} diff --git a/src/main/java/ru/egspt/UserListModel.java b/src/main/java/ru/egspt/UserListModel.java new file mode 100644 index 0000000..b87b7f5 --- /dev/null +++ b/src/main/java/ru/egspt/UserListModel.java @@ -0,0 +1,65 @@ +package ru.egspt; + +import java.sql.ResultSet; +import java.util.ArrayList; + +public class UserListModel { + private ArrayList users; + public UserListModel(){ + users = new ArrayList(); + } + /** + * @return the users + */ + public ArrayList getUsers() { + return users; + } + /** + * @param users the users to set + */ + public void setUsers(ArrayList users) { + this.users = users; + } + //берем список пользователей из базы (сразу после подключения к базе данных) + public void setUsersFromBase(Base base){ + ArrayList us = new ArrayList<>(); + String querry = "SELECT id, username, email FROM mdl_user"; + ResultSet rs = base.querry(querry); + try { + while (rs.next()){ + int id = rs.getInt("id"); + String login = rs.getString("username"); + String mail = rs.getString("email"); + User u = new User(id, login, mail); + us.add(u); + } + } + catch (Exception ex){ + System.err.println ("Подключение к серверу баз данных не установлено ... "); + ex.printStackTrace(); + System.out.println (ex); + } + setUsers(us); + } + /** + * Возвращает список пользователей, отфильтрованный по заданному тегу + * @return + */ + public ArrayList getUsersByTag(ArrayList ul, TagModel tm){ + ArrayList ubt = new ArrayList<>(); + //ArrayList ulBuf = ul; + int j = 0;//номер записи в списке тегов + //перебираем теги + while (j < tm.getTags().size()){ + int i = 0;//номер записи в списке пользователей + while (i < ul.size()){ + if (ul.get(i).getLogin().contains(tm.getTags().get(j))){ + ubt.add(ul.get(i)); + } + i++; + } + j++; + } + return ubt; + } +} diff --git a/target/classes/ru/egspt/App.class b/target/classes/ru/egspt/App.class index e5cb5d4..da2ad6d 100644 Binary files a/target/classes/ru/egspt/App.class and b/target/classes/ru/egspt/App.class differ diff --git a/target/classes/ru/egspt/Base.class b/target/classes/ru/egspt/Base.class index 5bc01a9..e42e785 100644 Binary files a/target/classes/ru/egspt/Base.class and b/target/classes/ru/egspt/Base.class differ diff --git a/target/classes/ru/egspt/Data.class b/target/classes/ru/egspt/Data.class index 8d380f5..3a81209 100644 Binary files a/target/classes/ru/egspt/Data.class and b/target/classes/ru/egspt/Data.class differ diff --git a/target/classes/ru/egspt/TagControls.class b/target/classes/ru/egspt/TagControls.class new file mode 100644 index 0000000..6185d55 Binary files /dev/null and b/target/classes/ru/egspt/TagControls.class differ diff --git a/target/classes/ru/egspt/TagModel.class b/target/classes/ru/egspt/TagModel.class new file mode 100644 index 0000000..af2be13 Binary files /dev/null and b/target/classes/ru/egspt/TagModel.class differ diff --git a/target/classes/ru/egspt/TagPane.class b/target/classes/ru/egspt/TagPane.class new file mode 100644 index 0000000..ca6bc3a Binary files /dev/null and b/target/classes/ru/egspt/TagPane.class differ diff --git a/target/classes/ru/egspt/User.class b/target/classes/ru/egspt/User.class new file mode 100644 index 0000000..942b9bb Binary files /dev/null and b/target/classes/ru/egspt/User.class differ diff --git a/target/classes/ru/egspt/UserListModel.class b/target/classes/ru/egspt/UserListModel.class new file mode 100644 index 0000000..defa327 Binary files /dev/null and b/target/classes/ru/egspt/UserListModel.class differ