mirror of
https://github.com/overcuriousity/autopsy-flatpak.git
synced 2025-07-19 19:14:55 +00:00
Merge branch 'accounts_relationships' of https://github.com/sleuthkit/autopsy into accounts_relationships
This commit is contained in:
commit
4a95926de7
@ -0,0 +1,88 @@
|
|||||||
|
/*
|
||||||
|
* Autopsy Forensic Browser
|
||||||
|
*
|
||||||
|
* Copyright 2011-2017 Basis Technology Corp.
|
||||||
|
* Contact: carrier <at> sleuthkit <dot> org
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
package org.sleuthkit.autopsy.communications;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashSet;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Set;
|
||||||
|
import java.util.logging.Level;
|
||||||
|
import org.openide.nodes.AbstractNode;
|
||||||
|
import org.openide.nodes.Children;
|
||||||
|
import org.openide.nodes.Node;
|
||||||
|
import org.sleuthkit.autopsy.coreutils.Logger;
|
||||||
|
import org.sleuthkit.datamodel.Account;
|
||||||
|
import org.sleuthkit.datamodel.BlackboardArtifact;
|
||||||
|
import org.sleuthkit.datamodel.CommunicationsFilter;
|
||||||
|
import org.sleuthkit.datamodel.CommunicationsManager;
|
||||||
|
import org.sleuthkit.datamodel.TskCoreException;
|
||||||
|
|
||||||
|
class AccountDetailsNode extends AbstractNode {
|
||||||
|
|
||||||
|
private final static Logger logger = Logger.getLogger(AccountDetailsNode.class.getName());
|
||||||
|
private final CommunicationsFilter filter; //TODO: Use this
|
||||||
|
|
||||||
|
AccountDetailsNode(Set<Account> accounts,CommunicationsFilter filter, CommunicationsManager commsManager) {
|
||||||
|
super(new AccountRelationshipChildren(accounts, commsManager, filter));
|
||||||
|
this.filter = filter;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Children object for the relationships that the account is a member of.
|
||||||
|
*/
|
||||||
|
private static class AccountRelationshipChildren extends Children.Keys<BlackboardArtifact> {
|
||||||
|
|
||||||
|
private final Set<Account> accounts;
|
||||||
|
private final CommunicationsManager commsManager;
|
||||||
|
private final CommunicationsFilter filter;//TODO: Use this
|
||||||
|
|
||||||
|
private AccountRelationshipChildren(Set<Account> accounts, CommunicationsManager commsManager, CommunicationsFilter filter) {
|
||||||
|
this.accounts = accounts;
|
||||||
|
this.commsManager = commsManager;
|
||||||
|
this.filter = filter;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected Node[] createNodes(BlackboardArtifact key) {
|
||||||
|
return new Node[]{new RelationShipFilterNode(key)};
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void addNotify() {
|
||||||
|
Set<BlackboardArtifact> keys = new HashSet<>();
|
||||||
|
for (Account account : accounts) {
|
||||||
|
List<Account> accountsWithRelationship = new ArrayList<>();
|
||||||
|
try {
|
||||||
|
accountsWithRelationship.addAll(commsManager.getAccountsWithRelationship(account)); //TODO: Use filter here
|
||||||
|
} catch (TskCoreException ex) {
|
||||||
|
logger.log(Level.WARNING, "Error loading with relationships to " + account, ex);
|
||||||
|
}
|
||||||
|
|
||||||
|
accountsWithRelationship.forEach(otherAcount -> {
|
||||||
|
try {
|
||||||
|
keys.addAll(commsManager.getRelationships(account, otherAcount)); //TODO:Use filter here
|
||||||
|
} catch (TskCoreException ex) {
|
||||||
|
logger.log(Level.WARNING, "Error loading relationships between " + account + " and " + otherAcount, ex);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
setKeys(keys);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -1,90 +0,0 @@
|
|||||||
/*
|
|
||||||
* Autopsy Forensic Browser
|
|
||||||
*
|
|
||||||
* Copyright 2011-2017 Basis Technology Corp.
|
|
||||||
* Contact: carrier <at> sleuthkit <dot> org
|
|
||||||
*
|
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
* you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*/
|
|
||||||
package org.sleuthkit.autopsy.communications;
|
|
||||||
|
|
||||||
import java.util.logging.Level;
|
|
||||||
import java.util.logging.Logger;
|
|
||||||
import org.openide.nodes.AbstractNode;
|
|
||||||
import org.openide.nodes.Children;
|
|
||||||
import org.openide.nodes.Sheet;
|
|
||||||
import org.openide.util.NbBundle;
|
|
||||||
import org.openide.util.lookup.Lookups;
|
|
||||||
import org.sleuthkit.autopsy.casemodule.Case;
|
|
||||||
import org.sleuthkit.autopsy.datamodel.NodeProperty;
|
|
||||||
import org.sleuthkit.datamodel.AccountDeviceInstance;
|
|
||||||
import org.sleuthkit.datamodel.CommunicationsFilter;
|
|
||||||
import org.sleuthkit.datamodel.TskCoreException;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Node to represent an Account in the AccountsBrowser
|
|
||||||
*/
|
|
||||||
class AccountDeviceInstanceNode extends AbstractNode {
|
|
||||||
|
|
||||||
private static final Logger LOGGER = Logger.getLogger(AccountDeviceInstanceNode.class.getName());
|
|
||||||
private final AccountDeviceInstance accountDeviceInstance;
|
|
||||||
private final CommunicationsFilter filter;
|
|
||||||
|
|
||||||
AccountDeviceInstanceNode(AccountDeviceInstance accountDeviceInstance, CommunicationsFilter filter) {
|
|
||||||
super(Children.LEAF, Lookups.fixed(accountDeviceInstance));
|
|
||||||
this.accountDeviceInstance = accountDeviceInstance;
|
|
||||||
this.filter = filter;
|
|
||||||
|
|
||||||
setName(accountDeviceInstance.getAccount().getAccountUniqueID());
|
|
||||||
setIconBaseWithExtension("org/sleuthkit/autopsy/communications/images/"
|
|
||||||
+ AccountUtils.getIconFileName(accountDeviceInstance.getAccount().getAccountType()));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
@NbBundle.Messages({
|
|
||||||
"AccountNode.device=Device",
|
|
||||||
"AccountNode.accountName=Account",
|
|
||||||
"AccountNode.accountType=Type",
|
|
||||||
"AccountNode.messageCount=Msg Count"})
|
|
||||||
protected Sheet createSheet() {
|
|
||||||
Sheet s = super.createSheet();
|
|
||||||
Sheet.Set properties = s.get(Sheet.PROPERTIES);
|
|
||||||
if (properties == null) {
|
|
||||||
properties = Sheet.createPropertiesSet();
|
|
||||||
s.put(properties);
|
|
||||||
}
|
|
||||||
|
|
||||||
long msgCount = 0;
|
|
||||||
try {
|
|
||||||
msgCount = Case.getCurrentCase().getSleuthkitCase().getCommunicationsManager().getRelationshipsCount(this.filter, accountDeviceInstance);
|
|
||||||
} catch (TskCoreException ex) {
|
|
||||||
LOGGER.log(Level.WARNING, "Failed to get message count for account", ex); //NON-NLS
|
|
||||||
}
|
|
||||||
|
|
||||||
properties.put(new NodeProperty<>("type",
|
|
||||||
Bundle.AccountNode_accountType(),
|
|
||||||
"type",
|
|
||||||
accountDeviceInstance.getAccount().getAccountType().getDisplayName())); // NON-NLS
|
|
||||||
|
|
||||||
properties.put(new NodeProperty<>("count",
|
|
||||||
Bundle.AccountNode_messageCount(),
|
|
||||||
"count",
|
|
||||||
msgCount)); // NON-NLS
|
|
||||||
|
|
||||||
properties.put(new NodeProperty<>("device",
|
|
||||||
Bundle.AccountNode_device(),
|
|
||||||
"device",
|
|
||||||
accountDeviceInstance.getDeviceId())); // NON-NLS
|
|
||||||
return s;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,62 +0,0 @@
|
|||||||
/*
|
|
||||||
* Autopsy Forensic Browser
|
|
||||||
*
|
|
||||||
* Copyright 2011-2017 Basis Technology Corp.
|
|
||||||
* Contact: carrier <at> sleuthkit <dot> org
|
|
||||||
*
|
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
* you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*/
|
|
||||||
package org.sleuthkit.autopsy.communications;
|
|
||||||
|
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.List;
|
|
||||||
import org.openide.nodes.Children;
|
|
||||||
import org.openide.nodes.Node;
|
|
||||||
|
|
||||||
class AccountDeviceInstancesNodeChildren extends Children.Keys<AccountDeviceInstanceKey> {
|
|
||||||
|
|
||||||
private final List<AccountDeviceInstanceKey> accountDeviceInstanceKeys;
|
|
||||||
|
|
||||||
AccountDeviceInstancesNodeChildren(List<AccountDeviceInstanceKey> accountDeviceInstanceKeys) {
|
|
||||||
super(true);
|
|
||||||
this.accountDeviceInstanceKeys = accountDeviceInstanceKeys;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void removeNotify() {
|
|
||||||
super.removeNotify();
|
|
||||||
setKeys(Collections.emptySet());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void addNotify() {
|
|
||||||
super.addNotify();
|
|
||||||
setKeys(accountDeviceInstanceKeys);
|
|
||||||
}
|
|
||||||
|
|
||||||
//These are the methods for ChildFactory. I am going to keep them around but commented until we make a final descision.
|
|
||||||
// @Override
|
|
||||||
// protected boolean createKeys(List<Account> list) {
|
|
||||||
// list.addAll(accounts);
|
|
||||||
// return true;
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// @Override
|
|
||||||
// protected Node createNodeForKey(Account key) {
|
|
||||||
// return new AccountDeviceInstanceNode(key);
|
|
||||||
// }
|
|
||||||
@Override
|
|
||||||
protected Node[] createNodes(AccountDeviceInstanceKey key) {
|
|
||||||
return new Node[]{new AccountDeviceInstanceNode(key.getAccountDeviceInstance(), key.getCommunicationsFilter())};
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,62 +0,0 @@
|
|||||||
/*
|
|
||||||
* Autopsy Forensic Browser
|
|
||||||
*
|
|
||||||
* Copyright 2011-2017 Basis Technology Corp.
|
|
||||||
* Contact: carrier <at> sleuthkit <dot> org
|
|
||||||
*
|
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
* you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*/
|
|
||||||
package org.sleuthkit.autopsy.communications;
|
|
||||||
|
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.List;
|
|
||||||
import org.openide.nodes.Children;
|
|
||||||
import org.openide.nodes.Node;
|
|
||||||
|
|
||||||
class AccountsDeviceInstanceChildren extends Children.Keys<AccountDeviceInstanceKey> {
|
|
||||||
|
|
||||||
private final List<AccountDeviceInstanceKey> accountDeviceInstanceKeys;
|
|
||||||
|
|
||||||
AccountsDeviceInstanceChildren(List<AccountDeviceInstanceKey> accountDeviceInstanceKeys) {
|
|
||||||
super(true);
|
|
||||||
this.accountDeviceInstanceKeys = accountDeviceInstanceKeys;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void removeNotify() {
|
|
||||||
super.removeNotify();
|
|
||||||
setKeys(Collections.emptySet());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void addNotify() {
|
|
||||||
super.addNotify();
|
|
||||||
setKeys(accountDeviceInstanceKeys);
|
|
||||||
}
|
|
||||||
|
|
||||||
//These are the methods for ChildFactory. I am going to keep them around but commented until we make a final descision.
|
|
||||||
// @Override
|
|
||||||
// protected boolean createKeys(List<Account> list) {
|
|
||||||
// list.addAll(accounts);
|
|
||||||
// return true;
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// @Override
|
|
||||||
// protected Node createNodeForKey(Account key) {
|
|
||||||
// return new AccountDeviceInstanceNode(key);
|
|
||||||
// }
|
|
||||||
@Override
|
|
||||||
protected Node[] createNodes(AccountDeviceInstanceKey key) {
|
|
||||||
return new Node[]{new AccountDeviceInstanceNode(key.getAccountDeviceInstance(), key.getCommunicationsFilter())};
|
|
||||||
}
|
|
||||||
}
|
|
@ -0,0 +1,128 @@
|
|||||||
|
/*
|
||||||
|
* Autopsy Forensic Browser
|
||||||
|
*
|
||||||
|
* Copyright 2011-2017 Basis Technology Corp.
|
||||||
|
* Contact: carrier <at> sleuthkit <dot> org
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
package org.sleuthkit.autopsy.communications;
|
||||||
|
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.logging.Level;
|
||||||
|
import java.util.logging.Logger;
|
||||||
|
import org.openide.nodes.AbstractNode;
|
||||||
|
import org.openide.nodes.Children;
|
||||||
|
import org.openide.nodes.Node;
|
||||||
|
import org.openide.nodes.Sheet;
|
||||||
|
import org.openide.util.NbBundle;
|
||||||
|
import org.openide.util.lookup.Lookups;
|
||||||
|
import org.sleuthkit.autopsy.datamodel.NodeProperty;
|
||||||
|
import org.sleuthkit.datamodel.AccountDeviceInstance;
|
||||||
|
import org.sleuthkit.datamodel.CommunicationsFilter;
|
||||||
|
import org.sleuthkit.datamodel.CommunicationsManager;
|
||||||
|
import org.sleuthkit.datamodel.TskCoreException;
|
||||||
|
|
||||||
|
class AccountsRootChildren extends Children.Keys<AccountDeviceInstanceKey> {
|
||||||
|
|
||||||
|
private final List<AccountDeviceInstanceKey> accountDeviceInstanceKeys;
|
||||||
|
private final CommunicationsManager commsManager;
|
||||||
|
|
||||||
|
AccountsRootChildren(List<AccountDeviceInstanceKey> accountDeviceInstanceKeys, CommunicationsManager commsManager) {
|
||||||
|
super(true);
|
||||||
|
this.accountDeviceInstanceKeys = accountDeviceInstanceKeys;
|
||||||
|
this.commsManager = commsManager;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void removeNotify() {
|
||||||
|
super.removeNotify();
|
||||||
|
setKeys(Collections.emptySet());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void addNotify() {
|
||||||
|
super.addNotify();
|
||||||
|
setKeys(accountDeviceInstanceKeys);
|
||||||
|
}
|
||||||
|
|
||||||
|
//These are the methods for ChildFactory. I am going to keep them around but commented until we make a final descision.
|
||||||
|
// @Override
|
||||||
|
// protected boolean createKeys(List<Account> list) {
|
||||||
|
// list.addAll(accounts);
|
||||||
|
// return true;
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// @Override
|
||||||
|
// protected Node createNodeForKey(Account key) {
|
||||||
|
// return new AccountDeviceInstanceNode(key);
|
||||||
|
// }
|
||||||
|
@Override
|
||||||
|
protected Node[] createNodes(AccountDeviceInstanceKey key) {
|
||||||
|
return new Node[]{new AccountDeviceInstanceNode(key, commsManager)};
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Node to represent an Account in the AccountsBrowser
|
||||||
|
*/
|
||||||
|
static class AccountDeviceInstanceNode extends AbstractNode {
|
||||||
|
|
||||||
|
private static final Logger LOGGER = Logger.getLogger(AccountDeviceInstanceNode.class.getName());
|
||||||
|
private final AccountDeviceInstance accountDeviceInstance;
|
||||||
|
private final CommunicationsManager commsManager;
|
||||||
|
private final CommunicationsFilter filter;
|
||||||
|
|
||||||
|
private AccountDeviceInstanceNode(AccountDeviceInstanceKey accountDeviceInstanceKey, CommunicationsManager commsManager) {
|
||||||
|
super(Children.LEAF, Lookups.fixed(accountDeviceInstanceKey, commsManager));
|
||||||
|
this.accountDeviceInstance = accountDeviceInstanceKey.getAccountDeviceInstance();
|
||||||
|
this.commsManager = commsManager;
|
||||||
|
this.filter = accountDeviceInstanceKey.getCommunicationsFilter();
|
||||||
|
setName(accountDeviceInstance.getAccount().getAccountUniqueID());
|
||||||
|
setIconBaseWithExtension("org/sleuthkit/autopsy/communications/images/" + AccountUtils.getIconFileName(accountDeviceInstance.getAccount().getAccountType()));
|
||||||
|
}
|
||||||
|
|
||||||
|
public AccountDeviceInstance getAccountDeviceInstance() {
|
||||||
|
return accountDeviceInstance;
|
||||||
|
}
|
||||||
|
|
||||||
|
public CommunicationsManager getCommsManager() {
|
||||||
|
return commsManager;
|
||||||
|
}
|
||||||
|
|
||||||
|
public CommunicationsFilter getFilter() {
|
||||||
|
return filter;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@NbBundle.Messages(value = {"AccountNode.device=Device", "AccountNode.accountName=Account", "AccountNode.accountType=Type", "AccountNode.messageCount=Msg Count"})
|
||||||
|
protected Sheet createSheet() {
|
||||||
|
Sheet s = super.createSheet();
|
||||||
|
Sheet.Set properties = s.get(Sheet.PROPERTIES);
|
||||||
|
if (properties == null) {
|
||||||
|
properties = Sheet.createPropertiesSet();
|
||||||
|
s.put(properties);
|
||||||
|
}
|
||||||
|
long msgCount = 0;
|
||||||
|
try {
|
||||||
|
msgCount = commsManager.getRelationshipsCount(filter, accountDeviceInstance);
|
||||||
|
} catch (TskCoreException ex) {
|
||||||
|
LOGGER.log(Level.WARNING, "Failed to get message count for account", ex); //NON-NLS
|
||||||
|
}
|
||||||
|
properties.put(new NodeProperty<>("type", Bundle.AccountNode_accountType(), "type", accountDeviceInstance.getAccount().getAccountType().getDisplayName())); // NON-NLS
|
||||||
|
properties.put(new NodeProperty<>("count", Bundle.AccountNode_messageCount(), "count", msgCount)); // NON-NLS
|
||||||
|
properties.put(new NodeProperty<>("device", Bundle.AccountNode_device(), "device", accountDeviceInstance.getDeviceId())); // NON-NLS
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -1,11 +1,9 @@
|
|||||||
CVTTopComponent.jTextField1.text=place holder for messages ,thumbnail list, etc
|
|
||||||
CVTTopComponent.jTextField2.text=place holder for message viewer
|
|
||||||
CVTTopComponent.TabConstraints.tabTitle=Visualize
|
CVTTopComponent.TabConstraints.tabTitle=Visualize
|
||||||
CVTTopComponent.accountsBrowser.TabConstraints.tabTitle=Browse
|
CVTTopComponent.accountsBrowser.TabConstraints.tabTitle=Browse
|
||||||
FiltersPanel.applyFiltersButton.text=Apply Filters
|
FiltersPanel.applyFiltersButton.text=Apply
|
||||||
FiltersPanel.devicesLabel.text=Devices:
|
FiltersPanel.devicesLabel.text=Devices:
|
||||||
FiltersPanel.accountTypesLabel.text=Account Types:
|
FiltersPanel.accountTypesLabel.text=Account Types:
|
||||||
FiltersPanel.filtersTitleLabel.text=Filters
|
FiltersPanel.filtersTitleLabel.text=Account Filters
|
||||||
FiltersPanel.unCheckAllAccountTypesButton.text=Uncheck All
|
FiltersPanel.unCheckAllAccountTypesButton.text=Uncheck All
|
||||||
FiltersPanel.checkAllAccountTypesButton.text=Check All
|
FiltersPanel.checkAllAccountTypesButton.text=Check All
|
||||||
FiltersPanel.unCheckAllDevicesButton.text=Uncheck All
|
FiltersPanel.unCheckAllDevicesButton.text=Uncheck All
|
||||||
|
@ -17,10 +17,10 @@
|
|||||||
<DimensionLayout dim="0">
|
<DimensionLayout dim="0">
|
||||||
<Group type="103" groupAlignment="0" attributes="0">
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
<Group type="102" alignment="0" attributes="0">
|
<Group type="102" alignment="0" attributes="0">
|
||||||
<EmptySpace max="-2" attributes="0"/>
|
<EmptySpace min="-2" max="-2" attributes="0"/>
|
||||||
<Component id="filtersPane" min="-2" pref="244" max="-2" attributes="0"/>
|
<Component id="filtersPane" pref="244" max="32767" attributes="0"/>
|
||||||
<EmptySpace type="unrelated" max="-2" attributes="0"/>
|
<EmptySpace type="unrelated" min="-2" max="-2" attributes="0"/>
|
||||||
<Component id="HSplitPane" pref="1322" max="32767" attributes="0"/>
|
<Component id="splitPane" pref="1322" max="32767" attributes="0"/>
|
||||||
<EmptySpace min="-2" max="-2" attributes="0"/>
|
<EmptySpace min="-2" max="-2" attributes="0"/>
|
||||||
</Group>
|
</Group>
|
||||||
</Group>
|
</Group>
|
||||||
@ -31,7 +31,7 @@
|
|||||||
<EmptySpace min="-2" max="-2" attributes="0"/>
|
<EmptySpace min="-2" max="-2" attributes="0"/>
|
||||||
<Group type="103" groupAlignment="0" attributes="0">
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
<Component id="filtersPane" max="32767" attributes="0"/>
|
<Component id="filtersPane" max="32767" attributes="0"/>
|
||||||
<Component id="HSplitPane" max="32767" attributes="0"/>
|
<Component id="splitPane" max="32767" attributes="0"/>
|
||||||
</Group>
|
</Group>
|
||||||
<EmptySpace min="-2" max="-2" attributes="0"/>
|
<EmptySpace min="-2" max="-2" attributes="0"/>
|
||||||
</Group>
|
</Group>
|
||||||
@ -39,9 +39,10 @@
|
|||||||
</DimensionLayout>
|
</DimensionLayout>
|
||||||
</Layout>
|
</Layout>
|
||||||
<SubComponents>
|
<SubComponents>
|
||||||
<Container class="javax.swing.JSplitPane" name="HSplitPane">
|
<Container class="javax.swing.JSplitPane" name="splitPane">
|
||||||
<Properties>
|
<Properties>
|
||||||
<Property name="dividerLocation" type="int" value="600"/>
|
<Property name="dividerLocation" type="int" value="600"/>
|
||||||
|
<Property name="resizeWeight" type="double" value="0.3"/>
|
||||||
</Properties>
|
</Properties>
|
||||||
|
|
||||||
<Layout class="org.netbeans.modules.form.compat2.layouts.support.JSplitPaneSupportLayout"/>
|
<Layout class="org.netbeans.modules.form.compat2.layouts.support.JSplitPaneSupportLayout"/>
|
||||||
@ -106,45 +107,6 @@
|
|||||||
</Container>
|
</Container>
|
||||||
</SubComponents>
|
</SubComponents>
|
||||||
</Container>
|
</Container>
|
||||||
<Container class="javax.swing.JSplitPane" name="VSplitPane">
|
|
||||||
<Properties>
|
|
||||||
<Property name="dividerLocation" type="int" value="200"/>
|
|
||||||
<Property name="orientation" type="int" value="0"/>
|
|
||||||
</Properties>
|
|
||||||
<Constraints>
|
|
||||||
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.support.JSplitPaneSupportLayout" value="org.netbeans.modules.form.compat2.layouts.support.JSplitPaneSupportLayout$JSplitPaneConstraintsDescription">
|
|
||||||
<JSplitPaneConstraints position="right"/>
|
|
||||||
</Constraint>
|
|
||||||
</Constraints>
|
|
||||||
|
|
||||||
<Layout class="org.netbeans.modules.form.compat2.layouts.support.JSplitPaneSupportLayout"/>
|
|
||||||
<SubComponents>
|
|
||||||
<Component class="javax.swing.JTextField" name="jTextField1">
|
|
||||||
<Properties>
|
|
||||||
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
|
||||||
<ResourceString bundle="org/sleuthkit/autopsy/communications/Bundle.properties" key="CVTTopComponent.jTextField1.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
|
||||||
</Property>
|
|
||||||
</Properties>
|
|
||||||
<Constraints>
|
|
||||||
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.support.JSplitPaneSupportLayout" value="org.netbeans.modules.form.compat2.layouts.support.JSplitPaneSupportLayout$JSplitPaneConstraintsDescription">
|
|
||||||
<JSplitPaneConstraints position="top"/>
|
|
||||||
</Constraint>
|
|
||||||
</Constraints>
|
|
||||||
</Component>
|
|
||||||
<Component class="javax.swing.JTextField" name="jTextField2">
|
|
||||||
<Properties>
|
|
||||||
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
|
||||||
<ResourceString bundle="org/sleuthkit/autopsy/communications/Bundle.properties" key="CVTTopComponent.jTextField2.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
|
||||||
</Property>
|
|
||||||
</Properties>
|
|
||||||
<Constraints>
|
|
||||||
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.support.JSplitPaneSupportLayout" value="org.netbeans.modules.form.compat2.layouts.support.JSplitPaneSupportLayout$JSplitPaneConstraintsDescription">
|
|
||||||
<JSplitPaneConstraints position="right"/>
|
|
||||||
</Constraint>
|
|
||||||
</Constraints>
|
|
||||||
</Component>
|
|
||||||
</SubComponents>
|
|
||||||
</Container>
|
|
||||||
</SubComponents>
|
</SubComponents>
|
||||||
</Container>
|
</Container>
|
||||||
<Component class="org.sleuthkit.autopsy.communications.FiltersPanel" name="filtersPane">
|
<Component class="org.sleuthkit.autopsy.communications.FiltersPanel" name="filtersPane">
|
||||||
|
@ -46,8 +46,10 @@ public final class CVTTopComponent extends TopComponent implements ExplorerManag
|
|||||||
private final ExplorerManager em = new ExplorerManager();
|
private final ExplorerManager em = new ExplorerManager();
|
||||||
|
|
||||||
public CVTTopComponent() {
|
public CVTTopComponent() {
|
||||||
|
|
||||||
initComponents();
|
initComponents();
|
||||||
setName(Bundle.CVTTopComponent_name());
|
setName(Bundle.CVTTopComponent_name());
|
||||||
|
splitPane.setRightComponent(new MessageBrowser());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -58,16 +60,14 @@ public final class CVTTopComponent extends TopComponent implements ExplorerManag
|
|||||||
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
|
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
|
||||||
private void initComponents() {
|
private void initComponents() {
|
||||||
|
|
||||||
HSplitPane = new javax.swing.JSplitPane();
|
splitPane = new javax.swing.JSplitPane();
|
||||||
BrowseVisualizeTabPane = new javax.swing.JTabbedPane();
|
BrowseVisualizeTabPane = new javax.swing.JTabbedPane();
|
||||||
accountsBrowser = new org.sleuthkit.autopsy.communications.AccountsBrowser();
|
accountsBrowser = new org.sleuthkit.autopsy.communications.AccountsBrowser();
|
||||||
jPanel1 = new javax.swing.JPanel();
|
jPanel1 = new javax.swing.JPanel();
|
||||||
VSplitPane = new javax.swing.JSplitPane();
|
|
||||||
jTextField1 = new javax.swing.JTextField();
|
|
||||||
jTextField2 = new javax.swing.JTextField();
|
|
||||||
filtersPane = new org.sleuthkit.autopsy.communications.FiltersPanel();
|
filtersPane = new org.sleuthkit.autopsy.communications.FiltersPanel();
|
||||||
|
|
||||||
HSplitPane.setDividerLocation(600);
|
splitPane.setDividerLocation(600);
|
||||||
|
splitPane.setResizeWeight(0.3);
|
||||||
|
|
||||||
BrowseVisualizeTabPane.setFont(new java.awt.Font("Tahoma", 0, 18)); // NOI18N
|
BrowseVisualizeTabPane.setFont(new java.awt.Font("Tahoma", 0, 18)); // NOI18N
|
||||||
BrowseVisualizeTabPane.addTab(org.openide.util.NbBundle.getMessage(CVTTopComponent.class, "CVTTopComponent.accountsBrowser.TabConstraints.tabTitle"), new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/communications/images/table.png")), accountsBrowser); // NOI18N
|
BrowseVisualizeTabPane.addTab(org.openide.util.NbBundle.getMessage(CVTTopComponent.class, "CVTTopComponent.accountsBrowser.TabConstraints.tabTitle"), new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/communications/images/table.png")), accountsBrowser); // NOI18N
|
||||||
@ -87,18 +87,7 @@ public final class CVTTopComponent extends TopComponent implements ExplorerManag
|
|||||||
|
|
||||||
BrowseVisualizeTabPane.addTab(org.openide.util.NbBundle.getMessage(CVTTopComponent.class, "CVTTopComponent.TabConstraints.tabTitle"), new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/communications/images/emblem-web.png")), jPanel1); // NOI18N
|
BrowseVisualizeTabPane.addTab(org.openide.util.NbBundle.getMessage(CVTTopComponent.class, "CVTTopComponent.TabConstraints.tabTitle"), new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/communications/images/emblem-web.png")), jPanel1); // NOI18N
|
||||||
|
|
||||||
HSplitPane.setLeftComponent(BrowseVisualizeTabPane);
|
splitPane.setLeftComponent(BrowseVisualizeTabPane);
|
||||||
|
|
||||||
VSplitPane.setDividerLocation(200);
|
|
||||||
VSplitPane.setOrientation(javax.swing.JSplitPane.VERTICAL_SPLIT);
|
|
||||||
|
|
||||||
jTextField1.setText(org.openide.util.NbBundle.getMessage(CVTTopComponent.class, "CVTTopComponent.jTextField1.text")); // NOI18N
|
|
||||||
VSplitPane.setTopComponent(jTextField1);
|
|
||||||
|
|
||||||
jTextField2.setText(org.openide.util.NbBundle.getMessage(CVTTopComponent.class, "CVTTopComponent.jTextField2.text")); // NOI18N
|
|
||||||
VSplitPane.setRightComponent(jTextField2);
|
|
||||||
|
|
||||||
HSplitPane.setRightComponent(VSplitPane);
|
|
||||||
|
|
||||||
filtersPane.setBorder(javax.swing.BorderFactory.createEtchedBorder());
|
filtersPane.setBorder(javax.swing.BorderFactory.createEtchedBorder());
|
||||||
filtersPane.setMinimumSize(new java.awt.Dimension(256, 495));
|
filtersPane.setMinimumSize(new java.awt.Dimension(256, 495));
|
||||||
@ -109,9 +98,9 @@ public final class CVTTopComponent extends TopComponent implements ExplorerManag
|
|||||||
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
.addGroup(layout.createSequentialGroup()
|
.addGroup(layout.createSequentialGroup()
|
||||||
.addContainerGap()
|
.addContainerGap()
|
||||||
.addComponent(filtersPane, javax.swing.GroupLayout.PREFERRED_SIZE, 244, javax.swing.GroupLayout.PREFERRED_SIZE)
|
.addComponent(filtersPane, javax.swing.GroupLayout.PREFERRED_SIZE, 244, Short.MAX_VALUE)
|
||||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
|
||||||
.addComponent(HSplitPane, javax.swing.GroupLayout.DEFAULT_SIZE, 1322, Short.MAX_VALUE)
|
.addComponent(splitPane, javax.swing.GroupLayout.DEFAULT_SIZE, 1322, Short.MAX_VALUE)
|
||||||
.addContainerGap())
|
.addContainerGap())
|
||||||
);
|
);
|
||||||
layout.setVerticalGroup(
|
layout.setVerticalGroup(
|
||||||
@ -120,7 +109,7 @@ public final class CVTTopComponent extends TopComponent implements ExplorerManag
|
|||||||
.addContainerGap()
|
.addContainerGap()
|
||||||
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
.addComponent(filtersPane, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
|
.addComponent(filtersPane, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
|
||||||
.addComponent(HSplitPane))
|
.addComponent(splitPane))
|
||||||
.addContainerGap())
|
.addContainerGap())
|
||||||
);
|
);
|
||||||
}// </editor-fold>//GEN-END:initComponents
|
}// </editor-fold>//GEN-END:initComponents
|
||||||
@ -128,13 +117,10 @@ public final class CVTTopComponent extends TopComponent implements ExplorerManag
|
|||||||
|
|
||||||
// Variables declaration - do not modify//GEN-BEGIN:variables
|
// Variables declaration - do not modify//GEN-BEGIN:variables
|
||||||
private javax.swing.JTabbedPane BrowseVisualizeTabPane;
|
private javax.swing.JTabbedPane BrowseVisualizeTabPane;
|
||||||
private javax.swing.JSplitPane HSplitPane;
|
|
||||||
private javax.swing.JSplitPane VSplitPane;
|
|
||||||
private org.sleuthkit.autopsy.communications.AccountsBrowser accountsBrowser;
|
private org.sleuthkit.autopsy.communications.AccountsBrowser accountsBrowser;
|
||||||
private org.sleuthkit.autopsy.communications.FiltersPanel filtersPane;
|
private org.sleuthkit.autopsy.communications.FiltersPanel filtersPane;
|
||||||
private javax.swing.JPanel jPanel1;
|
private javax.swing.JPanel jPanel1;
|
||||||
private javax.swing.JTextField jTextField1;
|
private javax.swing.JSplitPane splitPane;
|
||||||
private javax.swing.JTextField jTextField2;
|
|
||||||
// End of variables declaration//GEN-END:variables
|
// End of variables declaration//GEN-END:variables
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -28,11 +28,6 @@
|
|||||||
</SubComponents>
|
</SubComponents>
|
||||||
</Container>
|
</Container>
|
||||||
</NonVisualComponents>
|
</NonVisualComponents>
|
||||||
<Properties>
|
|
||||||
<Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
|
|
||||||
<Dimension value="[256, 469]"/>
|
|
||||||
</Property>
|
|
||||||
</Properties>
|
|
||||||
<AuxValues>
|
<AuxValues>
|
||||||
<AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="1"/>
|
<AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="1"/>
|
||||||
<AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/>
|
<AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/>
|
||||||
@ -56,7 +51,7 @@
|
|||||||
<Group type="102" alignment="0" attributes="0">
|
<Group type="102" alignment="0" attributes="0">
|
||||||
<Component id="filtersTitleLabel" min="-2" max="-2" attributes="0"/>
|
<Component id="filtersTitleLabel" min="-2" max="-2" attributes="0"/>
|
||||||
<EmptySpace max="32767" attributes="0"/>
|
<EmptySpace max="32767" attributes="0"/>
|
||||||
<Component id="applyFiltersButton" min="-2" max="-2" attributes="0"/>
|
<Component id="applyFiltersButton" min="-2" pref="83" max="-2" attributes="0"/>
|
||||||
</Group>
|
</Group>
|
||||||
</Group>
|
</Group>
|
||||||
<EmptySpace max="-2" attributes="0"/>
|
<EmptySpace max="-2" attributes="0"/>
|
||||||
@ -90,6 +85,9 @@
|
|||||||
<ResourceString bundle="org/sleuthkit/autopsy/communications/Bundle.properties" key="FiltersPanel.applyFiltersButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
<ResourceString bundle="org/sleuthkit/autopsy/communications/Bundle.properties" key="FiltersPanel.applyFiltersButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||||
</Property>
|
</Property>
|
||||||
<Property name="horizontalTextPosition" type="int" value="10"/>
|
<Property name="horizontalTextPosition" type="int" value="10"/>
|
||||||
|
<Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
|
||||||
|
<Dimension value="null"/>
|
||||||
|
</Property>
|
||||||
</Properties>
|
</Properties>
|
||||||
<Events>
|
<Events>
|
||||||
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="applyFiltersButtonActionPerformed"/>
|
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="applyFiltersButtonActionPerformed"/>
|
||||||
@ -98,7 +96,7 @@
|
|||||||
<Component class="javax.swing.JLabel" name="filtersTitleLabel">
|
<Component class="javax.swing.JLabel" name="filtersTitleLabel">
|
||||||
<Properties>
|
<Properties>
|
||||||
<Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor">
|
<Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor">
|
||||||
<Font name="Tahoma" size="18" style="0"/>
|
<Font name="Tahoma" size="16" style="0"/>
|
||||||
</Property>
|
</Property>
|
||||||
<Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor">
|
<Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor">
|
||||||
<Image iconType="3" name="/org/sleuthkit/autopsy/communications/images/funnel.png"/>
|
<Image iconType="3" name="/org/sleuthkit/autopsy/communications/images/funnel.png"/>
|
||||||
@ -116,7 +114,7 @@
|
|||||||
<Group type="102" attributes="0">
|
<Group type="102" attributes="0">
|
||||||
<Group type="103" groupAlignment="0" attributes="0">
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
<Group type="102" alignment="1" attributes="0">
|
<Group type="102" alignment="1" attributes="0">
|
||||||
<EmptySpace pref="51" max="32767" attributes="0"/>
|
<EmptySpace pref="43" max="32767" attributes="0"/>
|
||||||
<Component id="unCheckAllAccountTypesButton" min="-2" max="-2" attributes="0"/>
|
<Component id="unCheckAllAccountTypesButton" min="-2" max="-2" attributes="0"/>
|
||||||
<EmptySpace max="-2" attributes="0"/>
|
<EmptySpace max="-2" attributes="0"/>
|
||||||
<Component id="checkAllAccountTypesButton" min="-2" max="-2" attributes="0"/>
|
<Component id="checkAllAccountTypesButton" min="-2" max="-2" attributes="0"/>
|
||||||
|
@ -33,15 +33,16 @@ import org.sleuthkit.autopsy.coreutils.Logger;
|
|||||||
import org.sleuthkit.autopsy.coreutils.ThreadConfined;
|
import org.sleuthkit.autopsy.coreutils.ThreadConfined;
|
||||||
import org.sleuthkit.datamodel.Account;
|
import org.sleuthkit.datamodel.Account;
|
||||||
import org.sleuthkit.datamodel.AccountDeviceInstance;
|
import org.sleuthkit.datamodel.AccountDeviceInstance;
|
||||||
|
import org.sleuthkit.datamodel.AccountTypeFilter;
|
||||||
import org.sleuthkit.datamodel.CommunicationsFilter;
|
import org.sleuthkit.datamodel.CommunicationsFilter;
|
||||||
import org.sleuthkit.datamodel.CommunicationsManager;
|
import org.sleuthkit.datamodel.CommunicationsManager;
|
||||||
import org.sleuthkit.datamodel.DataSource;
|
import org.sleuthkit.datamodel.DataSource;
|
||||||
import org.sleuthkit.datamodel.DeviceFilter;
|
import org.sleuthkit.datamodel.DeviceFilter;
|
||||||
import org.sleuthkit.datamodel.AccountTypeFilter;
|
|
||||||
import org.sleuthkit.datamodel.TskCoreException;
|
import org.sleuthkit.datamodel.TskCoreException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
* Panel that holds the Filter control widgets and translates user filtering
|
||||||
|
* changes into queries against the CommunicationsManager
|
||||||
*/
|
*/
|
||||||
final public class FiltersPanel extends javax.swing.JPanel {
|
final public class FiltersPanel extends javax.swing.JPanel {
|
||||||
|
|
||||||
@ -133,8 +134,6 @@ final public class FiltersPanel extends javax.swing.JPanel {
|
|||||||
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
|
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
|
||||||
private void initComponents() {
|
private void initComponents() {
|
||||||
|
|
||||||
jList1 = new javax.swing.JList<>();
|
|
||||||
|
|
||||||
jList1.setModel(new javax.swing.AbstractListModel<String>() {
|
jList1.setModel(new javax.swing.AbstractListModel<String>() {
|
||||||
String[] strings = { "Item 1", "Item 2", "Item 3", "Item 4", "Item 5" };
|
String[] strings = { "Item 1", "Item 2", "Item 3", "Item 4", "Item 5" };
|
||||||
public int getSize() { return strings.length; }
|
public int getSize() { return strings.length; }
|
||||||
@ -142,18 +141,17 @@ final public class FiltersPanel extends javax.swing.JPanel {
|
|||||||
});
|
});
|
||||||
jScrollPane1.setViewportView(jList1);
|
jScrollPane1.setViewportView(jList1);
|
||||||
|
|
||||||
setPreferredSize(new java.awt.Dimension(256, 469));
|
|
||||||
|
|
||||||
applyFiltersButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/communications/images/control-double.png"))); // NOI18N
|
applyFiltersButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/communications/images/control-double.png"))); // NOI18N
|
||||||
applyFiltersButton.setText(org.openide.util.NbBundle.getMessage(FiltersPanel.class, "FiltersPanel.applyFiltersButton.text")); // NOI18N
|
applyFiltersButton.setText(org.openide.util.NbBundle.getMessage(FiltersPanel.class, "FiltersPanel.applyFiltersButton.text")); // NOI18N
|
||||||
applyFiltersButton.setHorizontalTextPosition(javax.swing.SwingConstants.LEADING);
|
applyFiltersButton.setHorizontalTextPosition(javax.swing.SwingConstants.LEADING);
|
||||||
|
applyFiltersButton.setPreferredSize(null);
|
||||||
applyFiltersButton.addActionListener(new java.awt.event.ActionListener() {
|
applyFiltersButton.addActionListener(new java.awt.event.ActionListener() {
|
||||||
public void actionPerformed(java.awt.event.ActionEvent evt) {
|
public void actionPerformed(java.awt.event.ActionEvent evt) {
|
||||||
applyFiltersButtonActionPerformed(evt);
|
applyFiltersButtonActionPerformed(evt);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
filtersTitleLabel.setFont(new java.awt.Font("Tahoma", 0, 18)); // NOI18N
|
filtersTitleLabel.setFont(new java.awt.Font("Tahoma", 0, 16)); // NOI18N
|
||||||
filtersTitleLabel.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/communications/images/funnel.png"))); // NOI18N
|
filtersTitleLabel.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/communications/images/funnel.png"))); // NOI18N
|
||||||
filtersTitleLabel.setText(org.openide.util.NbBundle.getMessage(FiltersPanel.class, "FiltersPanel.filtersTitleLabel.text")); // NOI18N
|
filtersTitleLabel.setText(org.openide.util.NbBundle.getMessage(FiltersPanel.class, "FiltersPanel.filtersTitleLabel.text")); // NOI18N
|
||||||
|
|
||||||
@ -184,7 +182,7 @@ final public class FiltersPanel extends javax.swing.JPanel {
|
|||||||
.addGroup(jPanel2Layout.createSequentialGroup()
|
.addGroup(jPanel2Layout.createSequentialGroup()
|
||||||
.addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
.addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel2Layout.createSequentialGroup()
|
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel2Layout.createSequentialGroup()
|
||||||
.addContainerGap(51, Short.MAX_VALUE)
|
.addContainerGap(43, Short.MAX_VALUE)
|
||||||
.addComponent(unCheckAllAccountTypesButton)
|
.addComponent(unCheckAllAccountTypesButton)
|
||||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
||||||
.addComponent(checkAllAccountTypesButton))
|
.addComponent(checkAllAccountTypesButton))
|
||||||
@ -232,15 +230,12 @@ final public class FiltersPanel extends javax.swing.JPanel {
|
|||||||
.addGroup(jPanel3Layout.createSequentialGroup()
|
.addGroup(jPanel3Layout.createSequentialGroup()
|
||||||
.addComponent(devicesLabel)
|
.addComponent(devicesLabel)
|
||||||
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
|
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
|
||||||
|
.addComponent(devicesPane, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
|
||||||
.addGroup(jPanel3Layout.createSequentialGroup()
|
.addGroup(jPanel3Layout.createSequentialGroup()
|
||||||
.addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
|
||||||
.addComponent(devicesPane, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
|
.addComponent(unCheckAllDevicesButton)
|
||||||
.addGroup(jPanel3Layout.createSequentialGroup()
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
||||||
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
|
.addComponent(checkAllDevicesButton))
|
||||||
.addComponent(unCheckAllDevicesButton)
|
|
||||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
|
||||||
.addComponent(checkAllDevicesButton)))
|
|
||||||
.addGap(0, 0, 0))
|
|
||||||
);
|
);
|
||||||
jPanel3Layout.setVerticalGroup(
|
jPanel3Layout.setVerticalGroup(
|
||||||
jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
@ -268,7 +263,7 @@ final public class FiltersPanel extends javax.swing.JPanel {
|
|||||||
.addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup()
|
.addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup()
|
||||||
.addComponent(filtersTitleLabel)
|
.addComponent(filtersTitleLabel)
|
||||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
|
||||||
.addComponent(applyFiltersButton)))
|
.addComponent(applyFiltersButton, javax.swing.GroupLayout.PREFERRED_SIZE, 83, javax.swing.GroupLayout.PREFERRED_SIZE)))
|
||||||
.addContainerGap())
|
.addContainerGap())
|
||||||
);
|
);
|
||||||
layout.setVerticalGroup(
|
layout.setVerticalGroup(
|
||||||
@ -277,7 +272,7 @@ final public class FiltersPanel extends javax.swing.JPanel {
|
|||||||
.addContainerGap()
|
.addContainerGap()
|
||||||
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
|
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
|
||||||
.addComponent(filtersTitleLabel)
|
.addComponent(filtersTitleLabel)
|
||||||
.addComponent(applyFiltersButton))
|
.addComponent(applyFiltersButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
|
||||||
.addGap(18, 18, 18)
|
.addGap(18, 18, 18)
|
||||||
.addComponent(jPanel3, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
|
.addComponent(jPanel3, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
|
||||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
|
||||||
@ -304,15 +299,14 @@ final public class FiltersPanel extends javax.swing.JPanel {
|
|||||||
commsFilter.addAndFilter(getDeviceFilter());
|
commsFilter.addAndFilter(getDeviceFilter());
|
||||||
|
|
||||||
commsFilter.addAndFilter(getAccountTypeFilter());
|
commsFilter.addAndFilter(getAccountTypeFilter());
|
||||||
final CommunicationsManager communicationsManager = Case.getCurrentCase().getSleuthkitCase().getCommunicationsManager();
|
final CommunicationsManager commsManager = Case.getCurrentCase().getSleuthkitCase().getCommunicationsManager();
|
||||||
accountDeviceInstances.addAll(communicationsManager.getAccountDeviceInstancesWithRelationships(commsFilter));
|
accountDeviceInstances.addAll(commsManager.getAccountDeviceInstancesWithRelationships(commsFilter));
|
||||||
|
|
||||||
List<AccountDeviceInstanceKey> accountDeviceInstanceKeys = new ArrayList<>();
|
List<AccountDeviceInstanceKey> accountDeviceInstanceKeys = new ArrayList<>();
|
||||||
accountDeviceInstances.forEach((accountDevInstance) -> {
|
accountDeviceInstances.forEach(accountDeviceInstance
|
||||||
accountDeviceInstanceKeys.add(new AccountDeviceInstanceKey(accountDevInstance, commsFilter ) );
|
-> accountDeviceInstanceKeys.add(new AccountDeviceInstanceKey(accountDeviceInstance, commsFilter)));
|
||||||
});
|
|
||||||
|
em.setRootContext(new AbstractNode(new AccountsRootChildren(accountDeviceInstanceKeys, commsManager)));
|
||||||
em.setRootContext(new AbstractNode(new AccountsDeviceInstanceChildren(accountDeviceInstanceKeys)));
|
|
||||||
} catch (TskCoreException ex) {
|
} catch (TskCoreException ex) {
|
||||||
logger.log(Level.SEVERE, "There was a error loading the accounts.", ex);
|
logger.log(Level.SEVERE, "There was a error loading the accounts.", ex);
|
||||||
}
|
}
|
||||||
@ -331,7 +325,7 @@ final public class FiltersPanel extends javax.swing.JPanel {
|
|||||||
.map(entry -> entry.getKey()).collect(Collectors.toSet()));
|
.map(entry -> entry.getKey()).collect(Collectors.toSet()));
|
||||||
return accountTypeFilter;
|
return accountTypeFilter;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ThreadConfined(type = ThreadConfined.ThreadType.AWT)
|
@ThreadConfined(type = ThreadConfined.ThreadType.AWT)
|
||||||
private void setAllTypesSelected(boolean selected) {
|
private void setAllTypesSelected(boolean selected) {
|
||||||
setAllSelected(accountTypeMap, selected);
|
setAllSelected(accountTypeMap, selected);
|
||||||
@ -372,7 +366,7 @@ final public class FiltersPanel extends javax.swing.JPanel {
|
|||||||
private final javax.swing.JLabel devicesLabel = new javax.swing.JLabel();
|
private final javax.swing.JLabel devicesLabel = new javax.swing.JLabel();
|
||||||
private final javax.swing.JPanel devicesPane = new javax.swing.JPanel();
|
private final javax.swing.JPanel devicesPane = new javax.swing.JPanel();
|
||||||
private final javax.swing.JLabel filtersTitleLabel = new javax.swing.JLabel();
|
private final javax.swing.JLabel filtersTitleLabel = new javax.swing.JLabel();
|
||||||
private javax.swing.JList<String> jList1;
|
private final javax.swing.JList<String> jList1 = new javax.swing.JList<>();
|
||||||
private final javax.swing.JPanel jPanel2 = new javax.swing.JPanel();
|
private final javax.swing.JPanel jPanel2 = new javax.swing.JPanel();
|
||||||
private final javax.swing.JPanel jPanel3 = new javax.swing.JPanel();
|
private final javax.swing.JPanel jPanel3 = new javax.swing.JPanel();
|
||||||
private final javax.swing.JScrollPane jScrollPane1 = new javax.swing.JScrollPane();
|
private final javax.swing.JScrollPane jScrollPane1 = new javax.swing.JScrollPane();
|
||||||
|
@ -0,0 +1,61 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
|
||||||
|
<Form version="1.4" maxVersion="1.9" type="org.netbeans.modules.form.forminfo.JPanelFormInfo">
|
||||||
|
<AuxValues>
|
||||||
|
<AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="1"/>
|
||||||
|
<AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/>
|
||||||
|
<AuxValue name="FormSettings_generateFQN" type="java.lang.Boolean" value="true"/>
|
||||||
|
<AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="false"/>
|
||||||
|
<AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="true"/>
|
||||||
|
<AuxValue name="FormSettings_layoutCodeTarget" type="java.lang.Integer" value="1"/>
|
||||||
|
<AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/>
|
||||||
|
<AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/>
|
||||||
|
<AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="2"/>
|
||||||
|
</AuxValues>
|
||||||
|
|
||||||
|
<Layout>
|
||||||
|
<DimensionLayout dim="0">
|
||||||
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
|
<Group type="102" alignment="1" attributes="0">
|
||||||
|
<EmptySpace min="-2" pref="0" max="-2" attributes="0"/>
|
||||||
|
<Component id="splitPane" pref="652" max="32767" attributes="0"/>
|
||||||
|
</Group>
|
||||||
|
</Group>
|
||||||
|
</DimensionLayout>
|
||||||
|
<DimensionLayout dim="1">
|
||||||
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
|
<Group type="102" alignment="0" attributes="0">
|
||||||
|
<EmptySpace min="-2" pref="0" max="-2" attributes="0"/>
|
||||||
|
<Component id="splitPane" pref="1083" max="32767" attributes="0"/>
|
||||||
|
<EmptySpace min="-2" pref="0" max="-2" attributes="0"/>
|
||||||
|
</Group>
|
||||||
|
</Group>
|
||||||
|
</DimensionLayout>
|
||||||
|
</Layout>
|
||||||
|
<SubComponents>
|
||||||
|
<Container class="javax.swing.JSplitPane" name="splitPane">
|
||||||
|
<Properties>
|
||||||
|
<Property name="dividerLocation" type="int" value="400"/>
|
||||||
|
<Property name="dividerSize" type="int" value="10"/>
|
||||||
|
<Property name="orientation" type="int" value="0"/>
|
||||||
|
<Property name="resizeWeight" type="double" value="0.4"/>
|
||||||
|
</Properties>
|
||||||
|
|
||||||
|
<Layout class="org.netbeans.modules.form.compat2.layouts.support.JSplitPaneSupportLayout"/>
|
||||||
|
<SubComponents>
|
||||||
|
<Component class="org.sleuthkit.autopsy.communications.MessageDataContent" name="messageDataContent">
|
||||||
|
<Properties>
|
||||||
|
<Property name="minimumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
|
||||||
|
<Dimension value="null"/>
|
||||||
|
</Property>
|
||||||
|
</Properties>
|
||||||
|
<Constraints>
|
||||||
|
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.support.JSplitPaneSupportLayout" value="org.netbeans.modules.form.compat2.layouts.support.JSplitPaneSupportLayout$JSplitPaneConstraintsDescription">
|
||||||
|
<JSplitPaneConstraints position="bottom"/>
|
||||||
|
</Constraint>
|
||||||
|
</Constraints>
|
||||||
|
</Component>
|
||||||
|
</SubComponents>
|
||||||
|
</Container>
|
||||||
|
</SubComponents>
|
||||||
|
</Form>
|
@ -0,0 +1,151 @@
|
|||||||
|
/*
|
||||||
|
* Autopsy Forensic Browser
|
||||||
|
*
|
||||||
|
* Copyright 2011-2017 Basis Technology Corp.
|
||||||
|
* Contact: carrier <at> sleuthkit <dot> org
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obt ain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
package org.sleuthkit.autopsy.communications;
|
||||||
|
|
||||||
|
import com.google.common.collect.Iterables;
|
||||||
|
import java.util.HashSet;
|
||||||
|
import java.util.Set;
|
||||||
|
import java.util.logging.Level;
|
||||||
|
import org.openide.explorer.ExplorerManager;
|
||||||
|
import org.openide.nodes.Node;
|
||||||
|
import org.sleuthkit.autopsy.communications.AccountsRootChildren.AccountDeviceInstanceNode;
|
||||||
|
import org.sleuthkit.autopsy.corecomponents.DataResultPanel;
|
||||||
|
import org.sleuthkit.autopsy.corecomponents.TableFilterNode;
|
||||||
|
import org.sleuthkit.autopsy.coreutils.Logger;
|
||||||
|
import org.sleuthkit.datamodel.Account;
|
||||||
|
import org.sleuthkit.datamodel.CommunicationsFilter;
|
||||||
|
import org.sleuthkit.datamodel.CommunicationsManager;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The right hand side of the CVT. Has a DataResultPanel to show messages and
|
||||||
|
* account details, and a Content viewer to show individual
|
||||||
|
*/
|
||||||
|
final class MessageBrowser extends javax.swing.JPanel implements ExplorerManager.Provider {
|
||||||
|
|
||||||
|
private static final Logger logger = Logger.getLogger(MessageBrowser.class.getName());
|
||||||
|
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
private ExplorerManager parentExplorereManager;
|
||||||
|
private final DataResultPanel messagesResultPanel;
|
||||||
|
private ExplorerManager internalExplorerManager;
|
||||||
|
|
||||||
|
MessageBrowser() {
|
||||||
|
initComponents();
|
||||||
|
messagesResultPanel = DataResultPanel.createInstanceUninitialized("Account", "", Node.EMPTY, 0, messageDataContent);
|
||||||
|
splitPane.setTopComponent(messagesResultPanel);
|
||||||
|
splitPane.setBottomComponent(messageDataContent);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void addNotify() {
|
||||||
|
super.addNotify();
|
||||||
|
this.parentExplorereManager = ExplorerManager.find(this);
|
||||||
|
|
||||||
|
internalExplorerManager = new ExplorerManager();
|
||||||
|
|
||||||
|
parentExplorereManager.addPropertyChangeListener(pce -> {
|
||||||
|
if (pce.getPropertyName().equals(ExplorerManager.PROP_SELECTED_NODES)) {
|
||||||
|
final Node[] selectedNodes = parentExplorereManager.getSelectedNodes();
|
||||||
|
if (selectedNodes.length == 0) {
|
||||||
|
messagesResultPanel.setNode(null);
|
||||||
|
messagesResultPanel.setPath("");
|
||||||
|
} else {
|
||||||
|
Set<Account> accounts = new HashSet<>();
|
||||||
|
CommunicationsFilter filter = null;
|
||||||
|
CommunicationsManager commsManager = null;
|
||||||
|
for (Node n : selectedNodes) {
|
||||||
|
if (n instanceof AccountDeviceInstanceNode) {
|
||||||
|
final AccountDeviceInstanceNode adiNode = (AccountDeviceInstanceNode) n;
|
||||||
|
accounts.add(adiNode.getAccountDeviceInstance().getAccount());
|
||||||
|
if (commsManager == null) {
|
||||||
|
commsManager = adiNode.getCommsManager();
|
||||||
|
}
|
||||||
|
if (filter == null) {
|
||||||
|
filter = adiNode.getFilter();
|
||||||
|
} else if (filter != adiNode.getFilter()) {
|
||||||
|
///this should never happen...
|
||||||
|
logger.log(Level.WARNING, "Not all AccountDeviceInstanceNodes have the same filter. Using the first.");
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
///this should never happen...
|
||||||
|
logger.log(Level.WARNING, "Unexpected Node encountered: " + n.toString());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
messagesResultPanel.setNode(new TableFilterNode(new AccountDetailsNode(accounts, filter, commsManager), true));
|
||||||
|
if (accounts.size() == 1) {
|
||||||
|
messagesResultPanel.setPath(Iterables.getOnlyElement(accounts).getAccountUniqueID());
|
||||||
|
} else {
|
||||||
|
messagesResultPanel.setPath(accounts.size() + " accounts");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
messagesResultPanel.open();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method is called from within the constructor to initialize the form.
|
||||||
|
* WARNING: Do NOT modify this code. The content of this method is always
|
||||||
|
* regenerated by the Form Editor.
|
||||||
|
*/
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
|
||||||
|
private void initComponents() {
|
||||||
|
|
||||||
|
splitPane = new javax.swing.JSplitPane();
|
||||||
|
messageDataContent = new org.sleuthkit.autopsy.communications.MessageDataContent();
|
||||||
|
|
||||||
|
splitPane.setDividerLocation(400);
|
||||||
|
splitPane.setDividerSize(10);
|
||||||
|
splitPane.setOrientation(javax.swing.JSplitPane.VERTICAL_SPLIT);
|
||||||
|
splitPane.setResizeWeight(0.4);
|
||||||
|
|
||||||
|
messageDataContent.setMinimumSize(null);
|
||||||
|
splitPane.setBottomComponent(messageDataContent);
|
||||||
|
|
||||||
|
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
|
||||||
|
this.setLayout(layout);
|
||||||
|
layout.setHorizontalGroup(
|
||||||
|
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
|
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
|
||||||
|
.addGap(0, 0, 0)
|
||||||
|
.addComponent(splitPane, javax.swing.GroupLayout.DEFAULT_SIZE, 652, Short.MAX_VALUE))
|
||||||
|
);
|
||||||
|
layout.setVerticalGroup(
|
||||||
|
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
|
.addGroup(layout.createSequentialGroup()
|
||||||
|
.addGap(0, 0, 0)
|
||||||
|
.addComponent(splitPane, javax.swing.GroupLayout.DEFAULT_SIZE, 1083, Short.MAX_VALUE)
|
||||||
|
.addGap(0, 0, 0))
|
||||||
|
);
|
||||||
|
}// </editor-fold>//GEN-END:initComponents
|
||||||
|
|
||||||
|
|
||||||
|
// Variables declaration - do not modify//GEN-BEGIN:variables
|
||||||
|
private org.sleuthkit.autopsy.communications.MessageDataContent messageDataContent;
|
||||||
|
private javax.swing.JSplitPane splitPane;
|
||||||
|
// End of variables declaration//GEN-END:variables
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ExplorerManager getExplorerManager() {
|
||||||
|
return internalExplorerManager;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,38 @@
|
|||||||
|
/*
|
||||||
|
* Autopsy Forensic Browser
|
||||||
|
*
|
||||||
|
* Copyright 2011-2017 Basis Technology Corp.
|
||||||
|
* Contact: carrier <at> sleuthkit <dot> org
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
package org.sleuthkit.autopsy.communications;
|
||||||
|
|
||||||
|
import java.beans.PropertyChangeEvent;
|
||||||
|
import org.sleuthkit.autopsy.contentviewers.MessageContentViewer;
|
||||||
|
import org.sleuthkit.autopsy.corecomponentinterfaces.DataContent;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Extend MessageContentViewer so that it implements DataContent and can be set
|
||||||
|
* as the only ContentViewer for a DataResultPanel
|
||||||
|
*/
|
||||||
|
public class MessageDataContent extends MessageContentViewer implements DataContent {
|
||||||
|
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void propertyChange(PropertyChangeEvent evt) {
|
||||||
|
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,124 @@
|
|||||||
|
/*
|
||||||
|
* Autopsy Forensic Browser
|
||||||
|
*
|
||||||
|
* Copyright 2011-2017 Basis Technology Corp.
|
||||||
|
* Contact: carrier <at> sleuthkit <dot> org
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
package org.sleuthkit.autopsy.communications;
|
||||||
|
|
||||||
|
import java.util.logging.Level;
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
import org.openide.nodes.Sheet;
|
||||||
|
import org.sleuthkit.autopsy.coreutils.Logger;
|
||||||
|
import org.sleuthkit.autopsy.datamodel.BlackboardArtifactNode;
|
||||||
|
import org.sleuthkit.autopsy.datamodel.NodeProperty;
|
||||||
|
import org.sleuthkit.datamodel.BlackboardArtifact;
|
||||||
|
import org.sleuthkit.datamodel.BlackboardAttribute;
|
||||||
|
import org.sleuthkit.datamodel.BlackboardAttribute.ATTRIBUTE_TYPE;
|
||||||
|
import static org.sleuthkit.datamodel.BlackboardAttribute.ATTRIBUTE_TYPE.TSK_DATETIME;
|
||||||
|
import static org.sleuthkit.datamodel.BlackboardAttribute.ATTRIBUTE_TYPE.TSK_DATETIME_SENT;
|
||||||
|
import static org.sleuthkit.datamodel.BlackboardAttribute.ATTRIBUTE_TYPE.TSK_DATETIME_START;
|
||||||
|
import static org.sleuthkit.datamodel.BlackboardAttribute.ATTRIBUTE_TYPE.TSK_EMAIL_FROM;
|
||||||
|
import static org.sleuthkit.datamodel.BlackboardAttribute.ATTRIBUTE_TYPE.TSK_EMAIL_TO;
|
||||||
|
import static org.sleuthkit.datamodel.BlackboardAttribute.ATTRIBUTE_TYPE.TSK_PHONE_NUMBER_FROM;
|
||||||
|
import static org.sleuthkit.datamodel.BlackboardAttribute.ATTRIBUTE_TYPE.TSK_PHONE_NUMBER_TO;
|
||||||
|
import static org.sleuthkit.datamodel.BlackboardAttribute.ATTRIBUTE_TYPE.TSK_SUBJECT;
|
||||||
|
import org.sleuthkit.datamodel.TskCoreException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class RelationShipFilterNode extends BlackboardArtifactNode {
|
||||||
|
|
||||||
|
private static final Logger logger = Logger.getLogger(RelationShipFilterNode.class.getName());
|
||||||
|
|
||||||
|
public RelationShipFilterNode(BlackboardArtifact artifact) {
|
||||||
|
super(artifact);
|
||||||
|
final String stripEnd = StringUtils.stripEnd(artifact.getDisplayName(), "s");
|
||||||
|
String removeEndIgnoreCase = StringUtils.removeEndIgnoreCase(stripEnd, "message");
|
||||||
|
setDisplayName(removeEndIgnoreCase.isEmpty() ? stripEnd : removeEndIgnoreCase);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected Sheet createSheet() {
|
||||||
|
|
||||||
|
Sheet s = new Sheet();
|
||||||
|
Sheet.Set ss = s.get(Sheet.PROPERTIES);
|
||||||
|
if (ss == null) {
|
||||||
|
ss = Sheet.createPropertiesSet();
|
||||||
|
s.put(ss);
|
||||||
|
}
|
||||||
|
|
||||||
|
ss.put(new NodeProperty<>("Type", "Type", "Type", getDisplayName()));
|
||||||
|
final BlackboardArtifact artifact = getArtifact();
|
||||||
|
BlackboardArtifact.ARTIFACT_TYPE fromID = BlackboardArtifact.ARTIFACT_TYPE.fromID(getArtifact().getArtifactTypeID());
|
||||||
|
if (null != fromID) {
|
||||||
|
switch (fromID) {
|
||||||
|
case TSK_EMAIL_MSG:
|
||||||
|
ss.put(new NodeProperty<>("From", "From", "From",
|
||||||
|
getAttributeDisplayString(artifact, TSK_EMAIL_FROM)));
|
||||||
|
ss.put(new NodeProperty<>("To", "To", "To",
|
||||||
|
getAttributeDisplayString(artifact, TSK_EMAIL_TO)));
|
||||||
|
ss.put(new NodeProperty<>("Date", "Date", "Date",
|
||||||
|
getAttributeDisplayString(artifact, TSK_DATETIME_SENT)));
|
||||||
|
ss.put(new NodeProperty<>("Subject", "Subject", "Subject",
|
||||||
|
getAttributeDisplayString(artifact, TSK_SUBJECT)));
|
||||||
|
break;
|
||||||
|
case TSK_MESSAGE:
|
||||||
|
ss.put(new NodeProperty<>("From", "From", "From",
|
||||||
|
getAttributeDisplayString(artifact, TSK_PHONE_NUMBER_FROM)));
|
||||||
|
ss.put(new NodeProperty<>("To", "To", "To",
|
||||||
|
getAttributeDisplayString(artifact, TSK_PHONE_NUMBER_TO)));
|
||||||
|
ss.put(new NodeProperty<>("Date", "Date", "Date",
|
||||||
|
getAttributeDisplayString(artifact, TSK_DATETIME)));
|
||||||
|
ss.put(new NodeProperty<>("Subject", "Subject", "Subject",
|
||||||
|
getAttributeDisplayString(artifact, TSK_SUBJECT)));
|
||||||
|
break;
|
||||||
|
case TSK_CALLLOG:
|
||||||
|
ss.put(new NodeProperty<>("From", "From", "From",
|
||||||
|
getAttributeDisplayString(artifact, TSK_PHONE_NUMBER_FROM)));
|
||||||
|
ss.put(new NodeProperty<>("To", "To", "To",
|
||||||
|
getAttributeDisplayString(artifact, TSK_PHONE_NUMBER_TO)));
|
||||||
|
ss.put(new NodeProperty<>("Date", "Date", "Date",
|
||||||
|
getAttributeDisplayString(artifact, TSK_DATETIME_START)));
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param artifact the value of artifact
|
||||||
|
* @param attributeType the value of TSK_SUBJECT1
|
||||||
|
*
|
||||||
|
* @throws TskCoreException
|
||||||
|
*/
|
||||||
|
private static String getAttributeDisplayString(final BlackboardArtifact artifact, final ATTRIBUTE_TYPE attributeType) {
|
||||||
|
try {
|
||||||
|
BlackboardAttribute attribute = artifact.getAttribute(new BlackboardAttribute.Type(BlackboardAttribute.ATTRIBUTE_TYPE.fromID(attributeType.getTypeID())));
|
||||||
|
if (attribute == null) {
|
||||||
|
return "";
|
||||||
|
} else {
|
||||||
|
return attribute.getDisplayString();
|
||||||
|
}
|
||||||
|
} catch (TskCoreException tskCoreException) {
|
||||||
|
logger.log(Level.WARNING, "Error getting attribute value.", tskCoreException);
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -37,4 +37,4 @@ MessageContentViewer.directionText.text=direction
|
|||||||
MessageContentViewer.ccLabel.text=CC:
|
MessageContentViewer.ccLabel.text=CC:
|
||||||
MessageContentViewer.showImagesToggleButton.text=Show Images
|
MessageContentViewer.showImagesToggleButton.text=Show Images
|
||||||
MessageContentViewer.showImagesToggleButton.hide.text=Hide Images
|
MessageContentViewer.showImagesToggleButton.hide.text=Hide Images
|
||||||
MessageContentViewer.htmlbodyScrollPane.TabConstraints.tabTitle=HTML
|
MessageContentViewer.htmlPane.TabConstraints.tabTitle=HTML
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
<Form version="1.5" maxVersion="1.9" type="org.netbeans.modules.form.forminfo.JPanelFormInfo">
|
<Form version="1.5" maxVersion="1.9" type="org.netbeans.modules.form.forminfo.JPanelFormInfo">
|
||||||
<Properties>
|
<Properties>
|
||||||
<Property name="minimumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
|
<Property name="minimumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
|
||||||
<Dimension value="[650, 546]"/>
|
<Dimension value="null"/>
|
||||||
</Property>
|
</Property>
|
||||||
</Properties>
|
</Properties>
|
||||||
<AuxValues>
|
<AuxValues>
|
||||||
@ -21,22 +21,24 @@
|
|||||||
<Layout>
|
<Layout>
|
||||||
<DimensionLayout dim="0">
|
<DimensionLayout dim="0">
|
||||||
<Group type="103" groupAlignment="0" attributes="0">
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
<Group type="102" alignment="1" attributes="0">
|
<Group type="102" alignment="0" attributes="0">
|
||||||
<EmptySpace max="-2" attributes="0"/>
|
<EmptySpace min="-2" pref="5" max="-2" attributes="0"/>
|
||||||
<Component id="envelopePanel" max="32767" attributes="0"/>
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
<EmptySpace max="-2" attributes="0"/>
|
<Component id="msgbodyTabbedPane" max="32767" attributes="0"/>
|
||||||
|
<Component id="envelopePanel" max="32767" attributes="0"/>
|
||||||
|
</Group>
|
||||||
|
<EmptySpace min="-2" pref="5" max="-2" attributes="0"/>
|
||||||
</Group>
|
</Group>
|
||||||
<Component id="msgbodyTabbedPane" alignment="0" max="32767" attributes="0"/>
|
|
||||||
</Group>
|
</Group>
|
||||||
</DimensionLayout>
|
</DimensionLayout>
|
||||||
<DimensionLayout dim="1">
|
<DimensionLayout dim="1">
|
||||||
<Group type="103" groupAlignment="0" attributes="0">
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
<Group type="102" alignment="0" attributes="0">
|
<Group type="102" alignment="0" attributes="0">
|
||||||
|
<EmptySpace min="-2" pref="5" max="-2" attributes="0"/>
|
||||||
|
<Component id="envelopePanel" min="-2" max="-2" attributes="0"/>
|
||||||
<EmptySpace max="-2" attributes="0"/>
|
<EmptySpace max="-2" attributes="0"/>
|
||||||
<Component id="envelopePanel" max="32767" attributes="0"/>
|
<Component id="msgbodyTabbedPane" pref="471" max="32767" attributes="0"/>
|
||||||
<EmptySpace max="-2" attributes="0"/>
|
<EmptySpace min="0" pref="0" max="-2" attributes="0"/>
|
||||||
<Component id="msgbodyTabbedPane" min="-2" pref="397" max="-2" attributes="0"/>
|
|
||||||
<EmptySpace max="-2" attributes="0"/>
|
|
||||||
</Group>
|
</Group>
|
||||||
</Group>
|
</Group>
|
||||||
</DimensionLayout>
|
</DimensionLayout>
|
||||||
@ -53,53 +55,46 @@
|
|||||||
<DimensionLayout dim="0">
|
<DimensionLayout dim="0">
|
||||||
<Group type="103" groupAlignment="0" attributes="0">
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
<Group type="102" attributes="0">
|
<Group type="102" attributes="0">
|
||||||
<EmptySpace max="-2" attributes="0"/>
|
<EmptySpace min="-2" pref="5" max="-2" attributes="0"/>
|
||||||
<Group type="103" groupAlignment="0" attributes="0">
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
<Group type="102" attributes="0">
|
<Group type="102" attributes="0">
|
||||||
<Group type="103" groupAlignment="0" attributes="0">
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
<Component id="fromLabel" alignment="0" min="-2" max="-2" attributes="0"/>
|
<Component id="fromLabel" alignment="0" min="-2" max="-2" attributes="0"/>
|
||||||
<Component id="toLabel" alignment="0" min="-2" max="-2" attributes="0"/>
|
<Component id="toLabel" alignment="0" min="-2" max="-2" attributes="0"/>
|
||||||
</Group>
|
</Group>
|
||||||
<EmptySpace type="unrelated" max="-2" attributes="0"/>
|
<EmptySpace type="unrelated" min="-2" max="-2" attributes="0"/>
|
||||||
<Group type="103" groupAlignment="0" attributes="0">
|
|
||||||
<Component id="fromText" max="32767" attributes="0"/>
|
|
||||||
<Component id="toText" max="32767" attributes="0"/>
|
|
||||||
</Group>
|
|
||||||
<Group type="103" groupAlignment="0" attributes="0">
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
<Group type="102" attributes="0">
|
<Group type="102" attributes="0">
|
||||||
<EmptySpace min="-2" pref="8" max="-2" attributes="0"/>
|
<Component id="toText" max="32767" attributes="0"/>
|
||||||
<Component id="datetimeText" min="-2" max="-2" attributes="0"/>
|
|
||||||
</Group>
|
|
||||||
<Group type="102" alignment="1" attributes="0">
|
|
||||||
<EmptySpace max="-2" attributes="0"/>
|
<EmptySpace max="-2" attributes="0"/>
|
||||||
<Component id="directionText" min="-2" max="-2" attributes="0"/>
|
<Component id="directionText" min="-2" pref="66" max="-2" attributes="0"/>
|
||||||
|
</Group>
|
||||||
|
<Group type="102" attributes="0">
|
||||||
|
<Component id="fromText" max="32767" attributes="0"/>
|
||||||
|
<EmptySpace max="-2" attributes="0"/>
|
||||||
|
<Component id="datetimeText" min="-2" pref="140" max="-2" attributes="0"/>
|
||||||
</Group>
|
</Group>
|
||||||
</Group>
|
</Group>
|
||||||
</Group>
|
</Group>
|
||||||
<Group type="102" attributes="0">
|
<Group type="102" attributes="0">
|
||||||
<Group type="103" groupAlignment="0" attributes="0">
|
<Component id="ccLabel" min="-2" max="-2" attributes="0"/>
|
||||||
<Group type="102" attributes="0">
|
<EmptySpace min="-2" pref="26" max="-2" attributes="0"/>
|
||||||
<Component id="ccLabel" min="-2" max="-2" attributes="0"/>
|
<Component id="ccText" max="32767" attributes="0"/>
|
||||||
<EmptySpace type="separate" max="-2" attributes="0"/>
|
</Group>
|
||||||
<Component id="ccText" min="-2" max="-2" attributes="0"/>
|
<Group type="102" alignment="0" attributes="0">
|
||||||
</Group>
|
<Component id="subjectLabel" min="-2" max="-2" attributes="0"/>
|
||||||
<Group type="102" alignment="0" attributes="0">
|
<EmptySpace min="-2" max="-2" attributes="0"/>
|
||||||
<Component id="subjectLabel" min="-2" max="-2" attributes="0"/>
|
<Component id="subjectText" max="32767" attributes="0"/>
|
||||||
<EmptySpace max="-2" attributes="0"/>
|
|
||||||
<Component id="subjectText" min="-2" pref="400" max="-2" attributes="0"/>
|
|
||||||
</Group>
|
|
||||||
</Group>
|
|
||||||
<EmptySpace min="0" pref="0" max="32767" attributes="0"/>
|
|
||||||
</Group>
|
</Group>
|
||||||
</Group>
|
</Group>
|
||||||
<EmptySpace max="-2" attributes="0"/>
|
<EmptySpace min="-2" pref="5" max="-2" attributes="0"/>
|
||||||
</Group>
|
</Group>
|
||||||
</Group>
|
</Group>
|
||||||
</DimensionLayout>
|
</DimensionLayout>
|
||||||
<DimensionLayout dim="1">
|
<DimensionLayout dim="1">
|
||||||
<Group type="103" groupAlignment="0" attributes="0">
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
<Group type="102" alignment="0" attributes="0">
|
<Group type="102" alignment="0" attributes="0">
|
||||||
<EmptySpace max="-2" attributes="0"/>
|
<EmptySpace min="-2" pref="5" max="-2" attributes="0"/>
|
||||||
<Group type="103" groupAlignment="3" attributes="0">
|
<Group type="103" groupAlignment="3" attributes="0">
|
||||||
<Component id="fromLabel" alignment="3" min="-2" max="-2" attributes="0"/>
|
<Component id="fromLabel" alignment="3" min="-2" max="-2" attributes="0"/>
|
||||||
<Component id="datetimeText" alignment="3" min="-2" max="-2" attributes="0"/>
|
<Component id="datetimeText" alignment="3" min="-2" max="-2" attributes="0"/>
|
||||||
@ -116,12 +111,12 @@
|
|||||||
<Component id="ccLabel" alignment="3" min="-2" max="-2" attributes="0"/>
|
<Component id="ccLabel" alignment="3" min="-2" max="-2" attributes="0"/>
|
||||||
<Component id="ccText" alignment="3" min="-2" max="-2" attributes="0"/>
|
<Component id="ccText" alignment="3" min="-2" max="-2" attributes="0"/>
|
||||||
</Group>
|
</Group>
|
||||||
<EmptySpace type="separate" max="-2" attributes="0"/>
|
<EmptySpace type="unrelated" max="-2" attributes="0"/>
|
||||||
<Group type="103" groupAlignment="3" attributes="0">
|
<Group type="103" groupAlignment="3" attributes="0">
|
||||||
<Component id="subjectLabel" alignment="3" min="-2" max="-2" attributes="0"/>
|
<Component id="subjectLabel" alignment="3" min="-2" max="-2" attributes="0"/>
|
||||||
<Component id="subjectText" alignment="3" min="-2" max="-2" attributes="0"/>
|
<Component id="subjectText" alignment="3" min="-2" max="-2" attributes="0"/>
|
||||||
</Group>
|
</Group>
|
||||||
<EmptySpace pref="24" max="32767" attributes="0"/>
|
<EmptySpace min="-2" pref="5" max="-2" attributes="0"/>
|
||||||
</Group>
|
</Group>
|
||||||
</Group>
|
</Group>
|
||||||
</DimensionLayout>
|
</DimensionLayout>
|
||||||
@ -136,6 +131,7 @@
|
|||||||
</Component>
|
</Component>
|
||||||
<Component class="javax.swing.JLabel" name="datetimeText">
|
<Component class="javax.swing.JLabel" name="datetimeText">
|
||||||
<Properties>
|
<Properties>
|
||||||
|
<Property name="horizontalAlignment" type="int" value="4"/>
|
||||||
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
||||||
<ResourceString bundle="org/sleuthkit/autopsy/contentviewers/Bundle.properties" key="MessageContentViewer.datetimeText.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
<ResourceString bundle="org/sleuthkit/autopsy/contentviewers/Bundle.properties" key="MessageContentViewer.datetimeText.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||||
</Property>
|
</Property>
|
||||||
@ -192,6 +188,7 @@
|
|||||||
</Component>
|
</Component>
|
||||||
<Component class="javax.swing.JLabel" name="directionText">
|
<Component class="javax.swing.JLabel" name="directionText">
|
||||||
<Properties>
|
<Properties>
|
||||||
|
<Property name="horizontalAlignment" type="int" value="4"/>
|
||||||
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
||||||
<ResourceString bundle="org/sleuthkit/autopsy/contentviewers/Bundle.properties" key="MessageContentViewer.directionText.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
<ResourceString bundle="org/sleuthkit/autopsy/contentviewers/Bundle.properties" key="MessageContentViewer.directionText.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||||
</Property>
|
</Property>
|
||||||
@ -247,81 +244,64 @@
|
|||||||
</Component>
|
</Component>
|
||||||
</SubComponents>
|
</SubComponents>
|
||||||
</Container>
|
</Container>
|
||||||
<Container class="javax.swing.JScrollPane" name="htmlbodyScrollPane">
|
<Container class="javax.swing.JPanel" name="htmlPane">
|
||||||
<Constraints>
|
<Constraints>
|
||||||
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.support.JTabbedPaneSupportLayout" value="org.netbeans.modules.form.compat2.layouts.support.JTabbedPaneSupportLayout$JTabbedPaneConstraintsDescription">
|
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.support.JTabbedPaneSupportLayout" value="org.netbeans.modules.form.compat2.layouts.support.JTabbedPaneSupportLayout$JTabbedPaneConstraintsDescription">
|
||||||
<JTabbedPaneConstraints tabName="HTML">
|
<JTabbedPaneConstraints tabName="HTML">
|
||||||
<Property name="tabTitle" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
<Property name="tabTitle" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
||||||
<ResourceString bundle="org/sleuthkit/autopsy/contentviewers/Bundle.properties" key="MessageContentViewer.htmlbodyScrollPane.TabConstraints.tabTitle" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
<ResourceString bundle="org/sleuthkit/autopsy/contentviewers/Bundle.properties" key="MessageContentViewer.htmlPane.TabConstraints.tabTitle" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||||
</Property>
|
</Property>
|
||||||
</JTabbedPaneConstraints>
|
</JTabbedPaneConstraints>
|
||||||
</Constraint>
|
</Constraint>
|
||||||
</Constraints>
|
</Constraints>
|
||||||
|
|
||||||
<Layout class="org.netbeans.modules.form.compat2.layouts.support.JScrollPaneSupportLayout"/>
|
<Layout>
|
||||||
|
<DimensionLayout dim="0">
|
||||||
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
|
<Component id="jScrollPane2" alignment="0" max="32767" attributes="0"/>
|
||||||
|
<Group type="102" alignment="1" attributes="0">
|
||||||
|
<EmptySpace pref="533" max="32767" attributes="0"/>
|
||||||
|
<Component id="showImagesToggleButton" min="-2" max="-2" attributes="0"/>
|
||||||
|
<EmptySpace min="-2" pref="3" max="-2" attributes="0"/>
|
||||||
|
</Group>
|
||||||
|
</Group>
|
||||||
|
</DimensionLayout>
|
||||||
|
<DimensionLayout dim="1">
|
||||||
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
|
<Group type="102" alignment="0" attributes="0">
|
||||||
|
<Component id="showImagesToggleButton" min="-2" max="-2" attributes="0"/>
|
||||||
|
<EmptySpace min="-2" max="-2" attributes="0"/>
|
||||||
|
<Component id="jScrollPane2" max="32767" attributes="0"/>
|
||||||
|
<EmptySpace min="0" pref="0" max="-2" attributes="0"/>
|
||||||
|
</Group>
|
||||||
|
</Group>
|
||||||
|
</DimensionLayout>
|
||||||
|
</Layout>
|
||||||
<SubComponents>
|
<SubComponents>
|
||||||
<Container class="javax.swing.JPanel" name="jPanel2">
|
<Container class="javax.swing.JScrollPane" name="jScrollPane2">
|
||||||
|
<AuxValues>
|
||||||
|
<AuxValue name="autoScrollPane" type="java.lang.Boolean" value="true"/>
|
||||||
|
</AuxValues>
|
||||||
|
|
||||||
<Layout>
|
<Layout class="org.netbeans.modules.form.compat2.layouts.support.JScrollPaneSupportLayout"/>
|
||||||
<DimensionLayout dim="0">
|
|
||||||
<Group type="103" groupAlignment="0" attributes="0">
|
|
||||||
<Group type="102" alignment="1" attributes="0">
|
|
||||||
<EmptySpace pref="536" max="32767" attributes="0"/>
|
|
||||||
<Component id="showImagesToggleButton" min="-2" max="-2" attributes="0"/>
|
|
||||||
<EmptySpace max="-2" attributes="0"/>
|
|
||||||
</Group>
|
|
||||||
<Group type="103" rootIndex="1" groupAlignment="0" attributes="0">
|
|
||||||
<Group type="102" alignment="0" attributes="0">
|
|
||||||
<EmptySpace max="-2" attributes="0"/>
|
|
||||||
<Component id="jScrollPane2" pref="623" max="32767" attributes="0"/>
|
|
||||||
<EmptySpace max="-2" attributes="0"/>
|
|
||||||
</Group>
|
|
||||||
</Group>
|
|
||||||
</Group>
|
|
||||||
</DimensionLayout>
|
|
||||||
<DimensionLayout dim="1">
|
|
||||||
<Group type="103" groupAlignment="0" attributes="0">
|
|
||||||
<Group type="102" alignment="0" attributes="0">
|
|
||||||
<EmptySpace max="-2" attributes="0"/>
|
|
||||||
<Component id="showImagesToggleButton" min="-2" max="-2" attributes="0"/>
|
|
||||||
<EmptySpace pref="333" max="32767" attributes="0"/>
|
|
||||||
</Group>
|
|
||||||
<Group type="103" rootIndex="1" groupAlignment="0" attributes="0">
|
|
||||||
<Group type="102" alignment="1" attributes="0">
|
|
||||||
<EmptySpace min="0" pref="34" max="32767" attributes="0"/>
|
|
||||||
<Component id="jScrollPane2" min="-2" pref="333" max="-2" attributes="0"/>
|
|
||||||
</Group>
|
|
||||||
</Group>
|
|
||||||
</Group>
|
|
||||||
</DimensionLayout>
|
|
||||||
</Layout>
|
|
||||||
<SubComponents>
|
<SubComponents>
|
||||||
<Container class="javax.swing.JScrollPane" name="jScrollPane2">
|
<Component class="javax.swing.JTextPane" name="htmlbodyTextPane">
|
||||||
<AuxValues>
|
|
||||||
<AuxValue name="autoScrollPane" type="java.lang.Boolean" value="true"/>
|
|
||||||
</AuxValues>
|
|
||||||
|
|
||||||
<Layout class="org.netbeans.modules.form.compat2.layouts.support.JScrollPaneSupportLayout"/>
|
|
||||||
<SubComponents>
|
|
||||||
<Component class="javax.swing.JTextPane" name="htmlbodyTextPane">
|
|
||||||
<Properties>
|
|
||||||
<Property name="editable" type="boolean" value="false"/>
|
|
||||||
</Properties>
|
|
||||||
</Component>
|
|
||||||
</SubComponents>
|
|
||||||
</Container>
|
|
||||||
<Component class="javax.swing.JToggleButton" name="showImagesToggleButton">
|
|
||||||
<Properties>
|
<Properties>
|
||||||
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
<Property name="editable" type="boolean" value="false"/>
|
||||||
<ResourceString bundle="org/sleuthkit/autopsy/contentviewers/Bundle.properties" key="MessageContentViewer.showImagesToggleButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
|
||||||
</Property>
|
|
||||||
</Properties>
|
</Properties>
|
||||||
<Events>
|
|
||||||
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="showImagesToggleButtonActionPerformed"/>
|
|
||||||
</Events>
|
|
||||||
</Component>
|
</Component>
|
||||||
</SubComponents>
|
</SubComponents>
|
||||||
</Container>
|
</Container>
|
||||||
|
<Component class="javax.swing.JToggleButton" name="showImagesToggleButton">
|
||||||
|
<Properties>
|
||||||
|
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
||||||
|
<ResourceString bundle="org/sleuthkit/autopsy/contentviewers/Bundle.properties" key="MessageContentViewer.showImagesToggleButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||||
|
</Property>
|
||||||
|
</Properties>
|
||||||
|
<Events>
|
||||||
|
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="showImagesToggleButtonActionPerformed"/>
|
||||||
|
</Events>
|
||||||
|
</Component>
|
||||||
</SubComponents>
|
</SubComponents>
|
||||||
</Container>
|
</Container>
|
||||||
<Container class="javax.swing.JScrollPane" name="rtfbodyScrollPane">
|
<Container class="javax.swing.JScrollPane" name="rtfbodyScrollPane">
|
||||||
|
@ -20,6 +20,8 @@ package org.sleuthkit.autopsy.contentviewers;
|
|||||||
|
|
||||||
import java.awt.Component;
|
import java.awt.Component;
|
||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
|
import org.jsoup.Jsoup;
|
||||||
|
import org.jsoup.nodes.Document;
|
||||||
import org.openide.nodes.Node;
|
import org.openide.nodes.Node;
|
||||||
import org.openide.util.NbBundle;
|
import org.openide.util.NbBundle;
|
||||||
import org.openide.util.lookup.ServiceProvider;
|
import org.openide.util.lookup.ServiceProvider;
|
||||||
@ -28,8 +30,6 @@ import org.sleuthkit.autopsy.coreutils.Logger;
|
|||||||
import org.sleuthkit.datamodel.BlackboardArtifact;
|
import org.sleuthkit.datamodel.BlackboardArtifact;
|
||||||
import org.sleuthkit.datamodel.BlackboardAttribute;
|
import org.sleuthkit.datamodel.BlackboardAttribute;
|
||||||
import org.sleuthkit.datamodel.TskCoreException;
|
import org.sleuthkit.datamodel.TskCoreException;
|
||||||
import org.jsoup.Jsoup;
|
|
||||||
import org.jsoup.nodes.Document;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Shows SMS/MMS/EMail messages
|
* Shows SMS/MMS/EMail messages
|
||||||
@ -37,16 +37,16 @@ import org.jsoup.nodes.Document;
|
|||||||
@ServiceProvider(service = DataContentViewer.class, position = 4)
|
@ServiceProvider(service = DataContentViewer.class, position = 4)
|
||||||
public class MessageContentViewer extends javax.swing.JPanel implements DataContentViewer {
|
public class MessageContentViewer extends javax.swing.JPanel implements DataContentViewer {
|
||||||
|
|
||||||
|
|
||||||
private static final Logger LOGGER = Logger.getLogger(MessageContentViewer.class.getName());
|
private static final Logger LOGGER = Logger.getLogger(MessageContentViewer.class.getName());
|
||||||
|
|
||||||
private static final int HDR_TAB_INDEX = 0;
|
private static final int HDR_TAB_INDEX = 0;
|
||||||
private static final int TEXT_TAB_INDEX = 1;
|
private static final int TEXT_TAB_INDEX = 1;
|
||||||
private static final int HTML_TAB_INDEX = 2;
|
private static final int HTML_TAB_INDEX = 2;
|
||||||
private static final int RTF_TAB_INDEX = 3;
|
private static final int RTF_TAB_INDEX = 3;
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
private BlackboardArtifact artifact; // Artifact currently being displayed
|
private BlackboardArtifact artifact; // Artifact currently being displayed
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates new form MessageContentViewer
|
* Creates new form MessageContentViewer
|
||||||
*/
|
*/
|
||||||
@ -80,20 +80,20 @@ public class MessageContentViewer extends javax.swing.JPanel implements DataCont
|
|||||||
headersTextArea = new javax.swing.JTextArea();
|
headersTextArea = new javax.swing.JTextArea();
|
||||||
textbodyScrollPane = new javax.swing.JScrollPane();
|
textbodyScrollPane = new javax.swing.JScrollPane();
|
||||||
textbodyTextArea = new javax.swing.JTextArea();
|
textbodyTextArea = new javax.swing.JTextArea();
|
||||||
htmlbodyScrollPane = new javax.swing.JScrollPane();
|
htmlPane = new javax.swing.JPanel();
|
||||||
jPanel2 = new javax.swing.JPanel();
|
|
||||||
jScrollPane2 = new javax.swing.JScrollPane();
|
jScrollPane2 = new javax.swing.JScrollPane();
|
||||||
htmlbodyTextPane = new javax.swing.JTextPane();
|
htmlbodyTextPane = new javax.swing.JTextPane();
|
||||||
showImagesToggleButton = new javax.swing.JToggleButton();
|
showImagesToggleButton = new javax.swing.JToggleButton();
|
||||||
rtfbodyScrollPane = new javax.swing.JScrollPane();
|
rtfbodyScrollPane = new javax.swing.JScrollPane();
|
||||||
rtfbodyTextPane = new javax.swing.JTextPane();
|
rtfbodyTextPane = new javax.swing.JTextPane();
|
||||||
|
|
||||||
setMinimumSize(new java.awt.Dimension(650, 546));
|
setMinimumSize(null);
|
||||||
|
|
||||||
envelopePanel.setBackground(new java.awt.Color(204, 204, 204));
|
envelopePanel.setBackground(new java.awt.Color(204, 204, 204));
|
||||||
|
|
||||||
org.openide.awt.Mnemonics.setLocalizedText(fromLabel, org.openide.util.NbBundle.getMessage(MessageContentViewer.class, "MessageContentViewer.fromLabel.text")); // NOI18N
|
org.openide.awt.Mnemonics.setLocalizedText(fromLabel, org.openide.util.NbBundle.getMessage(MessageContentViewer.class, "MessageContentViewer.fromLabel.text")); // NOI18N
|
||||||
|
|
||||||
|
datetimeText.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
|
||||||
org.openide.awt.Mnemonics.setLocalizedText(datetimeText, org.openide.util.NbBundle.getMessage(MessageContentViewer.class, "MessageContentViewer.datetimeText.text")); // NOI18N
|
org.openide.awt.Mnemonics.setLocalizedText(datetimeText, org.openide.util.NbBundle.getMessage(MessageContentViewer.class, "MessageContentViewer.datetimeText.text")); // NOI18N
|
||||||
|
|
||||||
org.openide.awt.Mnemonics.setLocalizedText(fromText, org.openide.util.NbBundle.getMessage(MessageContentViewer.class, "MessageContentViewer.fromText.text")); // NOI18N
|
org.openide.awt.Mnemonics.setLocalizedText(fromText, org.openide.util.NbBundle.getMessage(MessageContentViewer.class, "MessageContentViewer.fromText.text")); // NOI18N
|
||||||
@ -110,6 +110,7 @@ public class MessageContentViewer extends javax.swing.JPanel implements DataCont
|
|||||||
|
|
||||||
org.openide.awt.Mnemonics.setLocalizedText(subjectText, org.openide.util.NbBundle.getMessage(MessageContentViewer.class, "MessageContentViewer.subjectText.text")); // NOI18N
|
org.openide.awt.Mnemonics.setLocalizedText(subjectText, org.openide.util.NbBundle.getMessage(MessageContentViewer.class, "MessageContentViewer.subjectText.text")); // NOI18N
|
||||||
|
|
||||||
|
directionText.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
|
||||||
org.openide.awt.Mnemonics.setLocalizedText(directionText, org.openide.util.NbBundle.getMessage(MessageContentViewer.class, "MessageContentViewer.directionText.text")); // NOI18N
|
org.openide.awt.Mnemonics.setLocalizedText(directionText, org.openide.util.NbBundle.getMessage(MessageContentViewer.class, "MessageContentViewer.directionText.text")); // NOI18N
|
||||||
|
|
||||||
javax.swing.GroupLayout envelopePanelLayout = new javax.swing.GroupLayout(envelopePanel);
|
javax.swing.GroupLayout envelopePanelLayout = new javax.swing.GroupLayout(envelopePanel);
|
||||||
@ -117,40 +118,36 @@ public class MessageContentViewer extends javax.swing.JPanel implements DataCont
|
|||||||
envelopePanelLayout.setHorizontalGroup(
|
envelopePanelLayout.setHorizontalGroup(
|
||||||
envelopePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
envelopePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
.addGroup(envelopePanelLayout.createSequentialGroup()
|
.addGroup(envelopePanelLayout.createSequentialGroup()
|
||||||
.addContainerGap()
|
.addGap(5, 5, 5)
|
||||||
.addGroup(envelopePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
.addGroup(envelopePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
.addGroup(envelopePanelLayout.createSequentialGroup()
|
.addGroup(envelopePanelLayout.createSequentialGroup()
|
||||||
.addGroup(envelopePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
.addGroup(envelopePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
.addComponent(fromLabel)
|
.addComponent(fromLabel)
|
||||||
.addComponent(toLabel))
|
.addComponent(toLabel))
|
||||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
|
||||||
.addGroup(envelopePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
|
||||||
.addComponent(fromText, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
|
|
||||||
.addComponent(toText, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
|
|
||||||
.addGroup(envelopePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
.addGroup(envelopePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
.addGroup(envelopePanelLayout.createSequentialGroup()
|
.addGroup(envelopePanelLayout.createSequentialGroup()
|
||||||
.addGap(8, 8, 8)
|
.addComponent(toText, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
|
||||||
.addComponent(datetimeText))
|
|
||||||
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, envelopePanelLayout.createSequentialGroup()
|
|
||||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
||||||
.addComponent(directionText))))
|
.addComponent(directionText, javax.swing.GroupLayout.PREFERRED_SIZE, 66, javax.swing.GroupLayout.PREFERRED_SIZE))
|
||||||
|
.addGroup(envelopePanelLayout.createSequentialGroup()
|
||||||
|
.addComponent(fromText, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
|
||||||
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
||||||
|
.addComponent(datetimeText, javax.swing.GroupLayout.PREFERRED_SIZE, 140, javax.swing.GroupLayout.PREFERRED_SIZE))))
|
||||||
.addGroup(envelopePanelLayout.createSequentialGroup()
|
.addGroup(envelopePanelLayout.createSequentialGroup()
|
||||||
.addGroup(envelopePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
.addComponent(ccLabel)
|
||||||
.addGroup(envelopePanelLayout.createSequentialGroup()
|
.addGap(26, 26, 26)
|
||||||
.addComponent(ccLabel)
|
.addComponent(ccText, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
|
||||||
.addGap(18, 18, 18)
|
.addGroup(envelopePanelLayout.createSequentialGroup()
|
||||||
.addComponent(ccText))
|
.addComponent(subjectLabel)
|
||||||
.addGroup(envelopePanelLayout.createSequentialGroup()
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
||||||
.addComponent(subjectLabel)
|
.addComponent(subjectText, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))
|
||||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
.addGap(5, 5, 5))
|
||||||
.addComponent(subjectText, javax.swing.GroupLayout.PREFERRED_SIZE, 400, javax.swing.GroupLayout.PREFERRED_SIZE)))
|
|
||||||
.addGap(0, 0, Short.MAX_VALUE)))
|
|
||||||
.addContainerGap())
|
|
||||||
);
|
);
|
||||||
envelopePanelLayout.setVerticalGroup(
|
envelopePanelLayout.setVerticalGroup(
|
||||||
envelopePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
envelopePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
.addGroup(envelopePanelLayout.createSequentialGroup()
|
.addGroup(envelopePanelLayout.createSequentialGroup()
|
||||||
.addContainerGap()
|
.addGap(5, 5, 5)
|
||||||
.addGroup(envelopePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
|
.addGroup(envelopePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
|
||||||
.addComponent(fromLabel)
|
.addComponent(fromLabel)
|
||||||
.addComponent(datetimeText)
|
.addComponent(datetimeText)
|
||||||
@ -164,11 +161,11 @@ public class MessageContentViewer extends javax.swing.JPanel implements DataCont
|
|||||||
.addGroup(envelopePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
|
.addGroup(envelopePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
|
||||||
.addComponent(ccLabel)
|
.addComponent(ccLabel)
|
||||||
.addComponent(ccText))
|
.addComponent(ccText))
|
||||||
.addGap(18, 18, 18)
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
|
||||||
.addGroup(envelopePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
|
.addGroup(envelopePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
|
||||||
.addComponent(subjectLabel)
|
.addComponent(subjectLabel)
|
||||||
.addComponent(subjectText))
|
.addComponent(subjectText))
|
||||||
.addContainerGap(24, Short.MAX_VALUE))
|
.addGap(5, 5, 5))
|
||||||
);
|
);
|
||||||
|
|
||||||
headersTextArea.setEditable(false);
|
headersTextArea.setEditable(false);
|
||||||
@ -195,35 +192,26 @@ public class MessageContentViewer extends javax.swing.JPanel implements DataCont
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2);
|
javax.swing.GroupLayout htmlPaneLayout = new javax.swing.GroupLayout(htmlPane);
|
||||||
jPanel2.setLayout(jPanel2Layout);
|
htmlPane.setLayout(htmlPaneLayout);
|
||||||
jPanel2Layout.setHorizontalGroup(
|
htmlPaneLayout.setHorizontalGroup(
|
||||||
jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
htmlPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel2Layout.createSequentialGroup()
|
.addComponent(jScrollPane2)
|
||||||
.addContainerGap(536, Short.MAX_VALUE)
|
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, htmlPaneLayout.createSequentialGroup()
|
||||||
|
.addContainerGap(533, Short.MAX_VALUE)
|
||||||
.addComponent(showImagesToggleButton)
|
.addComponent(showImagesToggleButton)
|
||||||
.addContainerGap())
|
.addGap(3, 3, 3))
|
||||||
.addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
|
||||||
.addGroup(jPanel2Layout.createSequentialGroup()
|
|
||||||
.addContainerGap()
|
|
||||||
.addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 623, Short.MAX_VALUE)
|
|
||||||
.addContainerGap()))
|
|
||||||
);
|
);
|
||||||
jPanel2Layout.setVerticalGroup(
|
htmlPaneLayout.setVerticalGroup(
|
||||||
jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
htmlPaneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
.addGroup(jPanel2Layout.createSequentialGroup()
|
.addGroup(htmlPaneLayout.createSequentialGroup()
|
||||||
.addContainerGap()
|
|
||||||
.addComponent(showImagesToggleButton)
|
.addComponent(showImagesToggleButton)
|
||||||
.addContainerGap(333, Short.MAX_VALUE))
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
||||||
.addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
.addComponent(jScrollPane2)
|
||||||
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel2Layout.createSequentialGroup()
|
.addGap(0, 0, 0))
|
||||||
.addGap(0, 34, Short.MAX_VALUE)
|
|
||||||
.addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 333, javax.swing.GroupLayout.PREFERRED_SIZE)))
|
|
||||||
);
|
);
|
||||||
|
|
||||||
htmlbodyScrollPane.setViewportView(jPanel2);
|
msgbodyTabbedPane.addTab(org.openide.util.NbBundle.getMessage(MessageContentViewer.class, "MessageContentViewer.htmlPane.TabConstraints.tabTitle"), htmlPane); // NOI18N
|
||||||
|
|
||||||
msgbodyTabbedPane.addTab(org.openide.util.NbBundle.getMessage(MessageContentViewer.class, "MessageContentViewer.htmlbodyScrollPane.TabConstraints.tabTitle"), htmlbodyScrollPane); // NOI18N
|
|
||||||
|
|
||||||
rtfbodyTextPane.setEditable(false);
|
rtfbodyTextPane.setEditable(false);
|
||||||
rtfbodyScrollPane.setViewportView(rtfbodyTextPane);
|
rtfbodyScrollPane.setViewportView(rtfbodyTextPane);
|
||||||
@ -234,37 +222,37 @@ public class MessageContentViewer extends javax.swing.JPanel implements DataCont
|
|||||||
this.setLayout(layout);
|
this.setLayout(layout);
|
||||||
layout.setHorizontalGroup(
|
layout.setHorizontalGroup(
|
||||||
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
|
.addGroup(layout.createSequentialGroup()
|
||||||
.addContainerGap()
|
.addGap(5, 5, 5)
|
||||||
.addComponent(envelopePanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
|
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
.addContainerGap())
|
.addComponent(msgbodyTabbedPane)
|
||||||
.addComponent(msgbodyTabbedPane)
|
.addComponent(envelopePanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
|
||||||
|
.addGap(5, 5, 5))
|
||||||
);
|
);
|
||||||
layout.setVerticalGroup(
|
layout.setVerticalGroup(
|
||||||
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
.addGroup(layout.createSequentialGroup()
|
.addGroup(layout.createSequentialGroup()
|
||||||
.addContainerGap()
|
.addGap(5, 5, 5)
|
||||||
.addComponent(envelopePanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
|
.addComponent(envelopePanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
|
||||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
||||||
.addComponent(msgbodyTabbedPane, javax.swing.GroupLayout.PREFERRED_SIZE, 397, javax.swing.GroupLayout.PREFERRED_SIZE)
|
.addComponent(msgbodyTabbedPane, javax.swing.GroupLayout.DEFAULT_SIZE, 471, Short.MAX_VALUE)
|
||||||
.addContainerGap())
|
.addGap(0, 0, 0))
|
||||||
);
|
);
|
||||||
}// </editor-fold>//GEN-END:initComponents
|
}// </editor-fold>//GEN-END:initComponents
|
||||||
|
|
||||||
private void showImagesToggleButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_showImagesToggleButtonActionPerformed
|
private void showImagesToggleButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_showImagesToggleButtonActionPerformed
|
||||||
|
|
||||||
try {
|
try {
|
||||||
BlackboardAttribute attr = artifact.getAttribute(new BlackboardAttribute.Type(BlackboardAttribute.ATTRIBUTE_TYPE.TSK_EMAIL_CONTENT_HTML));
|
BlackboardAttribute attr = artifact.getAttribute(new BlackboardAttribute.Type(BlackboardAttribute.ATTRIBUTE_TYPE.TSK_EMAIL_CONTENT_HTML));
|
||||||
if (attr != null && !attr.getValueString().isEmpty()) {
|
if (attr != null && !attr.getValueString().isEmpty()) {
|
||||||
|
|
||||||
if (showImagesToggleButton.isSelected()) {
|
if (showImagesToggleButton.isSelected()) {
|
||||||
showImagesToggleButton.setText(org.openide.util.NbBundle.getMessage(MessageContentViewer.class, "MessageContentViewer.showImagesToggleButton.hide.text"));
|
showImagesToggleButton.setText(org.openide.util.NbBundle.getMessage(MessageContentViewer.class, "MessageContentViewer.showImagesToggleButton.hide.text"));
|
||||||
|
|
||||||
this.htmlbodyTextPane.setText("<html><body>" + attr.getValueString() + "</body></html>");
|
this.htmlbodyTextPane.setText("<html><body>" + attr.getValueString() + "</body></html>");
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
showImagesToggleButton.setText(org.openide.util.NbBundle.getMessage(MessageContentViewer.class, "MessageContentViewer.showImagesToggleButton.text"));
|
showImagesToggleButton.setText(org.openide.util.NbBundle.getMessage(MessageContentViewer.class, "MessageContentViewer.showImagesToggleButton.text"));
|
||||||
|
|
||||||
this.htmlbodyTextPane.setText("<html><body>" + cleanseHTML(attr.getValueString()) + "</body></html>");
|
this.htmlbodyTextPane.setText("<html><body>" + cleanseHTML(attr.getValueString()) + "</body></html>");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -284,9 +272,8 @@ public class MessageContentViewer extends javax.swing.JPanel implements DataCont
|
|||||||
private javax.swing.JLabel fromText;
|
private javax.swing.JLabel fromText;
|
||||||
private javax.swing.JScrollPane headersScrollPane;
|
private javax.swing.JScrollPane headersScrollPane;
|
||||||
private javax.swing.JTextArea headersTextArea;
|
private javax.swing.JTextArea headersTextArea;
|
||||||
private javax.swing.JScrollPane htmlbodyScrollPane;
|
private javax.swing.JPanel htmlPane;
|
||||||
private javax.swing.JTextPane htmlbodyTextPane;
|
private javax.swing.JTextPane htmlbodyTextPane;
|
||||||
private javax.swing.JPanel jPanel2;
|
|
||||||
private javax.swing.JScrollPane jScrollPane2;
|
private javax.swing.JScrollPane jScrollPane2;
|
||||||
private javax.swing.JTabbedPane msgbodyTabbedPane;
|
private javax.swing.JTabbedPane msgbodyTabbedPane;
|
||||||
private javax.swing.JScrollPane rtfbodyScrollPane;
|
private javax.swing.JScrollPane rtfbodyScrollPane;
|
||||||
@ -302,27 +289,30 @@ public class MessageContentViewer extends javax.swing.JPanel implements DataCont
|
|||||||
|
|
||||||
private void customizeComponents() {
|
private void customizeComponents() {
|
||||||
// do any customizations here
|
// do any customizations here
|
||||||
Utilities.configureTextPaneAsHtml(htmlbodyTextPane);
|
Utilities.configureTextPaneAsHtml(htmlbodyTextPane);
|
||||||
Utilities.configureTextPaneAsRtf(rtfbodyTextPane);
|
Utilities.configureTextPaneAsRtf(rtfbodyTextPane);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setNode(Node node) {
|
public void setNode(Node node) {
|
||||||
|
|
||||||
|
if (node == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
artifact = node.getLookup().lookup(BlackboardArtifact.class);
|
artifact = node.getLookup().lookup(BlackboardArtifact.class);
|
||||||
|
|
||||||
if (artifact == null) {
|
if (artifact == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (artifact.getArtifactTypeID() == BlackboardArtifact.ARTIFACT_TYPE.TSK_MESSAGE.getTypeID()) {
|
if (artifact.getArtifactTypeID() == BlackboardArtifact.ARTIFACT_TYPE.TSK_MESSAGE.getTypeID()) {
|
||||||
displayMsg();
|
displayMsg();
|
||||||
}
|
} else if (artifact.getArtifactTypeID() == BlackboardArtifact.ARTIFACT_TYPE.TSK_EMAIL_MSG.getTypeID()) {
|
||||||
else if (artifact.getArtifactTypeID() == BlackboardArtifact.ARTIFACT_TYPE.TSK_EMAIL_MSG.getTypeID()) {
|
|
||||||
displayEmailMsg();
|
displayEmailMsg();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -352,211 +342,197 @@ public class MessageContentViewer extends javax.swing.JPanel implements DataCont
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isSupported(Node node) {
|
public boolean isSupported(Node node) {
|
||||||
BlackboardArtifact artifact = node.getLookup().lookup(BlackboardArtifact.class);
|
BlackboardArtifact artifact = node.getLookup().lookup(BlackboardArtifact.class);
|
||||||
return ( (artifact != null)
|
return ((artifact != null)
|
||||||
&& ((artifact.getArtifactTypeID() == BlackboardArtifact.ARTIFACT_TYPE.TSK_EMAIL_MSG.getTypeID())
|
&& ((artifact.getArtifactTypeID() == BlackboardArtifact.ARTIFACT_TYPE.TSK_EMAIL_MSG.getTypeID())
|
||||||
|| (artifact.getArtifactTypeID() == BlackboardArtifact.ARTIFACT_TYPE.TSK_MESSAGE.getTypeID())));
|
|| (artifact.getArtifactTypeID() == BlackboardArtifact.ARTIFACT_TYPE.TSK_MESSAGE.getTypeID())));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int isPreferred(Node node) {
|
public int isPreferred(Node node) {
|
||||||
|
|
||||||
if ( isSupported(node)){
|
if (isSupported(node)) {
|
||||||
return 6;
|
return 6;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void displayEmailMsg() {
|
||||||
private void displayEmailMsg()
|
|
||||||
{
|
|
||||||
directionText.setVisible(false);
|
directionText.setVisible(false);
|
||||||
|
|
||||||
showImagesToggleButton.setVisible(false);
|
showImagesToggleButton.setVisible(false);
|
||||||
showImagesToggleButton.setText("Show Images");
|
showImagesToggleButton.setText("Show Images");
|
||||||
showImagesToggleButton.setSelected(false);
|
showImagesToggleButton.setSelected(false);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
BlackboardAttribute attr = artifact.getAttribute(new BlackboardAttribute.Type(BlackboardAttribute.ATTRIBUTE_TYPE.TSK_EMAIL_FROM));
|
BlackboardAttribute attr = artifact.getAttribute(new BlackboardAttribute.Type(BlackboardAttribute.ATTRIBUTE_TYPE.TSK_EMAIL_FROM));
|
||||||
this.fromText.setText(attr.getValueString());
|
this.fromText.setText(attr.getValueString());
|
||||||
|
|
||||||
attr = artifact.getAttribute(new BlackboardAttribute.Type(BlackboardAttribute.ATTRIBUTE_TYPE.TSK_EMAIL_TO));
|
attr = artifact.getAttribute(new BlackboardAttribute.Type(BlackboardAttribute.ATTRIBUTE_TYPE.TSK_EMAIL_TO));
|
||||||
if (attr != null) {
|
if (attr != null) {
|
||||||
this.toText.setText(attr.getValueString());
|
this.toText.setText(attr.getValueString());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
attr = artifact.getAttribute(new BlackboardAttribute.Type(BlackboardAttribute.ATTRIBUTE_TYPE.TSK_EMAIL_CC));
|
attr = artifact.getAttribute(new BlackboardAttribute.Type(BlackboardAttribute.ATTRIBUTE_TYPE.TSK_EMAIL_CC));
|
||||||
if (attr != null && !attr.getValueString().isEmpty()) {
|
if (attr != null && !attr.getValueString().isEmpty()) {
|
||||||
this.ccText.setVisible(true);
|
this.ccText.setVisible(true);
|
||||||
this.ccText.setText(attr.getValueString());
|
this.ccText.setText(attr.getValueString());
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
this.ccText.setVisible(false);
|
this.ccText.setVisible(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
attr = artifact.getAttribute(new BlackboardAttribute.Type(BlackboardAttribute.ATTRIBUTE_TYPE.TSK_SUBJECT));
|
attr = artifact.getAttribute(new BlackboardAttribute.Type(BlackboardAttribute.ATTRIBUTE_TYPE.TSK_SUBJECT));
|
||||||
if (attr != null && !attr.getValueString().isEmpty()) {
|
if (attr != null && !attr.getValueString().isEmpty()) {
|
||||||
this.subjectText.setVisible(true);
|
this.subjectText.setVisible(true);
|
||||||
this.subjectText.setText(attr.getValueString());
|
this.subjectText.setText(attr.getValueString());
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
this.subjectText.setVisible(false);
|
this.subjectText.setVisible(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
attr = artifact.getAttribute(new BlackboardAttribute.Type(BlackboardAttribute.ATTRIBUTE_TYPE.TSK_DATETIME_RCVD));
|
attr = artifact.getAttribute(new BlackboardAttribute.Type(BlackboardAttribute.ATTRIBUTE_TYPE.TSK_DATETIME_RCVD));
|
||||||
if (attr != null && !attr.getDisplayString().isEmpty()) {
|
if (attr != null && !attr.getDisplayString().isEmpty()) {
|
||||||
this.datetimeText.setVisible(true);
|
this.datetimeText.setVisible(true);
|
||||||
this.datetimeText.setText(attr.getDisplayString());
|
this.datetimeText.setText(attr.getDisplayString());
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
this.datetimeText.setVisible(false);
|
this.datetimeText.setVisible(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
int selectedTabIndex = -1;
|
int selectedTabIndex = -1;
|
||||||
attr = artifact.getAttribute(new BlackboardAttribute.Type(BlackboardAttribute.ATTRIBUTE_TYPE.TSK_EMAIL_CONTENT_PLAIN));
|
attr = artifact.getAttribute(new BlackboardAttribute.Type(BlackboardAttribute.ATTRIBUTE_TYPE.TSK_EMAIL_CONTENT_PLAIN));
|
||||||
if (attr != null && !attr.getValueString().isEmpty()) {
|
if (attr != null && !attr.getValueString().isEmpty()) {
|
||||||
this.textbodyTextArea.setVisible(true);
|
this.textbodyTextArea.setVisible(true);
|
||||||
this.textbodyTextArea.setText(attr.getValueString());
|
this.textbodyTextArea.setText(attr.getValueString());
|
||||||
|
|
||||||
msgbodyTabbedPane.setEnabledAt(TEXT_TAB_INDEX, true);
|
msgbodyTabbedPane.setEnabledAt(TEXT_TAB_INDEX, true);
|
||||||
selectedTabIndex = TEXT_TAB_INDEX;
|
selectedTabIndex = TEXT_TAB_INDEX;
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
msgbodyTabbedPane.setEnabledAt(TEXT_TAB_INDEX, false);
|
msgbodyTabbedPane.setEnabledAt(TEXT_TAB_INDEX, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
attr = artifact.getAttribute(new BlackboardAttribute.Type(BlackboardAttribute.ATTRIBUTE_TYPE.TSK_EMAIL_CONTENT_HTML));
|
attr = artifact.getAttribute(new BlackboardAttribute.Type(BlackboardAttribute.ATTRIBUTE_TYPE.TSK_EMAIL_CONTENT_HTML));
|
||||||
if (attr != null && !attr.getValueString().isEmpty()) {
|
if (attr != null && !attr.getValueString().isEmpty()) {
|
||||||
|
|
||||||
this.showImagesToggleButton.setVisible(true);
|
this.showImagesToggleButton.setVisible(true);
|
||||||
|
|
||||||
|
|
||||||
this.htmlbodyTextPane.setVisible(true);
|
this.htmlbodyTextPane.setVisible(true);
|
||||||
this.htmlbodyTextPane.setText("<html><body>" + cleanseHTML(attr.getValueString()) + "</body></html>");
|
this.htmlbodyTextPane.setText("<html><body>" + cleanseHTML(attr.getValueString()) + "</body></html>");
|
||||||
//this.htmlbodyTextPane.setText(cleanseHTML(attr.getValueString()));
|
//this.htmlbodyTextPane.setText(cleanseHTML(attr.getValueString()));
|
||||||
|
|
||||||
msgbodyTabbedPane.setEnabledAt(HTML_TAB_INDEX, true);
|
msgbodyTabbedPane.setEnabledAt(HTML_TAB_INDEX, true);
|
||||||
selectedTabIndex = HTML_TAB_INDEX;
|
selectedTabIndex = HTML_TAB_INDEX;
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
msgbodyTabbedPane.setEnabledAt(HTML_TAB_INDEX, false);
|
msgbodyTabbedPane.setEnabledAt(HTML_TAB_INDEX, false);
|
||||||
this.htmlbodyTextPane.setVisible(false);
|
this.htmlbodyTextPane.setVisible(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
attr = artifact.getAttribute(new BlackboardAttribute.Type(BlackboardAttribute.ATTRIBUTE_TYPE.TSK_EMAIL_CONTENT_RTF));
|
attr = artifact.getAttribute(new BlackboardAttribute.Type(BlackboardAttribute.ATTRIBUTE_TYPE.TSK_EMAIL_CONTENT_RTF));
|
||||||
if (attr != null && !attr.getValueString().isEmpty()) {
|
if (attr != null && !attr.getValueString().isEmpty()) {
|
||||||
|
|
||||||
this.rtfbodyTextPane.setVisible(true);
|
this.rtfbodyTextPane.setVisible(true);
|
||||||
this.rtfbodyTextPane.setText(attr.getValueString());
|
this.rtfbodyTextPane.setText(attr.getValueString());
|
||||||
|
|
||||||
msgbodyTabbedPane.setEnabledAt(RTF_TAB_INDEX, true);
|
msgbodyTabbedPane.setEnabledAt(RTF_TAB_INDEX, true);
|
||||||
selectedTabIndex = RTF_TAB_INDEX;
|
selectedTabIndex = RTF_TAB_INDEX;
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
msgbodyTabbedPane.setEnabledAt(RTF_TAB_INDEX, false);
|
msgbodyTabbedPane.setEnabledAt(RTF_TAB_INDEX, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
attr = artifact.getAttribute(new BlackboardAttribute.Type(BlackboardAttribute.ATTRIBUTE_TYPE.TSK_HEADERS));
|
attr = artifact.getAttribute(new BlackboardAttribute.Type(BlackboardAttribute.ATTRIBUTE_TYPE.TSK_HEADERS));
|
||||||
if (attr != null && !attr.getValueString().isEmpty()) {
|
if (attr != null && !attr.getValueString().isEmpty()) {
|
||||||
this.headersTextArea.setVisible(true);
|
this.headersTextArea.setVisible(true);
|
||||||
this.headersTextArea.setText(attr.getValueString());
|
this.headersTextArea.setText(attr.getValueString());
|
||||||
if (selectedTabIndex < 0) {
|
if (selectedTabIndex < 0) {
|
||||||
selectedTabIndex = HDR_TAB_INDEX;
|
selectedTabIndex = HDR_TAB_INDEX;
|
||||||
}
|
}
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
msgbodyTabbedPane.setEnabledAt(HDR_TAB_INDEX, false);
|
msgbodyTabbedPane.setEnabledAt(HDR_TAB_INDEX, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
msgbodyTabbedPane.setSelectedIndex(selectedTabIndex);
|
msgbodyTabbedPane.setSelectedIndex(selectedTabIndex);
|
||||||
}
|
} catch (TskCoreException ex) {
|
||||||
catch (TskCoreException ex) {
|
|
||||||
LOGGER.log(Level.WARNING, "Failed to get attributes for email message.", ex); //NON-NLS
|
LOGGER.log(Level.WARNING, "Failed to get attributes for email message.", ex); //NON-NLS
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void displayMsg() {
|
private void displayMsg() {
|
||||||
|
|
||||||
this.ccText.setVisible(false);
|
this.ccText.setVisible(false);
|
||||||
this.showImagesToggleButton.setVisible(false);
|
this.showImagesToggleButton.setVisible(false);
|
||||||
msgbodyTabbedPane.setEnabledAt(HTML_TAB_INDEX, false);
|
msgbodyTabbedPane.setEnabledAt(HTML_TAB_INDEX, false);
|
||||||
msgbodyTabbedPane.setEnabledAt(RTF_TAB_INDEX, false);
|
msgbodyTabbedPane.setEnabledAt(RTF_TAB_INDEX, false);
|
||||||
msgbodyTabbedPane.setEnabledAt(HDR_TAB_INDEX, false);
|
msgbodyTabbedPane.setEnabledAt(HDR_TAB_INDEX, false);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
|
||||||
BlackboardAttribute attr = artifact.getAttribute(new BlackboardAttribute.Type(BlackboardAttribute.ATTRIBUTE_TYPE.TSK_PHONE_NUMBER_FROM));
|
BlackboardAttribute attr = artifact.getAttribute(new BlackboardAttribute.Type(BlackboardAttribute.ATTRIBUTE_TYPE.TSK_PHONE_NUMBER_FROM));
|
||||||
if (attr != null) {
|
if (attr != null) {
|
||||||
this.fromText.setText(attr.getValueString());
|
this.fromText.setText(attr.getValueString());
|
||||||
}else {
|
} else {
|
||||||
this.fromText.setVisible(false);
|
this.fromText.setVisible(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
attr = artifact.getAttribute(new BlackboardAttribute.Type(BlackboardAttribute.ATTRIBUTE_TYPE.TSK_PHONE_NUMBER_TO));
|
attr = artifact.getAttribute(new BlackboardAttribute.Type(BlackboardAttribute.ATTRIBUTE_TYPE.TSK_PHONE_NUMBER_TO));
|
||||||
if (attr != null) {
|
if (attr != null) {
|
||||||
this.toText.setText(attr.getValueString());
|
this.toText.setText(attr.getValueString());
|
||||||
}else {
|
} else {
|
||||||
this.toText.setVisible(false);
|
this.toText.setVisible(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
attr = artifact.getAttribute(new BlackboardAttribute.Type(BlackboardAttribute.ATTRIBUTE_TYPE.TSK_DIRECTION));
|
attr = artifact.getAttribute(new BlackboardAttribute.Type(BlackboardAttribute.ATTRIBUTE_TYPE.TSK_DIRECTION));
|
||||||
if (attr != null) {
|
if (attr != null) {
|
||||||
this.directionText.setText(attr.getValueString());
|
this.directionText.setText(attr.getValueString());
|
||||||
}else {
|
} else {
|
||||||
this.directionText.setVisible(false);
|
this.directionText.setVisible(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
attr = artifact.getAttribute(new BlackboardAttribute.Type(BlackboardAttribute.ATTRIBUTE_TYPE.TSK_SUBJECT));
|
attr = artifact.getAttribute(new BlackboardAttribute.Type(BlackboardAttribute.ATTRIBUTE_TYPE.TSK_SUBJECT));
|
||||||
if (attr != null && !attr.getValueString().isEmpty()) {
|
if (attr != null && !attr.getValueString().isEmpty()) {
|
||||||
this.subjectText.setVisible(true);
|
this.subjectText.setVisible(true);
|
||||||
this.subjectText.setText(attr.getValueString());
|
this.subjectText.setText(attr.getValueString());
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
this.subjectText.setVisible(false);
|
this.subjectText.setVisible(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
attr = artifact.getAttribute(new BlackboardAttribute.Type(BlackboardAttribute.ATTRIBUTE_TYPE.TSK_DATETIME));
|
attr = artifact.getAttribute(new BlackboardAttribute.Type(BlackboardAttribute.ATTRIBUTE_TYPE.TSK_DATETIME));
|
||||||
if (attr != null && !attr.getDisplayString().isEmpty()) {
|
if (attr != null && !attr.getDisplayString().isEmpty()) {
|
||||||
this.datetimeText.setVisible(true);
|
this.datetimeText.setVisible(true);
|
||||||
this.datetimeText.setText(attr.getDisplayString());
|
this.datetimeText.setText(attr.getDisplayString());
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
this.datetimeText.setVisible(false);
|
this.datetimeText.setVisible(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
attr = artifact.getAttribute(new BlackboardAttribute.Type(BlackboardAttribute.ATTRIBUTE_TYPE.TSK_TEXT));
|
attr = artifact.getAttribute(new BlackboardAttribute.Type(BlackboardAttribute.ATTRIBUTE_TYPE.TSK_TEXT));
|
||||||
if (attr != null && !attr.getValueString().isEmpty()) {
|
if (attr != null && !attr.getValueString().isEmpty()) {
|
||||||
this.textbodyTextArea.setVisible(true);
|
this.textbodyTextArea.setVisible(true);
|
||||||
this.textbodyTextArea.setText(attr.getValueString());
|
this.textbodyTextArea.setText(attr.getValueString());
|
||||||
|
|
||||||
msgbodyTabbedPane.setEnabledAt(TEXT_TAB_INDEX, true);
|
msgbodyTabbedPane.setEnabledAt(TEXT_TAB_INDEX, true);
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
msgbodyTabbedPane.setEnabledAt(TEXT_TAB_INDEX, false);
|
msgbodyTabbedPane.setEnabledAt(TEXT_TAB_INDEX, false);
|
||||||
}
|
}
|
||||||
msgbodyTabbedPane.setSelectedIndex(TEXT_TAB_INDEX);
|
msgbodyTabbedPane.setSelectedIndex(TEXT_TAB_INDEX);
|
||||||
}
|
} catch (TskCoreException ex) {
|
||||||
catch (TskCoreException ex) {
|
|
||||||
LOGGER.log(Level.WARNING, "Failed to get attributes for message.", ex); //NON-NLS
|
LOGGER.log(Level.WARNING, "Failed to get attributes for message.", ex); //NON-NLS
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Cleans out input HTML string
|
* Cleans out input HTML string
|
||||||
|
*
|
||||||
|
* @param htmlInString The HTML string to cleanse
|
||||||
|
*
|
||||||
|
* @return The cleansed HTML String
|
||||||
*/
|
*/
|
||||||
private String cleanseHTML(String htmlInString) {
|
private String cleanseHTML(String htmlInString) {
|
||||||
|
|
||||||
Document doc = Jsoup.parse(htmlInString);
|
Document doc = Jsoup.parse(htmlInString);
|
||||||
|
|
||||||
// fix all img tags
|
// fix all img tags
|
||||||
doc.select("img[src]").forEach((img) -> {
|
doc.select("img[src]").forEach((img) -> {
|
||||||
img.attr("src", "");
|
img.attr("src", "");
|
||||||
});
|
});
|
||||||
|
|
||||||
return doc.html();
|
return doc.html();
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -20,12 +20,10 @@ package org.sleuthkit.autopsy.corecomponentinterfaces;
|
|||||||
|
|
||||||
import java.beans.PropertyChangeListener;
|
import java.beans.PropertyChangeListener;
|
||||||
import org.openide.nodes.Node;
|
import org.openide.nodes.Node;
|
||||||
import org.openide.windows.TopComponent;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The interface for the "bottom right component" window.
|
* The interface for the "bottom right component" window.
|
||||||
*
|
*
|
||||||
* @author jantonius
|
|
||||||
*/
|
*/
|
||||||
public interface DataContent extends PropertyChangeListener {
|
public interface DataContent extends PropertyChangeListener {
|
||||||
|
|
||||||
|
@ -22,6 +22,7 @@ import java.awt.Cursor;
|
|||||||
import java.beans.PropertyChangeEvent;
|
import java.beans.PropertyChangeEvent;
|
||||||
import java.beans.PropertyChangeListener;
|
import java.beans.PropertyChangeListener;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import javax.swing.JTabbedPane;
|
import javax.swing.JTabbedPane;
|
||||||
import javax.swing.SwingUtilities;
|
import javax.swing.SwingUtilities;
|
||||||
@ -260,11 +261,7 @@ public class DataResultPanel extends javax.swing.JPanel implements DataResult, C
|
|||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public List<DataResultViewer> getViewers() {
|
public List<DataResultViewer> getViewers() {
|
||||||
List<DataResultViewer> viewers = new ArrayList<>();
|
return Collections.unmodifiableList(resultViewers);
|
||||||
resultViewers.forEach((viewer) -> {
|
|
||||||
viewers.add(viewer);
|
|
||||||
});
|
|
||||||
return viewers;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -397,9 +394,7 @@ public class DataResultPanel extends javax.swing.JPanel implements DataResult, C
|
|||||||
* @param selectedNodes The nodes to be selected.
|
* @param selectedNodes The nodes to be selected.
|
||||||
*/
|
*/
|
||||||
public void setSelectedNodes(Node[] selectedNodes) {
|
public void setSelectedNodes(Node[] selectedNodes) {
|
||||||
this.resultViewers.forEach((viewer) -> {
|
this.resultViewers.forEach((viewer) -> viewer.setSelectedNodes(selectedNodes));
|
||||||
viewer.setSelectedNodes(selectedNodes);
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -517,14 +512,10 @@ public class DataResultPanel extends javax.swing.JPanel implements DataResult, C
|
|||||||
explorerManager = null;
|
explorerManager = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
this.resultViewers.forEach((viewer) -> {
|
this.resultViewers.forEach((viewer) -> viewer.setNode(null));
|
||||||
viewer.setNode(null);
|
|
||||||
});
|
|
||||||
|
|
||||||
if (!this.isMain) {
|
if (!this.isMain) {
|
||||||
this.resultViewers.forEach((viewer) -> {
|
this.resultViewers.forEach(DataResultViewer::clearComponent);
|
||||||
viewer.clearComponent();
|
|
||||||
});
|
|
||||||
this.directoryTablePath.removeAll();
|
this.directoryTablePath.removeAll();
|
||||||
this.directoryTablePath = null;
|
this.directoryTablePath = null;
|
||||||
this.numberMatchLabel.removeAll();
|
this.numberMatchLabel.removeAll();
|
||||||
@ -563,9 +554,7 @@ public class DataResultPanel extends javax.swing.JPanel implements DataResult, C
|
|||||||
* Pass the selected nodes to all of the result viewers
|
* Pass the selected nodes to all of the result viewers
|
||||||
* sharing this explorer manager.
|
* sharing this explorer manager.
|
||||||
*/
|
*/
|
||||||
resultViewers.forEach((viewer) -> {
|
resultViewers.forEach((viewer) -> viewer.setSelectedNodes(selectedNodes));
|
||||||
viewer.setSelectedNodes(selectedNodes);
|
|
||||||
});
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Passing null signals that either multiple nodes are
|
* Passing null signals that either multiple nodes are
|
||||||
|
@ -764,7 +764,7 @@ public class DataResultViewerTable extends AbstractDataResultViewer {
|
|||||||
|
|
||||||
Component component = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, col);
|
Component component = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, col);
|
||||||
// only override the color if a node is not selected
|
// only override the color if a node is not selected
|
||||||
if (!isSelected) {
|
if (currentRoot != null && !isSelected) {
|
||||||
Node node = currentRoot.getChildren().getNodeAt(table.convertRowIndexToModel(row));
|
Node node = currentRoot.getChildren().getNodeAt(table.convertRowIndexToModel(row));
|
||||||
boolean tagFound = false;
|
boolean tagFound = false;
|
||||||
if (node != null) {
|
if (node != null) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user