diff --git a/JRomManager/src-server/jrm/server/datasources/ReportTreeXMLResponse.java b/JRomManager/src-server/jrm/server/datasources/ReportTreeXMLResponse.java index 35897562..ef0f7b27 100644 --- a/JRomManager/src-server/jrm/server/datasources/ReportTreeXMLResponse.java +++ b/JRomManager/src-server/jrm/server/datasources/ReportTreeXMLResponse.java @@ -111,6 +111,7 @@ protected void custom(Operation operation) throws Exception writer.writeAttribute("ParentID", Integer.toString(parentID)); writer.writeAttribute("Name", n.getName()); writer.writeAttribute("CRC", n.getCrc()); + writer.writeAttribute("SHA1", n.getSha1()); writer.writeStartElement("Detail"); writer.writeCData(n.getDetail()); writer.writeEndElement(); diff --git a/JRomManager/src-standalone/jrm/ui/profile/ProfileViewer.java b/JRomManager/src-standalone/jrm/ui/profile/ProfileViewer.java index cc15c035..b3131b0e 100644 --- a/JRomManager/src-standalone/jrm/ui/profile/ProfileViewer.java +++ b/JRomManager/src-standalone/jrm/ui/profile/ProfileViewer.java @@ -273,8 +273,7 @@ public void windowClosing(final WindowEvent e) public void keyReleased(final KeyEvent e) { final String search = txtSearch.getText(); - @SuppressWarnings("unchecked") - final int row = ((AnywareList) tableW.getModel()).find(search); + final int row = ((AnywareListModel) tableW.getModel()).getList().find(search); if (row >= 0) { tableW.setRowSelectionInterval(row, row); @@ -800,7 +799,11 @@ else if (width < 0) public void actionPerformed(ActionEvent e) { val index = tableEntity.getSelectedRow(); if(index>=0) - Toolkit.getDefaultToolkit().getSystemClipboard().setContents(new StringSelection(tableEntity.getModel().getValueAt(index, 3).toString()),null); + { + val crc = tableEntity.getModel().getValueAt(index, 3); + if(crc!=null) + Toolkit.getDefaultToolkit().getSystemClipboard().setContents(new StringSelection(crc.toString()),null); + } } }); popupEntMenu.add(mntmCopyCRC); @@ -810,7 +813,11 @@ public void actionPerformed(ActionEvent e) { public void actionPerformed(ActionEvent e) { val index = tableEntity.getSelectedRow(); if(index>=0) - Toolkit.getDefaultToolkit().getSystemClipboard().setContents(new StringSelection(tableEntity.getModel().getValueAt(index, 5).toString()),null); + { + val sha1 = tableEntity.getModel().getValueAt(index, 5); + if(sha1!=null) + Toolkit.getDefaultToolkit().getSystemClipboard().setContents(new StringSelection(sha1.toString()),null); + } } }); popupEntMenu.add(mntmCopySHA1); @@ -820,7 +827,11 @@ public void actionPerformed(ActionEvent e) { public void actionPerformed(ActionEvent e) { val index = tableEntity.getSelectedRow(); if(index>=0) - Toolkit.getDefaultToolkit().getSystemClipboard().setContents(new StringSelection(tableEntity.getModel().getValueAt(index, 1).toString()),null); + { + val name = tableEntity.getModel().getValueAt(index, 1); + if(name!=null) + Toolkit.getDefaultToolkit().getSystemClipboard().setContents(new StringSelection(name.toString()),null); + } } }); popupEntMenu.add(mntmCopyName); @@ -831,14 +842,15 @@ public void actionPerformed(ActionEvent e) { val index = tableEntity.getSelectedRow(); if(index>=0) { - val name = tableEntity.getModel().getValueAt(index, 1).toString(); - val crc = tableEntity.getModel().getValueAt(index, 3).toString(); - val sha1 = tableEntity.getModel().getValueAt(index, 5).toString(); if (Desktop.isDesktopSupported() && Desktop.getDesktop().isSupported(Desktop.Action.BROWSE)) { try { - Desktop.getDesktop().browse(new URI("https://www.google.com/search?q=" + URLEncoder.encode('"' + name + '"', "UTF-8") + '+' + Optional.ofNullable(crc).orElse(sha1))); + val name = tableEntity.getModel().getValueAt(index, 1).toString(); + val crc = tableEntity.getModel().getValueAt(index, 3); + val sha1 = tableEntity.getModel().getValueAt(index, 5); + val hash = Optional.ofNullable(Optional.ofNullable(crc).orElse(sha1)).map(h -> '+' + h.toString()).orElse(""); + Desktop.getDesktop().browse(new URI("https://www.google.com/search?q=" + URLEncoder.encode('"' + name + '"', "UTF-8") + hash)); } catch (IOException | URISyntaxException e1) { diff --git a/JRomManager/src-standalone/jrm/ui/profile/report/ReportView.java b/JRomManager/src-standalone/jrm/ui/profile/report/ReportView.java index 0ef17af9..909c3a79 100644 --- a/JRomManager/src-standalone/jrm/ui/profile/report/ReportView.java +++ b/JRomManager/src-standalone/jrm/ui/profile/report/ReportView.java @@ -12,6 +12,7 @@ import java.net.URISyntaxException; import java.net.URLEncoder; import java.util.EnumSet; +import java.util.Optional; import javax.swing.ImageIcon; import javax.swing.JCheckBoxMenuItem; @@ -142,6 +143,21 @@ else if(node instanceof SubjectNode) }); popupMenu.add(mntmCopyCRC); + JMenuItem mntmCopySHA1 = new JMenuItem("Copy SHA1"); + mntmCopySHA1.setEnabled(false); + mntmCopySHA1.addActionListener(e->{ + val path = tree.getSelectionPath(); + if(path!=null) + { + Object node = path.getLastPathComponent(); + if(node instanceof NoteNode) + { + Toolkit.getDefaultToolkit().getSystemClipboard().setContents(new StringSelection(((NoteNode)node).getNote().getSha1()), null); + } + } + }); + popupMenu.add(mntmCopySHA1); + JMenuItem mntmCopyName = new JMenuItem("Copy Name"); mntmCopyName.setEnabled(false); mntmCopyName.addActionListener(e->{ @@ -166,13 +182,15 @@ else if(node instanceof SubjectNode) Object node = path.getLastPathComponent(); if(node instanceof NoteNode) { - String name = ((NoteNode)node).getNote().getName(); - String crc = ((NoteNode)node).getNote().getCrc(); if (Desktop.isDesktopSupported() && Desktop.getDesktop().isSupported(Desktop.Action.BROWSE)) { try { - Desktop.getDesktop().browse(new URI("https://www.google.com/search?q=" + URLEncoder.encode('"' + name + '"', "UTF-8") + '+' + crc)); + val name = ((NoteNode)node).getNote().getName(); + val crc = ((NoteNode)node).getNote().getCrc(); + val sha1 = ((NoteNode)node).getNote().getSha1(); + val hash = Optional.ofNullable(Optional.ofNullable(crc).orElse(sha1)).map(h -> '+' + h).orElse(""); + Desktop.getDesktop().browse(new URI("https://www.google.com/search?q=" + URLEncoder.encode('"' + name + '"', "UTF-8") + hash)); } catch (IOException | URISyntaxException e1) { @@ -191,6 +209,7 @@ else if(node instanceof SubjectNode) val node = path.getLastPathComponent(); mntmDetail.setEnabled(node instanceof NoteNode); mntmCopyCRC.setEnabled(node instanceof NoteNode); + mntmCopySHA1.setEnabled(node instanceof NoteNode); mntmCopyName.setEnabled(node instanceof NoteNode); mntmSearchWeb.setEnabled(node instanceof NoteNode); } @@ -198,6 +217,7 @@ else if(node instanceof SubjectNode) { mntmDetail.setEnabled(false); mntmCopyCRC.setEnabled(false); + mntmCopySHA1.setEnabled(false); mntmCopyName.setEnabled(false); mntmSearchWeb.setEnabled(false); } diff --git a/JRomManager/src/jrm/profile/report/EntryAdd.java b/JRomManager/src/jrm/profile/report/EntryAdd.java index abae1afb..ea124d79 100644 --- a/JRomManager/src/jrm/profile/report/EntryAdd.java +++ b/JRomManager/src/jrm/profile/report/EntryAdd.java @@ -85,4 +85,12 @@ public String getCrc() return ((Entity)entity).getCrc(); return null; } + + @Override + public String getSha1() + { + if(entity instanceof Entity) + return ((Entity)entity).getSha1(); + return null; + } } diff --git a/JRomManager/src/jrm/profile/report/EntryMissing.java b/JRomManager/src/jrm/profile/report/EntryMissing.java index a1949be5..73861801 100644 --- a/JRomManager/src/jrm/profile/report/EntryMissing.java +++ b/JRomManager/src/jrm/profile/report/EntryMissing.java @@ -99,4 +99,12 @@ public String getCrc() return ((Entity)entity).getCrc(); return null; } + + @Override + public String getSha1() + { + if(entity instanceof Entity) + return ((Entity)entity).getSha1(); + return null; + } } diff --git a/JRomManager/src/jrm/profile/report/EntryMissingDuplicate.java b/JRomManager/src/jrm/profile/report/EntryMissingDuplicate.java index a45a6a59..38f32622 100644 --- a/JRomManager/src/jrm/profile/report/EntryMissingDuplicate.java +++ b/JRomManager/src/jrm/profile/report/EntryMissingDuplicate.java @@ -78,4 +78,10 @@ public String getCrc() { return entity.getCrc(); } + + @Override + public String getSha1() + { + return entity.getSha1(); + } } diff --git a/JRomManager/src/jrm/profile/report/EntryOK.java b/JRomManager/src/jrm/profile/report/EntryOK.java index c7130f40..a8dff69c 100644 --- a/JRomManager/src/jrm/profile/report/EntryOK.java +++ b/JRomManager/src/jrm/profile/report/EntryOK.java @@ -72,4 +72,12 @@ public String getCrc() return ((Entity)entity).getCrc(); return null; } + + @Override + public String getSha1() + { + if(entity instanceof Entity) + return ((Entity)entity).getSha1(); + return null; + } } diff --git a/JRomManager/src/jrm/profile/report/EntryUnneeded.java b/JRomManager/src/jrm/profile/report/EntryUnneeded.java index a440fbed..3ae44d75 100644 --- a/JRomManager/src/jrm/profile/report/EntryUnneeded.java +++ b/JRomManager/src/jrm/profile/report/EntryUnneeded.java @@ -65,4 +65,10 @@ public String getCrc() { return entry.crc; } + + @Override + public String getSha1() + { + return entry.sha1; + } } diff --git a/JRomManager/src/jrm/profile/report/EntryWrongHash.java b/JRomManager/src/jrm/profile/report/EntryWrongHash.java index ea1cfcab..8e88b371 100644 --- a/JRomManager/src/jrm/profile/report/EntryWrongHash.java +++ b/JRomManager/src/jrm/profile/report/EntryWrongHash.java @@ -88,4 +88,10 @@ public String getCrc() { return entity.getCrc(); } + + @Override + public String getSha1() + { + return entity.getSha1(); + } } diff --git a/JRomManager/src/jrm/profile/report/EntryWrongName.java b/JRomManager/src/jrm/profile/report/EntryWrongName.java index 59e9dc89..c04dfd71 100644 --- a/JRomManager/src/jrm/profile/report/EntryWrongName.java +++ b/JRomManager/src/jrm/profile/report/EntryWrongName.java @@ -78,4 +78,10 @@ public String getCrc() { return entity.getCrc(); } + + @Override + public String getSha1() + { + return entity.getSha1(); + } } diff --git a/JRomManager/src/jrm/profile/report/Note.java b/JRomManager/src/jrm/profile/report/Note.java index f795efb1..b0c5de97 100644 --- a/JRomManager/src/jrm/profile/report/Note.java +++ b/JRomManager/src/jrm/profile/report/Note.java @@ -42,6 +42,8 @@ private void readObject(final java.io.ObjectInputStream stream) throws IOExcepti public abstract String getCrc(); + public abstract String getSha1(); + public int getId() { return id; diff --git a/JRomManager/src/jrm/xml/EnhancedXMLStreamWriter.java b/JRomManager/src/jrm/xml/EnhancedXMLStreamWriter.java index 62b210bd..97350786 100644 --- a/JRomManager/src/jrm/xml/EnhancedXMLStreamWriter.java +++ b/JRomManager/src/jrm/xml/EnhancedXMLStreamWriter.java @@ -138,19 +138,22 @@ public void setPrefix(final String prefix, final String uri) throws XMLStreamExc @Override public void writeAttribute(final String localName, final String value) throws XMLStreamException { - writer.writeAttribute(localName, value); + if(value!=null) + writer.writeAttribute(localName, value); } @Override public void writeAttribute(final String prefix, final String namespaceURI, final String localName, final String value) throws XMLStreamException { - writer.writeAttribute(prefix, namespaceURI, localName, value); + if(value!=null) + writer.writeAttribute(prefix, namespaceURI, localName, value); } @Override public void writeAttribute(final String namespaceURI, final String localName, final String value) throws XMLStreamException { - writer.writeAttribute(namespaceURI, localName, value); + if(value!=null) + writer.writeAttribute(namespaceURI, localName, value); } @Override diff --git a/WebClient b/WebClient index 9df963cb..26ed15ce 160000 --- a/WebClient +++ b/WebClient @@ -1 +1 @@ -Subproject commit 9df963cbb85dfd9599f40759f4596f70a089e4f6 +Subproject commit 26ed15ce17b740bc3291829839b4d0d2a167b99c