20 package org.sleuthkit.autopsy.contentviewers.artifactviewers;
22 import java.awt.event.ActionEvent;
23 import java.awt.event.ActionListener;
24 import java.util.ArrayList;
25 import java.util.Collection;
26 import java.util.List;
27 import java.util.concurrent.CancellationException;
28 import java.util.concurrent.ExecutionException;
29 import java.util.logging.Level;
30 import javax.swing.GroupLayout;
31 import javax.swing.GroupLayout.Alignment;
32 import javax.swing.GroupLayout.ParallelGroup;
33 import javax.swing.GroupLayout.SequentialGroup;
34 import javax.swing.JButton;
35 import javax.swing.JLabel;
36 import javax.swing.JPanel;
37 import javax.swing.LayoutStyle.ComponentPlacement;
38 import javax.swing.SwingUtilities;
39 import javax.swing.SwingWorker;
40 import org.openide.util.NbBundle.Messages;
58 final class MessageAccountPanel
extends JPanel {
60 private static final long serialVersionUID = 1L;
61 private final static Logger logger = Logger.getLogger(MessageAccountPanel.class.getName());
63 private AccountFetcher currentFetcher = null;
72 void setArtifact(BlackboardArtifact artifact) {
77 if (artifact == null) {
81 if (currentFetcher != null && !currentFetcher.isDone()) {
82 currentFetcher.cancel(
true);
85 currentFetcher =
new AccountFetcher(artifact);
86 currentFetcher.execute();
92 class AccountFetcher
extends SwingWorker<List<AccountContainer>, Void> {
94 private final BlackboardArtifact artifact;
101 AccountFetcher(BlackboardArtifact artifact) {
102 this.artifact = artifact;
106 protected List<AccountContainer> doInBackground() throws Exception {
107 List<AccountContainer> dataList =
new ArrayList<>();
109 CommunicationsManager commManager = Case.getCurrentCase().getSleuthkitCase().getCommunicationsManager();
110 List<Account> accountList = commManager.getAccountsRelatedToArtifact(artifact);
111 for (Account account : accountList) {
113 return new ArrayList<>();
116 Collection<PersonaAccount> personAccounts = PersonaAccount.getPersonaAccountsForAccount(account);
117 if (personAccounts != null && !personAccounts.isEmpty()) {
118 for (PersonaAccount personaAccount : PersonaAccount.getPersonaAccountsForAccount(account)) {
119 dataList.add(
new AccountContainer(account, personaAccount));
122 dataList.add(
new AccountContainer(account, null));
130 protected void done() {
132 List<AccountContainer> dataList =
get();
134 dataList.forEach(container -> {
135 container.initalizeSwingControls();
138 GroupLayout layout =
new GroupLayout(MessageAccountPanel.this);
139 layout.setHorizontalGroup(
140 layout.createParallelGroup(Alignment.LEADING)
141 .addGroup(layout.createSequentialGroup()
143 .addGroup(getMainHorizontalGroup(layout, dataList))
144 .addContainerGap(158, Short.MAX_VALUE)));
146 layout.setVerticalGroup(getMainVerticalGroup(layout, dataList));
149 }
catch (CancellationException ex) {
150 logger.log(Level.INFO,
"MessageAccoutPanel thread cancelled", ex);
151 }
catch (InterruptedException | ExecutionException ex) {
152 logger.log(Level.WARNING,
"Failed to get account list for MessageAccountPanel", ex);
162 private ParallelGroup getMainHorizontalGroup(GroupLayout layout, List<AccountContainer> data) {
163 ParallelGroup group = layout.createParallelGroup(Alignment.LEADING);
164 for (AccountContainer o : data) {
165 group.addComponent(o.getAccountLabel());
167 group.addGroup(getPersonaHorizontalGroup(layout, data));
176 private ParallelGroup getMainVerticalGroup(GroupLayout layout, List<AccountContainer> data) {
177 SequentialGroup group = layout.createSequentialGroup();
178 for (AccountContainer o : data) {
180 .addComponent(o.getAccountLabel())
181 .addGroup(o.getPersonLineVerticalGroup(layout));
184 group.addContainerGap(83, Short.MAX_VALUE);
186 return layout.createParallelGroup().addGroup(group);
196 private ParallelGroup getButtonGroup(GroupLayout layout, List<AccountContainer> data) {
197 ParallelGroup group = layout.createParallelGroup(Alignment.LEADING);
198 for (AccountContainer o : data) {
199 group.addComponent(o.getButton());
210 private SequentialGroup getPersonaHorizontalGroup(GroupLayout layout, List<AccountContainer> data) {
211 SequentialGroup group = layout.createSequentialGroup();
212 ParallelGroup pgroup = layout.createParallelGroup(Alignment.LEADING);
214 for (AccountContainer o : data) {
215 pgroup.addGroup(o.getPersonaSequentialGroup(layout));
219 .addPreferredGap(ComponentPlacement.RELATED)
220 .addGroup(getButtonGroup(layout, data));
249 this.persona = personaAccount != null ? personaAccount.
getPersona() : null;
253 "MessageAccountPanel_persona_label=Persona:",
254 "MessageAccountPanel_unknown_label=Unknown",
255 "MessageAccountPanel_button_view_label=View",
256 "MessageAccountPanel_button_create_label=Create"
262 accountLabel =
new JLabel();
263 personaHeader =
new JLabel(Bundle.MessageAccountPanel_persona_label());
264 personaDisplayName =
new JLabel();
265 button =
new JButton();
268 accountLabel.setText(account.getTypeSpecificID());
270 personaDisplayName.setText(persona != null ? persona.
getName() : Bundle.MessageAccountPanel_unknown_label());
271 button.setText(persona != null ? Bundle.MessageAccountPanel_button_view_label() : Bundle.MessageAccountPanel_button_create_label());
283 SwingUtilities.invokeLater(
new Runnable() {
286 personaDisplayName.setText(persona != null ? persona.
getName() : Bundle.MessageAccountPanel_unknown_label());
287 button.setText(persona != null ? Bundle.MessageAccountPanel_button_view_label() : Bundle.MessageAccountPanel_button_create_label());
338 SequentialGroup group = layout.createSequentialGroup();
341 .addComponent(personaHeader)
342 .addPreferredGap(ComponentPlacement.RELATED)
343 .addComponent(personaDisplayName);
356 return layout.createParallelGroup(Alignment.BASELINE)
357 .addComponent(personaHeader)
358 .addComponent(personaDisplayName)
359 .addComponent(button);
382 if (persona == null) {
384 MessageAccountPanel.this,
void callback(Persona persona)
PersonaDetailsPanel getDetailsPanel()
SequentialGroup getPersonaSequentialGroup(GroupLayout layout)
void actionPerformed(ActionEvent e)
void initalizeSwingControls()
JLabel personaDisplayName
final AccountContainer accountContainer
void setPersonaName(String name)
final AccountContainer accountContainer
ParallelGroup getPersonLineVerticalGroup(GroupLayout layout)
void setPersona(Persona persona)