diff --git a/Core/src/org/sleuthkit/autopsy/casemodule/Bundle.properties b/Core/src/org/sleuthkit/autopsy/casemodule/Bundle.properties index d72c3a8fe1..676195c402 100755 --- a/Core/src/org/sleuthkit/autopsy/casemodule/Bundle.properties +++ b/Core/src/org/sleuthkit/autopsy/casemodule/Bundle.properties @@ -228,3 +228,8 @@ CasePropertiesPanel.lbCaseUUIDLabel.text=Case UUID: CaseInformationPanel.centralRepoDetailsLabel.text=The Central Repository Details tab is only available when using a central repository. CasePropertiesPanel.caseNumberTextField.text=jTextField1 CasePropertiesPanel.examinerTextField.text=jTextField2 +NewCaseVisualPanel2.bnNewOrganization.text=New Organization +NewCaseVisualPanel2.lbOrganizationNameLabel.text=Organization: +NewCaseVisualPanel2.lbPointOfContactEmailLabel.text=Email: +NewCaseVisualPanel2.lbPointOfContactNameLabel.text=Point of Contact: +NewCaseVisualPanel2.lbPointOfContactPhoneLabel.text=Phone: diff --git a/Core/src/org/sleuthkit/autopsy/casemodule/NewCaseVisualPanel2.form b/Core/src/org/sleuthkit/autopsy/casemodule/NewCaseVisualPanel2.form index fcce5c4033..b866695be3 100755 --- a/Core/src/org/sleuthkit/autopsy/casemodule/NewCaseVisualPanel2.form +++ b/Core/src/org/sleuthkit/autopsy/casemodule/NewCaseVisualPanel2.form @@ -19,16 +19,39 @@ - - - - - + + + - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -50,7 +73,29 @@ - + + + + + + + + + + + + + + + + + + + + + + + @@ -116,5 +161,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Core/src/org/sleuthkit/autopsy/casemodule/NewCaseVisualPanel2.java b/Core/src/org/sleuthkit/autopsy/casemodule/NewCaseVisualPanel2.java index e20fce9aea..5d39c6921a 100755 --- a/Core/src/org/sleuthkit/autopsy/casemodule/NewCaseVisualPanel2.java +++ b/Core/src/org/sleuthkit/autopsy/casemodule/NewCaseVisualPanel2.java @@ -1,15 +1,15 @@ /* * Autopsy Forensic Browser - * + * * Copyright 2011 Basis Technology Corp. * Contact: carrier sleuthkit 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. @@ -17,7 +17,7 @@ * limitations under the License. */ -/* + /* * NewCaseVisualPanel2.java * * Created on Mar 7, 2012, 11:01:48 AM @@ -27,6 +27,11 @@ package org.sleuthkit.autopsy.casemodule; import org.openide.util.NbBundle; import java.awt.*; +import javax.swing.JComboBox; +import org.sleuthkit.autopsy.centralrepository.datamodel.EamDb; +import org.sleuthkit.autopsy.centralrepository.datamodel.EamDbException; +import org.sleuthkit.autopsy.centralrepository.datamodel.EamOrganization; +import org.sleuthkit.autopsy.centralrepository.optionspanel.ManageOrganizationsDialog; /** * @@ -34,11 +39,29 @@ import java.awt.*; */ class NewCaseVisualPanel2 extends javax.swing.JPanel { + private EamOrganization selectedOrg = null; + private java.util.List orgs = null; + private EamDb dbManager; + /** * Creates new form NewCaseVisualPanel2 */ public NewCaseVisualPanel2() { initComponents(); + try { + this.dbManager = EamDb.getInstance(); + } catch (EamDbException ex) { + dbManager = null; + } + if (dbManager == null) { + comboBoxOrgName.setEnabled(false); + bnNewOrganization.setEnabled(false); + lbPointOfContactNameText.setEnabled(false); + lbPointOfContactEmailText.setEnabled(false); + lbPointOfContactPhoneText.setEnabled(false); + } else { + loadOrganizationData(); + } } /** @@ -66,6 +89,15 @@ class NewCaseVisualPanel2 extends javax.swing.JPanel { caseNumberLabel = new javax.swing.JLabel(); examinerLabel = new javax.swing.JLabel(); optionalLabel = new javax.swing.JLabel(); + lbOrganizationNameLabel = new javax.swing.JLabel(); + comboBoxOrgName = new javax.swing.JComboBox<>(); + bnNewOrganization = new javax.swing.JButton(); + lbPointOfContactNameLabel = new javax.swing.JLabel(); + lbPointOfContactNameText = new javax.swing.JLabel(); + lbPointOfContactEmailLabel = new javax.swing.JLabel(); + lbPointOfContactEmailText = new javax.swing.JLabel(); + lbPointOfContactPhoneLabel = new javax.swing.JLabel(); + lbPointOfContactPhoneText = new javax.swing.JLabel(); caseNumberTextField.setFont(caseNumberTextField.getFont().deriveFont(caseNumberTextField.getFont().getStyle() & ~java.awt.Font.BOLD, 11)); caseNumberTextField.setText(org.openide.util.NbBundle.getMessage(NewCaseVisualPanel2.class, "NewCaseVisualPanel2.caseNumberTextField.text")); // NOI18N @@ -82,6 +114,27 @@ class NewCaseVisualPanel2 extends javax.swing.JPanel { optionalLabel.setFont(optionalLabel.getFont().deriveFont(optionalLabel.getFont().getStyle() | java.awt.Font.BOLD, 14)); optionalLabel.setText(org.openide.util.NbBundle.getMessage(NewCaseVisualPanel2.class, "NewCaseVisualPanel2.optionalLabel.text")); // NOI18N + lbOrganizationNameLabel.setText(org.openide.util.NbBundle.getMessage(NewCaseVisualPanel2.class, "NewCaseVisualPanel2.lbOrganizationNameLabel.text")); // NOI18N + + comboBoxOrgName.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + comboBoxOrgNameActionPerformed(evt); + } + }); + + bnNewOrganization.setText(org.openide.util.NbBundle.getMessage(NewCaseVisualPanel2.class, "NewCaseVisualPanel2.bnNewOrganization.text")); // NOI18N + bnNewOrganization.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + bnNewOrganizationActionPerformed(evt); + } + }); + + lbPointOfContactNameLabel.setText(org.openide.util.NbBundle.getMessage(NewCaseVisualPanel2.class, "NewCaseVisualPanel2.lbPointOfContactNameLabel.text")); // NOI18N + + lbPointOfContactEmailLabel.setText(org.openide.util.NbBundle.getMessage(NewCaseVisualPanel2.class, "NewCaseVisualPanel2.lbPointOfContactEmailLabel.text")); // NOI18N + + lbPointOfContactPhoneLabel.setText(org.openide.util.NbBundle.getMessage(NewCaseVisualPanel2.class, "NewCaseVisualPanel2.lbPointOfContactPhoneLabel.text")); // NOI18N + javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); this.setLayout(layout); layout.setHorizontalGroup( @@ -89,15 +142,32 @@ class NewCaseVisualPanel2 extends javax.swing.JPanel { .addGroup(layout.createSequentialGroup() .addContainerGap() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(optionalLabel) - .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() - .addComponent(caseNumberLabel) - .addGap(25, 25, 25) - .addComponent(caseNumberTextField, javax.swing.GroupLayout.DEFAULT_SIZE, 246, Short.MAX_VALUE)) - .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() - .addComponent(examinerLabel) - .addGap(45, 45, 45) - .addComponent(examinerTextField, javax.swing.GroupLayout.DEFAULT_SIZE, 246, Short.MAX_VALUE))) + .addGroup(layout.createSequentialGroup() + .addComponent(optionalLabel) + .addGap(0, 150, Short.MAX_VALUE)) + .addGroup(layout.createSequentialGroup() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(examinerLabel) + .addComponent(lbOrganizationNameLabel) + .addComponent(caseNumberLabel)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(caseNumberTextField) + .addComponent(examinerTextField) + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() + .addGap(0, 0, Short.MAX_VALUE) + .addComponent(bnNewOrganization)) + .addComponent(comboBoxOrgName, javax.swing.GroupLayout.Alignment.TRAILING, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addGroup(layout.createSequentialGroup() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(lbPointOfContactPhoneLabel) + .addComponent(lbPointOfContactEmailLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 34, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(lbPointOfContactNameLabel)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(lbPointOfContactNameText, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(lbPointOfContactEmailText, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(lbPointOfContactPhoneText, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))))) .addContainerGap()) ); layout.setVerticalGroup( @@ -113,14 +183,103 @@ class NewCaseVisualPanel2 extends javax.swing.JPanel { .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(examinerLabel) .addComponent(examinerTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(lbOrganizationNameLabel) + .addComponent(comboBoxOrgName, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(bnNewOrganization) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) + .addComponent(lbPointOfContactNameLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(lbPointOfContactNameText, javax.swing.GroupLayout.PREFERRED_SIZE, 14, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) + .addComponent(lbPointOfContactEmailLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(lbPointOfContactEmailText, javax.swing.GroupLayout.PREFERRED_SIZE, 14, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) + .addComponent(lbPointOfContactPhoneLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(lbPointOfContactPhoneText, javax.swing.GroupLayout.PREFERRED_SIZE, 14, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addContainerGap(40, Short.MAX_VALUE)) ); }// //GEN-END:initComponents + + private void comboBoxOrgNameActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_comboBoxOrgNameActionPerformed + JComboBox cb = (JComboBox) evt.getSource(); + String orgName = (String) cb.getSelectedItem(); + if (null == orgName) { + return; + } + + if ("".equals(orgName)) { + selectedOrg = null; + lbPointOfContactNameText.setText(""); + lbPointOfContactEmailText.setText(""); + lbPointOfContactPhoneText.setText(""); + return; + } + + for (EamOrganization org : orgs) { + if (org.getName().equals(orgName)) { + selectedOrg = org; + lbPointOfContactNameText.setText(selectedOrg.getPocName()); + lbPointOfContactEmailText.setText(selectedOrg.getPocEmail()); + lbPointOfContactPhoneText.setText(selectedOrg.getPocPhone()); + return; + } + } + }//GEN-LAST:event_comboBoxOrgNameActionPerformed + + private void bnNewOrganizationActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_bnNewOrganizationActionPerformed + ManageOrganizationsDialog dialog = new ManageOrganizationsDialog(); + // update the combobox options and org data fields + if (dialog.isChanged()) { + selectedOrg = dialog.getNewOrg(); + loadOrganizationData(); + validate(); + repaint(); + } + }//GEN-LAST:event_bnNewOrganizationActionPerformed + private void loadOrganizationData() { + + comboBoxOrgName.removeAllItems(); + try { + orgs = dbManager.getOrganizations(); + comboBoxOrgName.addItem(""); // for when a case has a null Org + orgs.forEach((org) -> { + comboBoxOrgName.addItem(org.getName()); + }); + } catch (EamDbException ex) { + + } + + if (!orgs.isEmpty() && null != selectedOrg) { + comboBoxOrgName.setSelectedItem(selectedOrg.getName()); + lbPointOfContactNameText.setText(selectedOrg.getPocName()); + lbPointOfContactEmailText.setText(selectedOrg.getPocEmail()); + lbPointOfContactPhoneText.setText(selectedOrg.getPocPhone()); + } else { + comboBoxOrgName.setSelectedItem(""); + lbPointOfContactNameText.setText(""); + lbPointOfContactEmailText.setText(""); + lbPointOfContactPhoneText.setText(""); + } + } // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JButton bnNewOrganization; private javax.swing.JLabel caseNumberLabel; private javax.swing.JTextField caseNumberTextField; + private javax.swing.JComboBox comboBoxOrgName; private javax.swing.JLabel examinerLabel; private javax.swing.JTextField examinerTextField; + private javax.swing.JLabel lbOrganizationNameLabel; + private javax.swing.JLabel lbPointOfContactEmailLabel; + private javax.swing.JLabel lbPointOfContactEmailText; + private javax.swing.JLabel lbPointOfContactNameLabel; + private javax.swing.JLabel lbPointOfContactNameText; + private javax.swing.JLabel lbPointOfContactPhoneLabel; + private javax.swing.JLabel lbPointOfContactPhoneText; private javax.swing.JLabel optionalLabel; // End of variables declaration//GEN-END:variables diff --git a/Core/src/org/sleuthkit/autopsy/centralrepository/datamodel/AbstractSqlEamDb.java b/Core/src/org/sleuthkit/autopsy/centralrepository/datamodel/AbstractSqlEamDb.java index 689d5a22fb..ed3388ce0a 100644 --- a/Core/src/org/sleuthkit/autopsy/centralrepository/datamodel/AbstractSqlEamDb.java +++ b/Core/src/org/sleuthkit/autopsy/centralrepository/datamodel/AbstractSqlEamDb.java @@ -28,11 +28,13 @@ import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; +import java.sql.Statement; import java.sql.Types; import java.time.LocalDate; import java.util.HashMap; import java.util.Map; import java.util.Set; +import org.openide.util.Exceptions; import org.sleuthkit.autopsy.casemodule.Case; import org.sleuthkit.autopsy.coreutils.Logger; @@ -451,7 +453,8 @@ public abstract class AbstractSqlEamDb implements EamDb { /** * Retrieves Data Source details based on data source device ID * - * @param correlationCase the current CorrelationCase used for ensuring uniqueness of DataSource + * @param correlationCase the current CorrelationCase used for ensuring + * uniqueness of DataSource * @param dataSourceDeviceId the data source device ID number * * @return The data source @@ -572,10 +575,11 @@ public abstract class AbstractSqlEamDb implements EamDb { * Retrieves eamArtifact instances from the database that are associated * with the eamArtifactType and eamArtifactValue of the given eamArtifact. * - * @param aType The type of the artifact - * @param value The correlation value + * @param aType The type of the artifact + * @param value The correlation value * * @return List of artifact instances for a given type/value + * * @throws EamDbException */ @Override @@ -675,8 +679,8 @@ public abstract class AbstractSqlEamDb implements EamDb { * Retrieves number of artifact instances in the database that are * associated with the ArtifactType and artifactValue of the given artifact. * - * @param aType The type of the artifact - * @param value The correlation value + * @param aType The type of the artifact + * @param value The correlation value * * @return Number of artifact instances having ArtifactType and * ArtifactValue. @@ -725,8 +729,8 @@ public abstract class AbstractSqlEamDb implements EamDb { * database that are associated with the artifactType and artifactValue of * the given artifact. * - * @param aType The type of the artifact - * @param value The correlation value + * @param aType The type of the artifact + * @param value The correlation value * * @return Number of unique tuples */ @@ -1019,7 +1023,7 @@ public abstract class AbstractSqlEamDb implements EamDb { * given status. * * @param eamArtifact Artifact containing exactly one (1) ArtifactInstance. - * @param knownStatus The status to change the artifact to + * @param knownStatus The status to change the artifact to */ @Override public void setArtifactInstanceKnownStatus(CorrelationAttribute eamArtifact, TskData.FileKnown knownStatus) throws EamDbException { @@ -1290,25 +1294,33 @@ public abstract class AbstractSqlEamDb implements EamDb { /** * Add a new organization * + * @return the Organization ID of the newly created organization. + * * @param eamOrg The organization to add * * @throws EamDbException */ @Override - public void newOrganization(EamOrganization eamOrg) throws EamDbException { + public long newOrganization(EamOrganization eamOrg) throws EamDbException { Connection conn = connect(); PreparedStatement preparedStatement = null; String sql = "INSERT INTO organizations(org_name, poc_name, poc_email, poc_phone) VALUES (?, ?, ?, ?)"; try { - preparedStatement = conn.prepareStatement(sql); + preparedStatement = conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS); preparedStatement.setString(1, eamOrg.getName()); preparedStatement.setString(2, eamOrg.getPocName()); preparedStatement.setString(3, eamOrg.getPocEmail()); preparedStatement.setString(4, eamOrg.getPocPhone()); preparedStatement.executeUpdate(); + ResultSet generatedKeys = preparedStatement.getGeneratedKeys(); + if (generatedKeys.next()) { + return generatedKeys.getLong(1); + } else { + throw new SQLException("Creating user failed, no ID obtained."); + } } catch (SQLException ex) { throw new EamDbException("Error inserting new organization.", ex); // NON-NLS } finally { @@ -1383,6 +1395,35 @@ public abstract class AbstractSqlEamDb implements EamDb { } } + /** + * Update an existing organization. + * + * @param updatedOrganization the values the Organization with the same ID + * will be updated to in the database. + * + * @throws EamDbException + */ + @Override + public void updateOrganization(EamOrganization updatedOrganization) throws EamDbException { + Connection conn = connect(); + PreparedStatement preparedStatement = null; + String sql = "UPDATE organizations SET org_name = ?, poc_name = ?, poc_email = ?, poc_phone = ? WHERE id = ?"; + try { + preparedStatement = conn.prepareStatement(sql); + preparedStatement.setString(1, updatedOrganization.getName()); + preparedStatement.setString(2, updatedOrganization.getPocName()); + preparedStatement.setString(3, updatedOrganization.getPocEmail()); + preparedStatement.setString(4, updatedOrganization.getPocPhone()); + preparedStatement.setInt(5, updatedOrganization.getOrgID()); + preparedStatement.executeUpdate(); + } catch (SQLException ex) { + throw new EamDbException("Error updating organization.", ex); // NON-NLS + } finally { + EamDbUtil.closePreparedStatement(preparedStatement); + EamDbUtil.closeConnection(conn); + } + } + /** * Add a new Global Set * @@ -1851,7 +1892,7 @@ public abstract class AbstractSqlEamDb implements EamDb { resultSet.getInt("id"), resultSet.getInt("case_id"), resultSet.getString("device_id"), - resultSet.getString("name") + resultSet.getString("name") ); return eamDataSource; diff --git a/Core/src/org/sleuthkit/autopsy/centralrepository/datamodel/EamDb.java b/Core/src/org/sleuthkit/autopsy/centralrepository/datamodel/EamDb.java index c3f3c09730..8e4a6bf16e 100644 --- a/Core/src/org/sleuthkit/autopsy/centralrepository/datamodel/EamDb.java +++ b/Core/src/org/sleuthkit/autopsy/centralrepository/datamodel/EamDb.java @@ -314,7 +314,7 @@ public interface EamDb { * exists, it is updated. If eamArtifact does not exist nothing happens * * @param eamArtifact Artifact containing exactly one (1) ArtifactInstance. - * @param knownStatus The status to change the artifact to + * @param knownStatus The status to change the artifact to */ void setArtifactInstanceKnownStatus(CorrelationAttribute eamArtifact, TskData.FileKnown knownStatus) throws EamDbException; @@ -368,9 +368,11 @@ public interface EamDb { * * @param eamOrg The organization to add * + * @return the Organization ID of the newly created organization. + * * @throws EamDbException */ - void newOrganization(EamOrganization eamOrg) throws EamDbException; + long newOrganization(EamOrganization eamOrg) throws EamDbException; /** * Get all organizations @@ -392,6 +394,16 @@ public interface EamDb { */ EamOrganization getOrganizationByID(int orgID) throws EamDbException; + /** + * Update an existing organization. + * + * @param updatedOrganization the values the Organization with the same ID + * will be updated to in the database. + * + * @throws EamDbException + */ + void updateOrganization(EamOrganization updatedOrganization) throws EamDbException; + /** * Add a new Global Set * diff --git a/Core/src/org/sleuthkit/autopsy/centralrepository/datamodel/SqliteEamDb.java b/Core/src/org/sleuthkit/autopsy/centralrepository/datamodel/SqliteEamDb.java index a048d95f9c..40ecc8cb37 100644 --- a/Core/src/org/sleuthkit/autopsy/centralrepository/datamodel/SqliteEamDb.java +++ b/Core/src/org/sleuthkit/autopsy/centralrepository/datamodel/SqliteEamDb.java @@ -656,15 +656,17 @@ public class SqliteEamDb extends AbstractSqlEamDb { /** * Add a new organization * + * @return the Organization ID of the newly created organization. + * * @param eamOrg The organization to add * * @throws EamDbException */ @Override - public void newOrganization(EamOrganization eamOrg) throws EamDbException { + public long newOrganization(EamOrganization eamOrg) throws EamDbException { try{ acquireExclusiveLock(); - super.newOrganization(eamOrg); + return super.newOrganization(eamOrg); } finally { releaseExclusiveLock(); } diff --git a/Core/src/org/sleuthkit/autopsy/centralrepository/optionspanel/AddNewOrganizationDialog.java b/Core/src/org/sleuthkit/autopsy/centralrepository/optionspanel/AddNewOrganizationDialog.java index 27adb7a63d..eacbc51e6d 100755 --- a/Core/src/org/sleuthkit/autopsy/centralrepository/optionspanel/AddNewOrganizationDialog.java +++ b/Core/src/org/sleuthkit/autopsy/centralrepository/optionspanel/AddNewOrganizationDialog.java @@ -30,7 +30,6 @@ import javax.swing.event.DocumentListener; import org.netbeans.spi.options.OptionsPanelController; import org.openide.util.NbBundle.Messages; import org.openide.windows.WindowManager; -import org.sleuthkit.autopsy.casemodule.Case; import org.sleuthkit.autopsy.coreutils.Logger; import org.sleuthkit.autopsy.centralrepository.datamodel.EamDbException; import org.sleuthkit.autopsy.centralrepository.datamodel.EamOrganization; @@ -47,6 +46,7 @@ public class AddNewOrganizationDialog extends javax.swing.JDialog { private final TextBoxChangedListener textBoxChangedListener; private boolean hasChanged; private EamOrganization newOrg; + private final EamOrganization organizationToEdit; /** * Creates new form AddNewOrganizationDialog @@ -62,6 +62,25 @@ public class AddNewOrganizationDialog extends javax.swing.JDialog { newOrg = null; initComponents(); customizeComponents(); + organizationToEdit = null; + display(); + } + + public AddNewOrganizationDialog(EamOrganization orgToEdit) { + super((JFrame) WindowManager.getDefault().getMainWindow(), + Bundle.AddNewOrganizationDialog_addNewOrg_msg(), + true); // NON-NLS + organizationToEdit = orgToEdit; + textBoxes = new ArrayList<>(); + textBoxChangedListener = new TextBoxChangedListener(); + hasChanged = false; + newOrg = null; + initComponents(); + customizeComponents(); + tfOrganizationName.setText(orgToEdit.getName()); + tfPocName.setText(orgToEdit.getPocName()); + tfPocEmail.setText(orgToEdit.getPocEmail()); + tfPocPhone.setText(orgToEdit.getPocPhone()); display(); } @@ -179,7 +198,7 @@ public class AddNewOrganizationDialog extends javax.swing.JDialog { public boolean isChanged() { return hasChanged; } - + public EamOrganization getNewOrg() { return newOrg; } @@ -311,14 +330,25 @@ public class AddNewOrganizationDialog extends javax.swing.JDialog { @Messages({"AddNewOrganizationDialog.bnOk.addFailed.text=Failed to add new organization."}) private void bnOKActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_bnOKActionPerformed - newOrg = new EamOrganization( - tfOrganizationName.getText(), - tfPocName.getText(), - tfPocEmail.getText(), - tfPocPhone.getText()); + try { EamDb dbManager = EamDb.getInstance(); - dbManager.newOrganization(newOrg); + if (organizationToEdit != null) { + //check if new name exists with ID other than the one in use here + newOrg = new EamOrganization(organizationToEdit.getOrgID(), + tfOrganizationName.getText(), + tfPocName.getText(), + tfPocEmail.getText(), + tfPocPhone.getText()); + dbManager.updateOrganization(newOrg); + } else { + newOrg = new EamOrganization( + tfOrganizationName.getText(), + tfPocName.getText(), + tfPocEmail.getText(), + tfPocPhone.getText()); + newOrg.setOrgID((int)dbManager.newOrganization(newOrg)); + } hasChanged = true; dispose(); } catch (EamDbException ex) { diff --git a/Core/src/org/sleuthkit/autopsy/centralrepository/optionspanel/Bundle.properties b/Core/src/org/sleuthkit/autopsy/centralrepository/optionspanel/Bundle.properties index 98e2ace7d6..82da099468 100755 --- a/Core/src/org/sleuthkit/autopsy/centralrepository/optionspanel/Bundle.properties +++ b/Core/src/org/sleuthkit/autopsy/centralrepository/optionspanel/Bundle.properties @@ -97,3 +97,15 @@ ExaminerDetailsPanel.lbExaminerNameLabel.text=Name: ExaminerDetailsPanel.lbNotesLabel.text=Notes: ExaminerDetailsPanel.lbExaminerPhoneLabel.text=Phone: ExaminerDetailsPanel.lbExaminerEmailLabel.text=Email: +ManageOrganizationsDialog.jLabel2.text=Point of Contact Name: +ManageOrganizationsDialog.jLabel1.text=Organizations +ManageOrganizationsDialog.jButton3.text=Close +ManageOrganizationsDialog.jLabel8.text=Organization Name: +ManageOrganizationsDialog.jButton2.text=Delete +ManageOrganizationsDialog.jButton1.text=New +ManageOrganizationsDialog.jLabel6.text=Point of Contact Email: +ManageOrganizationsDialog.jLabel4.text=Point of Contact Phone: +ManageOrganizationsDialog.jTextArea1.text=Organizations are used to provide additional contact information for the content they are associated with. +ManageOrganizationsDialog.jButton4.text=Edit +ManageOrganizationsDialog.jLabel3.text=Organization Details +ManageOrganizationsDialog.pocNameTextField.text= diff --git a/Core/src/org/sleuthkit/autopsy/centralrepository/optionspanel/CentralRepoCaseOptionsPanel.form b/Core/src/org/sleuthkit/autopsy/centralrepository/optionspanel/CentralRepoCaseOptionsPanel.form index dc558aad23..7854e6d7f7 100644 --- a/Core/src/org/sleuthkit/autopsy/centralrepository/optionspanel/CentralRepoCaseOptionsPanel.form +++ b/Core/src/org/sleuthkit/autopsy/centralrepository/optionspanel/CentralRepoCaseOptionsPanel.form @@ -50,15 +50,15 @@ - - + + - + - + @@ -181,12 +181,12 @@ - + - + @@ -229,9 +229,6 @@ - - - diff --git a/Core/src/org/sleuthkit/autopsy/centralrepository/optionspanel/CentralRepoCaseOptionsPanel.java b/Core/src/org/sleuthkit/autopsy/centralrepository/optionspanel/CentralRepoCaseOptionsPanel.java index 0fcf18a1fd..0bbf91326a 100644 --- a/Core/src/org/sleuthkit/autopsy/centralrepository/optionspanel/CentralRepoCaseOptionsPanel.java +++ b/Core/src/org/sleuthkit/autopsy/centralrepository/optionspanel/CentralRepoCaseOptionsPanel.java @@ -6,6 +6,7 @@ package org.sleuthkit.autopsy.centralrepository.optionspanel; import java.awt.Cursor; +import java.awt.Dialog; import java.util.ArrayList; import java.util.Collection; import java.util.List; @@ -162,14 +163,14 @@ public class CentralRepoCaseOptionsPanel extends javax.swing.JPanel { pnOrganizationLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(pnOrganizationLayout.createSequentialGroup() .addGap(10, 10, 10) - .addGroup(pnOrganizationLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(lbOrganizationNameLabel) + .addGroup(pnOrganizationLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) + .addComponent(lbOrganizationNameLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(lbPointOfContactEmailLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 34, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(lbPointOfContactPhoneLabel) - .addComponent(lbPointOfContactNameLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 124, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addComponent(lbPointOfContactNameLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(pnOrganizationLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(comboBoxOrgName, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(comboBoxOrgName, 0, 269, Short.MAX_VALUE) .addComponent(lbPointOfContactEmailText, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(lbPointOfContactPhoneText, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(bnNewOrganization, javax.swing.GroupLayout.Alignment.TRAILING) @@ -204,8 +205,6 @@ public class CentralRepoCaseOptionsPanel extends javax.swing.JPanel { org.openide.awt.Mnemonics.setLocalizedText(lbExaminerNameLabel, org.openide.util.NbBundle.getMessage(CentralRepoCaseOptionsPanel.class, "CentralRepoCaseOptionsPanel.lbExaminerNameLabel.text")); // NOI18N - tfExaminerNameText.setEditable(false); - org.openide.awt.Mnemonics.setLocalizedText(lbExaminerEmailLabel, org.openide.util.NbBundle.getMessage(CentralRepoCaseOptionsPanel.class, "CentralRepoCaseOptionsPanel.lbExaminerEmailLabel.text")); // NOI18N org.openide.awt.Mnemonics.setLocalizedText(lbExaminerPhoneLabel, org.openide.util.NbBundle.getMessage(CentralRepoCaseOptionsPanel.class, "CentralRepoCaseOptionsPanel.lbExaminerPhoneLabel.text")); // NOI18N @@ -236,12 +235,12 @@ public class CentralRepoCaseOptionsPanel extends javax.swing.JPanel { .addComponent(lbExaminerNameLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 83, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(lbExaminerPhoneLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 87, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(lbNotesLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 87, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addGap(25, 25, 25) + .addGap(18, 18, 18) .addGroup(pnExaminerLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(tfExaminerEmailText) .addComponent(tfExaminerPhoneText) .addComponent(tfExaminerNameText) - .addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 261, Short.MAX_VALUE)) + .addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 268, Short.MAX_VALUE)) .addContainerGap()) ); pnExaminerLayout.setVerticalGroup( @@ -313,10 +312,10 @@ public class CentralRepoCaseOptionsPanel extends javax.swing.JPanel { }//GEN-LAST:event_comboBoxOrgNameActionPerformed private void bnNewOrganizationActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_bnNewOrganizationActionPerformed - AddNewOrganizationDialog dialogO = new AddNewOrganizationDialog(); + ManageOrganizationsDialog dialog = new ManageOrganizationsDialog(); // update the combobox options and org data fields - if (dialogO.isChanged()) { - eamCase.setOrg(dialogO.getNewOrg()); + if (dialog.isChanged()) { + eamCase.setOrg(dialog.getNewOrg()); loadOrganizationData(); updateDb(); validate(); diff --git a/Core/src/org/sleuthkit/autopsy/centralrepository/optionspanel/ManageOrganizationsDialog.form b/Core/src/org/sleuthkit/autopsy/centralrepository/optionspanel/ManageOrganizationsDialog.form new file mode 100644 index 0000000000..6ca8920ecd --- /dev/null +++ b/Core/src/org/sleuthkit/autopsy/centralrepository/optionspanel/ManageOrganizationsDialog.form @@ -0,0 +1,347 @@ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Core/src/org/sleuthkit/autopsy/centralrepository/optionspanel/ManageOrganizationsDialog.java b/Core/src/org/sleuthkit/autopsy/centralrepository/optionspanel/ManageOrganizationsDialog.java new file mode 100644 index 0000000000..ab1c033e54 --- /dev/null +++ b/Core/src/org/sleuthkit/autopsy/centralrepository/optionspanel/ManageOrganizationsDialog.java @@ -0,0 +1,421 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package org.sleuthkit.autopsy.centralrepository.optionspanel; + +import java.awt.Component; +import java.awt.Dimension; +import java.awt.Toolkit; +import java.util.List; +import javax.swing.DefaultListCellRenderer; +import javax.swing.DefaultListModel; +import javax.swing.JDialog; +import javax.swing.JFrame; +import javax.swing.event.ListSelectionEvent; +import javax.swing.event.ListSelectionListener; +import org.openide.util.Exceptions; +import org.openide.windows.WindowManager; +import org.sleuthkit.autopsy.centralrepository.datamodel.EamDb; +import org.sleuthkit.autopsy.centralrepository.datamodel.EamDbException; +import org.sleuthkit.autopsy.centralrepository.datamodel.EamOrganization; + +/** + * + * @author wschaefer + */ +public class ManageOrganizationsDialog extends JDialog { + + private EamDb dbManager; + private EamOrganization newOrg; + private final DefaultListModel rulesListModel = new DefaultListModel<>(); + + /** + * Creates new form ManageOrganizationsPanel + */ + public ManageOrganizationsDialog() { + super((JFrame) WindowManager.getDefault().getMainWindow(), + "Manage Organizations Dialog", + true); // NON-NLS + initComponents(); + try { + this.dbManager = EamDb.getInstance(); + jList1.setCellRenderer(new DefaultListCellRenderer() { + private static final long serialVersionUID = 1L; + + @Override + public Component getListCellRendererComponent(javax.swing.JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { + Component c = super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus); + setText(((EamOrganization) value).getName()); + return c; + } + }); + jList1.setModel(rulesListModel); + jList1.addListSelectionListener(new OrganizationListSelectionListener()); + populateList(); + newOrg = null; + } catch (EamDbException ex) { + Exceptions.printStackTrace(ex); + } + + display(); + } + + private void display() { + Dimension screenDimension = Toolkit.getDefaultToolkit().getScreenSize(); + setLocation((screenDimension.width - getSize().width) / 2, (screenDimension.height - getSize().height) / 2); + setVisible(true); + } + + private void populateListAndSelect(EamOrganization selected) throws EamDbException { + rulesListModel.clear(); + if (selected != null) { + } + List orgs = dbManager.getOrganizations(); + if (orgs.size() > 0) { + for (EamOrganization org : orgs) { + rulesListModel.addElement(org); + if (selected != null && org.getOrgID() == selected.getOrgID()) { + selected = org; + } + } + if (orgs.contains(selected)) { + jList1.setSelectedValue(selected, true); + } else { + jList1.setSelectedIndex(0); + } + jList1.validate(); + jList1.repaint(); + } + } + + private void populateList() throws EamDbException { + EamOrganization selected = jList1.getSelectedValue(); + populateListAndSelect(selected); + } + + /** + * 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") + // //GEN-BEGIN:initComponents + private void initComponents() { + + jScrollPane1 = new javax.swing.JScrollPane(); + jPanel1 = new javax.swing.JPanel(); + jScrollPane2 = new javax.swing.JScrollPane(); + jList1 = new javax.swing.JList<>(); + jScrollPane4 = new javax.swing.JScrollPane(); + jTextArea1 = new javax.swing.JTextArea(); + jButton1 = new javax.swing.JButton(); + jButton2 = new javax.swing.JButton(); + jButton3 = new javax.swing.JButton(); + jLabel1 = new javax.swing.JLabel(); + jSeparator1 = new javax.swing.JSeparator(); + jLabel2 = new javax.swing.JLabel(); + jLabel4 = new javax.swing.JLabel(); + jLabel6 = new javax.swing.JLabel(); + jLabel8 = new javax.swing.JLabel(); + orgNameTextField = new javax.swing.JTextField(); + pocNameTextField = new javax.swing.JTextField(); + pocPhoneTextField = new javax.swing.JTextField(); + pocEmailTextField = new javax.swing.JTextField(); + jButton4 = new javax.swing.JButton(); + jLabel3 = new javax.swing.JLabel(); + + setMinimumSize(new java.awt.Dimension(545, 450)); + setPreferredSize(new java.awt.Dimension(545, 450)); + + jScrollPane1.setMinimumSize(null); + jScrollPane1.setPreferredSize(new java.awt.Dimension(535, 415)); + + jPanel1.setMinimumSize(null); + jPanel1.setPreferredSize(new java.awt.Dimension(527, 407)); + + jList1.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION); + jScrollPane2.setViewportView(jList1); + + jTextArea1.setEditable(false); + jTextArea1.setBackground(new java.awt.Color(240, 240, 240)); + jTextArea1.setColumns(20); + jTextArea1.setFont(new java.awt.Font("Tahoma", 0, 11)); // NOI18N + jTextArea1.setLineWrap(true); + jTextArea1.setRows(3); + jTextArea1.setText(org.openide.util.NbBundle.getMessage(ManageOrganizationsDialog.class, "ManageOrganizationsDialog.jTextArea1.text")); // NOI18N + jTextArea1.setWrapStyleWord(true); + jScrollPane4.setViewportView(jTextArea1); + + org.openide.awt.Mnemonics.setLocalizedText(jButton1, org.openide.util.NbBundle.getMessage(ManageOrganizationsDialog.class, "ManageOrganizationsDialog.jButton1.text")); // NOI18N + jButton1.setMargin(new java.awt.Insets(2, 6, 2, 6)); + jButton1.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + jButton1ActionPerformed(evt); + } + }); + + org.openide.awt.Mnemonics.setLocalizedText(jButton2, org.openide.util.NbBundle.getMessage(ManageOrganizationsDialog.class, "ManageOrganizationsDialog.jButton2.text")); // NOI18N + jButton2.setMargin(new java.awt.Insets(2, 6, 2, 6)); + jButton2.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + jButton2ActionPerformed(evt); + } + }); + + org.openide.awt.Mnemonics.setLocalizedText(jButton3, org.openide.util.NbBundle.getMessage(ManageOrganizationsDialog.class, "ManageOrganizationsDialog.jButton3.text")); // NOI18N + jButton3.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + jButton3ActionPerformed(evt); + } + }); + + org.openide.awt.Mnemonics.setLocalizedText(jLabel1, org.openide.util.NbBundle.getMessage(ManageOrganizationsDialog.class, "ManageOrganizationsDialog.jLabel1.text")); // NOI18N + + jSeparator1.setOrientation(javax.swing.SwingConstants.VERTICAL); + + org.openide.awt.Mnemonics.setLocalizedText(jLabel2, org.openide.util.NbBundle.getMessage(ManageOrganizationsDialog.class, "ManageOrganizationsDialog.jLabel2.text")); // NOI18N + + org.openide.awt.Mnemonics.setLocalizedText(jLabel4, org.openide.util.NbBundle.getMessage(ManageOrganizationsDialog.class, "ManageOrganizationsDialog.jLabel4.text")); // NOI18N + + org.openide.awt.Mnemonics.setLocalizedText(jLabel6, org.openide.util.NbBundle.getMessage(ManageOrganizationsDialog.class, "ManageOrganizationsDialog.jLabel6.text")); // NOI18N + + org.openide.awt.Mnemonics.setLocalizedText(jLabel8, org.openide.util.NbBundle.getMessage(ManageOrganizationsDialog.class, "ManageOrganizationsDialog.jLabel8.text")); // NOI18N + + orgNameTextField.setEditable(false); + orgNameTextField.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + orgNameTextFieldActionPerformed(evt); + } + }); + + pocNameTextField.setEditable(false); + pocNameTextField.setText(org.openide.util.NbBundle.getMessage(ManageOrganizationsDialog.class, "ManageOrganizationsDialog.pocNameTextField.text")); // NOI18N + + pocPhoneTextField.setEditable(false); + + pocEmailTextField.setEditable(false); + pocEmailTextField.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + pocEmailTextFieldActionPerformed(evt); + } + }); + + org.openide.awt.Mnemonics.setLocalizedText(jButton4, org.openide.util.NbBundle.getMessage(ManageOrganizationsDialog.class, "ManageOrganizationsDialog.jButton4.text")); // NOI18N + jButton4.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + jButton4ActionPerformed(evt); + } + }); + + org.openide.awt.Mnemonics.setLocalizedText(jLabel3, org.openide.util.NbBundle.getMessage(ManageOrganizationsDialog.class, "ManageOrganizationsDialog.jLabel3.text")); // NOI18N + + javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1); + jPanel1.setLayout(jPanel1Layout); + jPanel1Layout.setHorizontalGroup( + jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(jPanel1Layout.createSequentialGroup() + .addContainerGap() + .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(jScrollPane4, javax.swing.GroupLayout.PREFERRED_SIZE, 225, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, 73, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGroup(jPanel1Layout.createSequentialGroup() + .addComponent(jButton1, javax.swing.GroupLayout.PREFERRED_SIZE, 70, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(jButton4) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(jButton2)) + .addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 224, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(jSeparator1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(jPanel1Layout.createSequentialGroup() + .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(jPanel1Layout.createSequentialGroup() + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED, 217, Short.MAX_VALUE) + .addComponent(jButton3)) + .addGroup(jPanel1Layout.createSequentialGroup() + .addGap(29, 29, 29) + .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false) + .addComponent(jLabel2, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(jLabel8, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(jLabel4, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(jLabel6, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(pocNameTextField, javax.swing.GroupLayout.DEFAULT_SIZE, 128, Short.MAX_VALUE) + .addComponent(pocPhoneTextField) + .addComponent(pocEmailTextField, javax.swing.GroupLayout.Alignment.TRAILING) + .addComponent(orgNameTextField)))) + .addContainerGap()) + .addGroup(jPanel1Layout.createSequentialGroup() + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(jLabel3, javax.swing.GroupLayout.PREFERRED_SIZE, 115, javax.swing.GroupLayout.PREFERRED_SIZE) + .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))) + ); + + jPanel1Layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {jButton1, jButton2, jButton4}); + + jPanel1Layout.setVerticalGroup( + jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(jPanel1Layout.createSequentialGroup() + .addContainerGap() + .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) + .addGroup(jPanel1Layout.createSequentialGroup() + .addComponent(jLabel3) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(jLabel8) + .addComponent(orgNameTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(pocNameTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(jLabel2)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(pocPhoneTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(jLabel4)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(pocEmailTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(jLabel6, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 235, Short.MAX_VALUE) + .addComponent(jButton3)) + .addComponent(jSeparator1) + .addGroup(jPanel1Layout.createSequentialGroup() + .addComponent(jScrollPane4, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(jLabel1) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 288, Short.MAX_VALUE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(jButton1) + .addComponent(jButton2) + .addComponent(jButton4)))) + .addContainerGap()) + ); + + jScrollPane1.setViewportView(jPanel1); + + javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); + getContentPane().setLayout(layout); + layout.setHorizontalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() + .addGap(0, 0, 0) + .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + ); + layout.setVerticalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() + .addGap(0, 0, 0) + .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + ); + }// //GEN-END:initComponents + + private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton2ActionPerformed + // TODO add your handling code here: + }//GEN-LAST:event_jButton2ActionPerformed + + private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton3ActionPerformed + dispose(); + }//GEN-LAST:event_jButton3ActionPerformed + + private void pocEmailTextFieldActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_pocEmailTextFieldActionPerformed + // TODO add your handling code here: + }//GEN-LAST:event_pocEmailTextFieldActionPerformed + + private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton1ActionPerformed + AddNewOrganizationDialog dialogO = new AddNewOrganizationDialog(); + if (dialogO.isChanged()) { + try { + newOrg = dialogO.getNewOrg(); + populateListAndSelect(newOrg); + } catch (EamDbException ex) { + + } + } + }//GEN-LAST:event_jButton1ActionPerformed + + private void orgNameTextFieldActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_orgNameTextFieldActionPerformed + // TODO add your handling code here: + }//GEN-LAST:event_orgNameTextFieldActionPerformed + + private void jButton4ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton4ActionPerformed + EamOrganization orgToEdit = jList1.getSelectedValue(); + AddNewOrganizationDialog dialogO = new AddNewOrganizationDialog(orgToEdit); + if (dialogO.isChanged()) { + try { + newOrg = dialogO.getNewOrg(); + populateListAndSelect(newOrg); + } catch (EamDbException ex) { + + } + } + }//GEN-LAST:event_jButton4ActionPerformed + + + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JButton jButton1; + private javax.swing.JButton jButton2; + private javax.swing.JButton jButton3; + private javax.swing.JButton jButton4; + private javax.swing.JLabel jLabel1; + private javax.swing.JLabel jLabel2; + private javax.swing.JLabel jLabel3; + private javax.swing.JLabel jLabel4; + private javax.swing.JLabel jLabel6; + private javax.swing.JLabel jLabel8; + private javax.swing.JList jList1; + private javax.swing.JPanel jPanel1; + private javax.swing.JScrollPane jScrollPane1; + private javax.swing.JScrollPane jScrollPane2; + private javax.swing.JScrollPane jScrollPane4; + private javax.swing.JSeparator jSeparator1; + private javax.swing.JTextArea jTextArea1; + private javax.swing.JTextField orgNameTextField; + private javax.swing.JTextField pocEmailTextField; + private javax.swing.JTextField pocNameTextField; + private javax.swing.JTextField pocPhoneTextField; + // End of variables declaration//GEN-END:variables + public boolean isChanged() { + return newOrg != null; + } + + public EamOrganization getNewOrg() { + return newOrg; + } + + /** + * A list events listener for the interesting files sets list component. + */ + private final class OrganizationListSelectionListener implements ListSelectionListener { + + @Override + public void valueChanged(ListSelectionEvent e) { + if (e.getValueIsAdjusting()) { + return; + } + EamOrganization selected; + if (newOrg != null) { + selected = newOrg; + } else { + selected = jList1.getSelectedValue(); + } + if (selected != null) { + orgNameTextField.setText(selected.getName()); + pocNameTextField.setText(selected.getPocName()); + pocPhoneTextField.setText(selected.getPocPhone()); + pocEmailTextField.setText(selected.getPocEmail()); + } else { + orgNameTextField.setText(""); + pocNameTextField.setText(""); + pocPhoneTextField.setText(""); + pocEmailTextField.setText(""); + } + } + + } +}