diff --git a/src/BusinessCardManagement.java b/src/BusinessCardManagement.java index 1fbec09..56edf21 100644 --- a/src/BusinessCardManagement.java +++ b/src/BusinessCardManagement.java @@ -1,7 +1,25 @@ -import javax.swing.*; -import java.util.*; +import java.io.File; +import java.io.IOException; +import java.net.URISyntaxException; +import java.nio.charset.Charset; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import javax.swing.JFileChooser; +import javax.swing.JOptionPane; +import javax.swing.JPanel; +import javax.swing.filechooser.FileNameExtensionFilter; public class BusinessCardManagement { + + public final Charset CHARSET = java.nio.charset.Charset.forName("Shift_JIS"); + private Screen screen; private ScreenTemplates screenTemplates; private W4ca84254d30c423ab8e449171a5b5123 w4ca84254d30c423ab8e449171a5b5123; @@ -21,6 +39,7 @@ this.result = result; this.companyList = companyList; this.w2d109ad3739d4744a1874ac179fc38b9 = w2d109ad3739d4744a1874ac179fc38b9; + load(); } public Map> getValue() { Map> value = new HashMap<>(); @@ -115,11 +134,178 @@ this.widget.updateDataFromBusinessCardManagement2(scId, wid, this.getValue(), w4ca84254d30c423ab8e449171a5b5123, searchScreen); } + + final int COMPANY_NAME_INDEX = 0; + final int PERSON_NAME_INDEX = 1; + final int POSITION_INDEX = 2; + final int ADDRESS_INDEX = 4; + final int TELL_INDEX = 5; public void imports(String curScreen, String wid, int state) { + if (state != 0) { + return; + } JPanel mainPanel = screen.getPresenter().getMainPanel(); + JFileChooser fileChooser = new JFileChooser(); + FileNameExtensionFilter filter = new FileNameExtensionFilter("CSVファイル(*.csv)", "csv"); + fileChooser.setFileFilter(filter); + int result = fileChooser.showOpenDialog(mainPanel); + if (result == JFileChooser.APPROVE_OPTION) { + File selectedFile = fileChooser.getSelectedFile(); + Map>> businessCardData = new HashMap<>(); + try { + List lines = Files.readAllLines(selectedFile.toPath(), CHARSET); + for (int i = 1; i < lines.size(); i++) { + String line = lines.get(i); + String[] value = line.split(",", -1); + String companyName = value[0]; + if (! businessCardData.containsKey(companyName)) { + businessCardData.put(companyName, new ArrayList<>()); + } + businessCardData.get(companyName).add(Arrays.asList(value)); + } + for (var companyName : businessCardData.keySet()) { + String address = businessCardData.get(companyName).get(0).get(ADDRESS_INDEX); + String[] names = new String[4]; + String[] positions = new String[4]; + String[] tells = new String[4]; + for (int i = 0; i < Math.min(businessCardData.get(companyName).size(), 4); i++) { + List data = businessCardData.get(companyName).get(i); + names[i] = data.get(PERSON_NAME_INDEX); + positions[i] = data.get(POSITION_INDEX); + tells[i] = data.get(TELL_INDEX); + } + BusinessCardManagementElement bussinessCard + = new BusinessCardManagementElement("", "", "", address, "", "", "", "", "", names[0], positions[0], tells[0], "", names[1], positions[1], tells[1], "",names[2], positions[2], tells[2], "",names[3], positions[3], tells[3], ""); + value.put(companyName, bussinessCard); + } +// screen.getPresenter().setTable(curScreen, w2d109ad3739d4744a1874ac179fc38b9.getValue(), getValue()); + } catch (IOException e) { + e.printStackTrace(); + JOptionPane.showMessageDialog(mainPanel, "ファイルの読み込みに失敗しました。"); + } + } } + + public void load() { + try { + Path path = getCSVFilePath(); + if (Files.notExists(path)) { + return; + } + List lines = Files.readAllLines(path, CHARSET); + for (String line : lines) { + String[] values = line.split(",", -1); + + BusinessCardManagementElement businessCard = new BusinessCardManagementElement( + values[1], + values[2], + values[3], + values[4], + values[5], + values[6], + values[7], + values[8], + values[9], + values[10], + values[11], + values[12], + values[13], + values[14], + values[15], + values[16], + values[17], + values[18], + values[19], + values[20], + values[21], + values[22], + values[23], + values[24], + values[25] + ); + value.put(values[0], businessCard); + } +// screen.getPresenter().setTable(curScreen, w2d109ad3739d4744a1874ac179fc38b9.getValue(), getValue()); + } catch (URISyntaxException | IOException e) { + // TODO 自動生成された catch ブロック + e.printStackTrace(); + } + } + public void save(String curScreen, String wid, int state) { + if (state != 0) { + return; + } JPanel mainPanel = screen.getPresenter().getMainPanel(); + Path path; + try { + path = getCSVFilePath(); + StringBuilder sb = new StringBuilder(); + if (Files.notExists(path)) { + Files.createFile(path); + } + for (String key : value.keySet()) { + BusinessCardManagementElement businessCard = value.get(key); + String[] values = { + key, + businessCard.getRepresentative(), + businessCard.getPosition(), + businessCard.getEstablishment(), + businessCard.getAddress1(), + businessCard.getAddress2(), + businessCard.getBusinessDescription2(), + businessCard.getBusinessDescription1(), + businessCard.getCompanyOverview(), + businessCard.getURL(), + businessCard.getContactPerson1(), + businessCard.getPosition1(), + businessCard.getTel1(), + businessCard.getEmail1(), + businessCard.getContactPerson2(), + businessCard.getPosition2(), + businessCard.getTel2(), + businessCard.getEmail2(), + businessCard.getContactPerson3(), + businessCard.getPosition3(), + businessCard.getTel3(), + businessCard.getEmail3(), + businessCard.getContactPerson4(), + businessCard.getPosition4(), + businessCard.getTel4(), + businessCard.getEmail4() + }; + for (String value : values) { + if (value != null) { + sb.append(escapeCsv(value)); + } + sb.append(","); + } + sb.deleteCharAt(sb.length() - 1); + sb.append('\n'); + } + sb.deleteCharAt(sb.length() - 1); + System.out.println(sb.toString()); + Files.write(path, sb.toString().getBytes(CHARSET)); + } catch (URISyntaxException | IOException e) { + e.printStackTrace(); + JOptionPane.showMessageDialog(mainPanel, "ファイルの保存に失敗しました。"); + } } + + private String escapeCsv(String value) { + if (value.contains(",") || value.contains("\"") || value.contains("\n")) { + value = value.replace("\"", "\"\""); + return "\"" + value + "\""; + } + return value; + } + + private Path getCSVFilePath() throws URISyntaxException { + return Paths.get(Main.class.getProtectionDomain() + .getCodeSource() + .getLocation() + .toURI().toString().substring(6) + "../startup.csv"); + } + } \ No newline at end of file diff --git a/src/SwingPresenter.java b/src/SwingPresenter.java index 46d5525..faeba41 100644 --- a/src/SwingPresenter.java +++ b/src/SwingPresenter.java @@ -1,10 +1,3 @@ -import javax.swing.*; -import javax.swing.event.DocumentEvent; -import javax.swing.event.DocumentListener; -import javax.swing.table.DefaultTableModel; -import javax.swing.table.TableModel; -import javax.swing.text.BadLocationException; -import javax.swing.text.Document; import java.awt.Component; import java.awt.FlowLayout; import java.awt.event.MouseEvent; @@ -13,6 +6,19 @@ import java.util.List; import java.util.Map; +import javax.swing.JButton; +import javax.swing.JLabel; +import javax.swing.JPanel; +import javax.swing.JScrollPane; +import javax.swing.JTable; +import javax.swing.JTextField; +import javax.swing.event.DocumentEvent; +import javax.swing.event.DocumentListener; +import javax.swing.table.DefaultTableModel; +import javax.swing.table.TableModel; +import javax.swing.text.BadLocationException; +import javax.swing.text.Document; + public class SwingPresenter { private Main main; private JPanel mainPanel; @@ -370,8 +376,9 @@ public void setTable(String scId, String wid, Map> data) { if (!curScreenId.equals(scId)) return; - if (!(components.get(wid) instanceof JTable)) return; - JTable table = (JTable) components.get(wid); + if (!(components.get(wid) instanceof JScrollPane)) return; + JScrollPane pane = (JScrollPane) components.get(wid); + JTable table = (JTable) pane.getViewport().getView(); TableModel tableModel = table.getModel(); int i = 0; for(String dataKey : data.keySet()) {