Skálakereső teljes Java-forráskódja
Main.java
import design.Foablak;
import java.awt.EventQueue;
import javax.swing.JFrame;
import java.awt.Color;
public class Main {
private JFrame frmSkalakereso;
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
Foablak frame = new Foablak();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
}
Foablak.java
package design;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.List;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import skalakereso.*;
public class Foablak extends JFrame implements ActionListener {
private JPanel contentPane;
private JPanel searchEditBoxesPanel;
private JTextField skalaNev = new JTextField(10);
private JTextField hangNev = new JTextField(10);
private JLabel skalaNevLabel = new JLabel("Skálanév");
private JLabel skalaKodLabel = new JLabel("SkálaKód");
private JLabel hangNevLabel = new JLabel("Hangnév");
private JTextField skalaKod = new JTextField(10);
private JButton btn_kereses;
private SearchController searchController;
private JPanel searchResult = new JPanel();
private JTable resultTable;
public Foablak() {
try {
searchController = new SearchController();
} catch(Exception ex) {
JOptionPane.showMessageDialog(null, "Hiba az Internet kapcsolatában");
return;
}
setTitle("Skálakereső by Pénzes László - Copyright 2017");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 800, 400);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
contentPane.setLayout(new BorderLayout());
btn_kereses = new JButton("Keresés");
btn_kereses.addActionListener(this);
searchEditBoxesPanel = new JPanel();
searchEditBoxesPanel.setLayout(new FlowLayout());
searchEditBoxesPanel.add(hangNevLabel);
searchEditBoxesPanel.add(hangNev);
searchEditBoxesPanel.add(skalaKodLabel);
searchEditBoxesPanel.add(skalaKod);
searchEditBoxesPanel.add(skalaNevLabel);
searchEditBoxesPanel.add(skalaNev);
searchEditBoxesPanel.add(btn_kereses);
searchResult.setPreferredSize(new Dimension(600,200));
contentPane.add(searchEditBoxesPanel, BorderLayout.NORTH);
contentPane.add(searchResult, BorderLayout.CENTER);
setContentPane(contentPane);
this.pack();
}
@Override
public void actionPerformed(ActionEvent e) {
if(e.getSource() == this.btn_kereses) {
if(false == this.validation()) {
return;
}
String str = skalaNev.getText(); //pl. Dúr
if(!"".equals(str) && str != null) {
this.searchByHangNev(str);
} else if (!"".equals(skalaKod.getText()) && skalaKod.getText() != null) {
String hangKod = skalaKod.getText();
this.searchBySkalaKod(hangKod); //pl. 100000000000
} else if (!"".equals(hangNev.getText()) && hangNev.getText() != null) {
String hangNevTxt = hangNev.getText();
this.searchBySkálaNev(hangNevTxt); //pl. c#
}
}
}
private boolean validation() {
int filledInputCount = 0;
if( skalaNev.getText() != null && !"".equals(skalaNev.getText()) ) {
filledInputCount++;
}
if( skalaKod.getText() != null && !"".equals(skalaKod.getText()) ) {
filledInputCount++;
}
if( hangNev.getText() != null && !"".equals(hangNev.getText()) ) {
filledInputCount++;
}
if(filledInputCount == 0)
{
JOptionPane.showMessageDialog(null, "Legalább az egyik mező kitöltése
kötelező");
return false;
}
if(filledInputCount>1) {
JOptionPane.showMessageDialog(null, "Csak egy mező kitöltése engedélyezett");
return false;
}
if( skalaNev.getText() != null && !"".equals(skalaNev.getText()) ) {
if(!"".equals(validateSkalaNev(skalaNev.getText()))) {
JOptionPane.showMessageDialog(null, validateSkalaNev(skalaNev.getText()));
return false;
}
}
if( skalaKod.getText() != null && !"".equals(skalaKod.getText()) ) {
if(!"".equals(validateSkalaKod(skalaKod.getText()))) {
JOptionPane.showMessageDialog(null, validateSkalaKod(skalaKod.getText()));
return false;
}
}
if( hangNev.getText() != null && !"".equals(hangNev.getText()) ) {
if(!"".equals(validateHangNev(hangNev.getText()))) {
JOptionPane.showMessageDialog(null, validateHangNev(hangNev.getText()));
return false;
}
}
return true;
}
private String validateSkalaNev(String skalaNev) {
return "";
}
private String validateSkalaKod(String skalaKod) {
if(skalaKod.length() != 12){
return "Hibás skálakód hossz";
}
for(int i = 0; i < skalaKod.length(); i++){
char karakter = skalaKod.charAt(i);
if( karakter != '0' && karakter != '1')
return "Hibás skálakód karakter";
}
return "";
}
private String validateHangNev(String hangNev) {
if(hangNev.length() > 17 || hangNev.length() == 0){
return "Hibás hangnévhossz";
}
for(int i = 0; i < hangNev.length(); i++){
char karakter = hangNev.charAt(i);
if( karakter != 'c'
&& karakter != 'd'
&& karakter != 'e'
&& karakter != 'f'
&& karakter != 'g'
&& karakter != 'a'
&& karakter != 'h'
&& karakter != '#'){
return "Hibás hangnévkarakter";
}
if(hangNev.contains("##")){
return "Hibás hangnévkarakter";
}
karakter = hangNev.charAt(0);
if(karakter == '#'){
return "Hibás hangnévkarakter";
}
}
return "";
}
private void searchBySkalaKod(String skalaKod) {
List<Hangkombinacio> ret = this.searchController.searchBySkalaKod(skalaKod);
writeResultData(ret);
}
private void searchByHangNev(String skalaNev) {
List<Hangkombinacio> ret = this.searchController.searchBySkalaNev(skalaNev);
writeResultData(ret);
}
private void searchBySkálaNev(String hangNev) {
List<Hangkombinacio> ret = this.searchController.searchByHangNev(hangNev);
writeResultData(ret);
}
private void writeResultData(List<Hangkombinacio> talalatiLista) {
String[] headerCools = new String[] {"Skálanév", "Skálakód", "Hangnév"};
Object rowData[][] = new Object[talalatiLista.size()][3];
int index = 0;
for (Hangkombinacio h : talalatiLista) {
rowData[index][0] = h.getHangNev();
rowData[index][1] = h.getBinarisString();
rowData[index][2] =
Hangkombinacio.KonverterToString(Hangkombinacio.processLine(h.getBinarisString()));
index++;
}
if(resultTable != null) { //letörli az összes előző keresésből bennemaradt
elemet
((DefaultTableModel)resultTable.getModel()).getDataVector().removeAllElements();
searchResult.removeAll();
}
TableModel model = new DefaultTableModel(rowData, headerCools);
resultTable = new JTable(model);
resultTable.setAutoscrolls(true);
resultTable.setPreferredScrollableViewportSize(new Dimension(600, 200));
resultTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
resultTable.getColumnModel().getColumn(0).setPreferredWidth(200);
resultTable.getColumnModel().getColumn(1).setPreferredWidth(200);
resultTable.getColumnModel().getColumn(2).setPreferredWidth(200);
searchResult.add(newJScrollPane(resultTable,
JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED));
this.pack(); //kirakja a változtatásokat
}
}
SearchController.java
package skalakereso;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.net.URLConnection;
import java.util.List;
import java.util.ArrayList;
import org.jsoup.Jsoup;
import skalakereso.Hangkombinacio;
public class SearchController {
private List<Hangkombinacio> kombinaciok = new ArrayList<Hangkombinacio>();
public SearchController() throws Exception {
try {
initHangkombinaciok("http://www.gitariskola.hu/skalakatalogus_1.html", "<!--begin-->",
"<!--end-->");
initHangkombinaciok("http://www.gitariskola.hu/skalakatalogus_2.html", "<!--begin-->",
"<!--end-->");
initHangkombinaciok("http://www.gitariskola.hu/skalakatalogus_3.html", "<!--begin-->",
"<!--end-->");
initHangkombinaciok("http://www.gitariskola.hu/skalakatalogus_4.html", "<!--begin-->",
"<!--end-->");
initHangkombinaciok("http://www.gitariskola.hu/skalakatalogus_5.html", "<!--begin-->",
"<!--end-->");
initHangkombinaciok("http://www.gitariskola.hu/skalakatalogus_6.html", "<!--begin-->",
"<!--end-->");
initHangkombinaciok("http://www.gitariskola.hu/skalakatalogus_7.html", "<!--begin-->",
"<!--end-->");
initHangkombinaciok("http://www.gitariskola.hu/skalakatalogus_8.html", "<!--begin-->",
"<!--end-->");
initHangkombinaciok("http://www.gitariskola.hu/skalakatalogus_9.html", "<!--begin-->",
"<!--end-->");
initHangkombinaciok("http://www.gitariskola.hu/skalakatalogus_10.html", "<!--begin-->",
"<!--end-->");
initHangkombinaciok("http://www.gitariskola.hu/skalakatalogus_11.html", "<!--begin-->",
"<!--end-->");
initHangkombinaciok("http://www.gitariskola.hu/skalakatalogus_12.html", "<!--begin-->",
"<!--end-->");
} catch (Exception ex) {
ex.printStackTrace();
throw ex;
}
}
public void initHangkombinaciok(String urlString, String startString, String
endString) throws IOException {
URL url = new URL(urlString);
URLConnection connection = url.openConnection();
InputStream in = connection.getInputStream();
String encoding = connection.getContentEncoding();
encoding = encoding == null ? "ISO-8859-2" : encoding;
ByteArrayOutputStream baos = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int len = 0;
while ((len = in.read(buffer)) != -1) {
baos.write(buffer, 0, len);
}
String body = new String(baos.toByteArray(), encoding); //leszedi az egész
HTML tartalmat
body = body.substring(body.indexOf(startString) ); //megkeresi az elejét
int end = body.indexOf(endString); //megkeresi a végét
if(end != -1)
body = body.substring(0, end);
String[] array = body.split("<br>"); // sorokra bontás
for(int i = 0; i < array.length; i++) {
String line = array[i];
line = line.replace("</font>", "-");
line = Jsoup.parse(line).text();
String[] args = line.split("-");
Hangkombinacio h = new Hangkombinacio();
h.setBinarisString(args[0]);
if(args.length > 1) {
System.out.println("hangnév: " + args[1]);
h.setHangNev(args[1].trim());
}
kombinaciok.add(h);
}
}
public List<Hangkombinacio> searchBySkalaNev(String skalanev) {
List<Hangkombinacio> ret = new ArrayList<Hangkombinacio>();
for (Hangkombinacio hang : kombinaciok) {
if(hang.getSkalaNev() == null)
continue;
if(hang.getSkalaNev().contains(skalanev)) {
ret.add(hang);
}
}
return ret;
}
public List<Hangkombinacio> searchBySkalaKod(String skalaKod) {
List<Hangkombinacio> ret = new ArrayList<Hangkombinacio>();
for (Hangkombinacio hang : kombinaciok) {
if(hang.getBinarisString() == null)
continue;
if(hang.getBinarisString().contains(skalaKod)) {
ret.add(hang);
}
}
return ret;
}
public List<Hangkombinacio> searchByHangNev(String hangNev) {
int[] skalaKodArray = Hangkombinacio.KonverterToBinary(hangNev);
String skalaKod = "";
for(int i = 0; i < skalaKodArray.length; i++) {
skalaKod += ""+skalaKodArray[i];
}
System.out.println(skalaKod);
List<Hangkombinacio> ret = new ArrayList<Hangkombinacio>();
for (Hangkombinacio hang : kombinaciok) {
if(hang.getBinarisString() == null)
continue;
if(hang.getBinarisString().contains(skalaKod)) {
ret.add(hang);
}
}
return ret;
}
}
HangkombinacioTeszt.java
package test;
import static org.junit.Assert.*;
import org.junit.Test;
import skalakereso.*;
public class HangkombinacioTeszt {
@Test
public void isValidBinarisDataTeszt() {
assertEquals("must be false", false, Hangkombinacio.isNotValidBinarisString("100000000000"));
assertEquals("must be true", true, Hangkombinacio.isNotValidBinarisString("102000000000"));
assertEquals("must be true", true, Hangkombinacio.isNotValidBinarisString("1000000000"));
}
@Test
public void isNotValidHangNevDataTeszt() {
assertEquals("must be false", false,
Hangkombinacio.isNotValidHangnevData("cdefdddddddgah#"));
assertEquals("must be true", true, Hangkombinacio.isNotValidHangnevData("cdee1ddd"));
assertEquals("must be true", true,
Hangkombinacio.isNotValidHangnevData("crfgeddaaaaaa"));
assertEquals("must be false", false,
Hangkombinacio.isNotValidHangnevData("cfgeddaaaaaa"));
}
@Test
public void KonverterToStringTeszt() { //0c, 1c#, 2d, 3d#, 4e, 5f, 6f#, 7g,
8g#, 9a, 10a#, 11h
assertEquals("must be c", "c", Hangkombinacio.KonverterToString(new int[]
{1,0,0,0,0,0,0,0,0,0,0,0}));
assertEquals("must be ch", "ch", Hangkombinacio.KonverterToString(new int[]
{1,0,0,0,0,0,0,0,0,0,0,1}));
assertEquals("must be cdefh", "cdefh", Hangkombinacio.KonverterToString(new
int[] {1,0,1,0,1,1,0,0,0,0,0,1}));
assertEquals("must be cc#dd#eff#gg#aa#h", "cc#dd#eff#gg#aa#h",
Hangkombinacio.KonverterToString(new int[] {1,1,1,1,1,1,1,1,1,1,1,1}));
}
@Test
public void KonverterToBinaryTeszt() {
assertArrayEquals(new int[] {1,0,0,0,0,0,0,0,0,0,0,0},
Hangkombinacio.KonverterToBinary("c"));
assertArrayEquals(new int[] {1,0,0,0,0,0,0,0,0,0,0,1},
Hangkombinacio.KonverterToBinary("ch"));
assertArrayEquals(new int[] {1,0,1,0,1,1,0,1,0,1,0,1},
Hangkombinacio.KonverterToBinary("cdefgah"));
assertArrayEquals(new int[] {1,1,0,0,0,0,0,0,0,0,1,0},
Hangkombinacio.KonverterToBinary("cc#a#"));
}
@Test
public void KonverterToBinaryArrayTeszt() {
assertArrayEquals(new int[] {1,0,0,0,0,0,0,0,0,0,0,0},
Hangkombinacio.KonverterToBinaryArray("100000000000"));
assertArrayEquals(new int[] {1,0,0,0,0,0,0,0,0,0,0,1},
Hangkombinacio.KonverterToBinaryArray("100000000001"));
assertArrayEquals(new int[] {1,0,1,0,1,1,0,1,0,1,0,1},
Hangkombinacio.KonverterToBinaryArray("101011010101"));
assertArrayEquals(new int[] {1,1,0,0,0,0,0,0,0,0,1,0},
Hangkombinacio.KonverterToBinaryArray("110000000010"));
}
@Test
public void isNotValidSkalanevData() {
assertEquals("must be false", false,
Hangkombinacio.isNotValidSkalanevData("dur"));
assertEquals("must be false", false,
Hangkombinacio.isNotValidSkalanevData("roma"));
assertEquals("must be true", true,
Hangkombinacio.isNotValidSkalanevData("bucomaci"));
assertEquals("must be true", true, Hangkombinacio.isNotValidSkalanevData("te"));
}
}