import org.mxchange.addressbook.manager.application.ApplicationManager;
/**
- * ============================================
- * AddressbookApplication management:
- * ============================================
- *
+ * ============================================ AddressbookApplication
+ * management: ============================================
+ *
* Inernet("public" service) and Intranet
- *
- * Version 1.0+:
- * - Single-user local application
- * - Fields:
- * + Gender
- * + Surname
- * + Family name
- * + Company name
- * + Street + number
- * + ZIP code
- * + City
- * + Landline number
- * + Fax number
- * + Cell phone number
- * + Email address
- * + Birth day
- * + Comment (?)
- * - Edit own data
- * - Add new contact
- * - Edit contacts
- * - Delete contacts
- * - Categorization of contacts
- *
- * Version 1.1+:
- * - Permanent storage in database
- *
- * Version 2.0+:
- * - Multi-user web application
- * - Local user registration / login / resend confirmation link / password
- * recovery
- * - User groups (aka. teams)
- * - Administration area (user role)
- * + Create/edit/delete groups
- * + Edit/delete/lock/unlock user
- * + Assign user roles/rights
- * - Allow other users / groups to view addressbook
- * + Full addressbook
- * + Only some categories
- * - VCard export
- * + Allow users/guests (not recommended)
- * - XML export of addressbook and compressable (ZIP)
- * - Form to contact other user/group without need of mail program
- * + User can disabled this
- * - Directory for ussers/groups (who allowed to be listed)
- * + Simple click to add user to own addressbook
- * + Search form?
- *
- * Version 2.1+:
- * - Multi-language support
- *
- * Version 2.2+:("socialized")
- * - "Social login" (OpenID consumer)
- * + Connect user account to social account
- * + Sync own data?
- * - "Social profile"
- * + OpenID provider
- * + RSS/activity feed
- *
- * ============================================
- * Time esitmation:
- * ============================================
- * 1.0 (console):
- * + 2 days
- *
- * 1.1 (database):
- * + 2 day
- * + Initial tables: contacts, categories, contact_category
- *
- * 2.0 (web):
- * + 3 days
- * + Additional tables: admins (?), admin_rights, groups,
- * users, user_contacts, user_user_rights, user_category_rights,
- *
- * 2.1 (language)
- * + 1 day
- * + Additional tables: languages (disable, enable language "pack" ?)
- *
- * 2.2 (social):
- * + 3 days
- * + Additional tables: ???
- *
+ *
+ * Version 1.0+: - Single-user local application - Fields: + Gender + Surname +
+ * Family name + Company name + Street + number + ZIP code + City + Landline
+ * number + Fax number + Cell phone number + Email address + Birth day + Comment
+ * (?) - Edit own data - Add new contact - Edit contacts - Delete contacts -
+ * Categorization of contacts
+ *
+ * Version 1.1+: - Permanent storage in database
+ *
+ * Version 2.0+: - Multi-user web application - Local user registration / login
+ * / resend confirmation link / password recovery - User groups (aka. teams) -
+ * Administration area (user role) + Create/edit/delete groups +
+ * Edit/delete/lock/unlock user + Assign user roles/rights - Allow other users /
+ * groups to view addressbook + Full addressbook + Only some categories - VCard
+ * export + Allow users/guests (not recommended) - XML export of addressbook and
+ * compressable (ZIP) - Form to contact other user/group without need of mail
+ * program + User can disabled this - Directory for ussers/groups (who allowed
+ * to be listed) + Simple click to add user to own addressbook + Search form?
+ *
+ * Version 2.1+: - Multi-language support
+ *
+ * Version 2.2+:("socialized") - "Social login" (OpenID consumer) + Connect user
+ * account to social account + Sync own data? - "Social profile" + OpenID
+ * provider + RSS/activity feed
+ *
+ * ============================================ Time esitmation:
+ * ============================================ 1.0 (console): + 2 days
+ *
+ * 1.1 (database): + 2 day + Initial tables: contacts, categories,
+ * contact_category
+ *
+ * 2.0 (web): + 3 days + Additional tables: admins (?), admin_rights, groups,
+ * users, user_contacts, user_user_rights, user_category_rights,
+ *
+ * 2.1 (language) + 1 day + Additional tables: languages (disable, enable
+ * language "pack" ?)
+ *
+ * 2.2 (social): + 3 days + Additional tables: ???
+ *
* @author Roland Haeder
* @version 0.0
* @since 0.0
// Debug message
this.getLogger().trace("CALLED!");
- // @TODO The application should be running now
+ // @TODO The application should be running now
// Output introduction
this.showIntro();
/**
* Getter for this application
- *
+ *
* @return Instance from this application
*/
public static final Application getInstance () {
*/
private boolean isInitialized;
+ /**
+ * Layout instance
+ */
+ private GridLayout layout;
+
/**
* Status label needs to be updated
*/
*/
private AddressbookFrame (final Client client) {
// Debug line
- this.getLogger().trace(MessageFormat.format("client={0}: CALLED!", client));
+ this.getLogger().trace(MessageFormat.format("client={0}: CALLED!", client)); //NOI18N
// Set frame instance
this.frame = new JFrame();
- this.frame.setTitle(this.generateFrameTitle("main"));
+ this.frame.setTitle(this.generateFrameTitle("main")); //NOI18N
// Set client here
this.setClient(client);
@Override
public void doShutdown () {
// First only show shutdown status
- this.updateStatus("shutdown");
+ this.updateStatus("shutdown"); //NOI18N
}
/**
@Override
public void setupFrame (final Client client) {
// Debug line
- this.getLogger().trace(MessageFormat.format("client={0}: CALLED!", client));
+ this.getLogger().trace(MessageFormat.format("client={0}: CALLED!", client)); //NOI18N
// Has the user entered own data?
if (this.getClient().getContactManager().isOwnContactAdded()) {
// Debug message
- this.getLogger().debug("Disabling menus: isOwnContactAdded()=false");
+ this.getLogger().debug("Disabling menus: isOwnContactAdded()=false"); //NOI18N
// Not entered yet, so disable "add" menu
this.addOwnItem.setEnabled(false);
this.frame.setVisible(true);
// All done here
- this.updateStatus("done");
+ this.updateStatus("done"); //NOI18N
}
/**
@Override
public void init () throws FrameAlreadyInitializedException {
// Debug line
- this.getLogger().trace("CALLED!");
+ this.getLogger().trace("CALLED!"); //NOI18N
// Has this frame been initialized?
if (this.isInitialized()) {
// To do this, the frame must be initialized
if (!this.isInitialized()) {
// Not initalized, so bad call
- this.getLogger().fatal("Bad call of shutdownApplication(). Please report this.");
+ this.getLogger().fatal("Bad call of shutdownApplication(). Please report this."); //NOI18N
return;
}
this.getClient().getApplication().doShutdown();
/**
* Generates a title for borders
+ *
* @param key Key part to look for
* @return Human-readable title
*/
private String generateBorderTitle (final String key) {
// Call bundle instance
- return this.getBundle().getString(String.format("AddressbookFrame.border.%s.title.text", key));
+ return this.getBundle().getString(String.format("AddressbookFrame.border.%s.title.text", key)); //NOI18N
}
/**
* Generates a title for all frames based on given sub title key. If null is
* given, the sub title is not generated.
- *
+ *
* @param subKey Key for sub title resource
* @return A full application title
*/
// Is key given?
if (subKey != null) {
// Add sub title
- title = String.format("%s - %s", title, this.getBundle().getString(String.format("AddressbookFrame.%s.title.text", subKey)));
+ title = String.format("%s - %s", title, this.getBundle().getString(String.format("AddressbookFrame.%s.title.text", subKey))); //NOI18N
}
// Return it
private void initAddContactDialog () {
// Instance dialog and set title
this.addContact = new JDialog();
- this.addContact.setTitle(this.generateFrameTitle("dialog.addContact"));
- this.addContact.setLayout(new GridLayout(4, 1));
+ this.addContact.setTitle(this.generateFrameTitle("dialog.addContact")); //NOI18N
+
+ // Set layout
+ this.addContact.setLayout(new GridLayout(0, 1, 2, 2));
// Only hide it on close and make it appear in middle of screen
this.addContact.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
this.addContact.setAutoRequestFocus(true);
// Initial dimension
- this.addContact.setSize(500, 400);
+ this.addContact.setSize(500, 500);
/*
* Add listener which asks for confirmation, if data has been entered
*
* @TODO Unfinished
*/
-
// Init 3 panels:
// 1) "name" panel
- initNamePanel();
+ initNameDataPanel();
// 2) "address" panel
- initAddressPanel();
+ initAddressDataPanel();
+
+ // 3) "other" panel
+ initOtherDataPanel();
// x)Only for developing:
- /* DEBUG: */ this.addContact.setVisible(true);
+ /*
+ * DEBUG:
+ */ this.addContact.setVisible(true);
}
/**
* Initializes address panel
*/
- private void initAddressPanel () {
+ private void initAddressDataPanel () {
// Panel "address" input boxes
JPanel addressPanel = new JPanel();
addressPanel.setLayout(new BoxLayout(addressPanel, BoxLayout.Y_AXIS));
-
+
// Set border to titled version
- addressPanel.setBorder(new TitledBorder(this.generateBorderTitle("address")));
+ addressPanel.setBorder(new TitledBorder(this.generateBorderTitle("address"))); //NOI18N
// Init all elements:
// 1) Street and number together
JPanel streetNumberPanel = new JPanel();
- streetNumberPanel.setLayout(new GridLayout(1, 4));
+ streetNumberPanel.setLayout(new GridLayout(1, 4, 5, 5));
// Label for street
JLabel streetLabel = new JLabel(this.getBundle().getString("AddressbookFrame.street.text"));
/**
* Method to verify that the entered data is a number.
- *
+ *
* @param input Input to verify
* @return Whether the data is a number
*/
// 2) ZIP code and ccity name
JPanel zipCityPanel = new JPanel();
- zipCityPanel.setLayout(new GridLayout(1, 4));
+ zipCityPanel.setLayout(new GridLayout(1, 4, 5, 5));
// Label for ZIP code, again numbers only
JLabel zipLabel = new JLabel(this.getBundle().getString("AddressbookFrame.zip.text"));
/**
* Method to verify that the entered data is a number.
- *
+ *
* @param input Input to verify
* @return Whether the data is a number
*/
*/
private void initComponents () {
// Debug line
- this.getLogger().trace("CALLED!");
+ this.getLogger().trace("CALLED!"); //NOI18N
// Set default close operation
this.frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JMenuBar menuBar = new JMenuBar();
JMenu menu;
JMenuItem item;
-
+
// Init some menus:
// 1) File menu
menu = new JMenu(this.getBundle().getString("AddressbookFrame.menu.file.text"));
-
+
// Add menu items:
// 1.x) Exit program (should be last)
item = new JMenuItem(this.getBundle().getString("AddressbookFrame.menuItem.exitProgram.text"));
// Add menu -> menu bar
menuBar.add(menu);
-
+
// Init some menus:
// 2) Addressbook menu
menu = new JMenu(this.getBundle().getString("AddressbookFrame.menu.addressbook.text"));
/**
* Initializes name panel
*/
- private void initNamePanel () {
+ private void initNameDataPanel () {
// Panel "name" input boxes
JPanel namePanel = new JPanel();
namePanel.setLayout(new BoxLayout(namePanel, BoxLayout.Y_AXIS));
// Set border to titled version
- namePanel.setBorder(new TitledBorder(this.generateBorderTitle("name")));
+ namePanel.setBorder(new TitledBorder(this.generateBorderTitle("name"))); //NOI18N
// Panel for gender
JPanel gPanel = new JPanel();
- gPanel.setLayout(new GridLayout(1, 2));
-
+ gPanel.setLayout(new GridLayout(1, 2, 5, 5));
+
// Gender text field
JLabel gLabel = new JLabel(this.getBundle().getString("AddressbookFrame.gender.text"));
-
+
// Get all genders
Gender[] genders = Gender.values();
-
+
// Init gender combo box with tool tip
JComboBox<Gender> gender = new JComboBox<>(new DefaultComboBoxModel<>(genders));
gender.setToolTipText(this.getBundle().getString("AddressbookFrame.gender.tooltipText"));
// Panel for surname
JPanel sPanel = new JPanel();
- sPanel.setLayout(new GridLayout(1, 2));
+ sPanel.setLayout(new GridLayout(1, 2, 5, 5));
// New label for surname is not needed
JLabel sLabel = new JLabel(this.getBundle().getString("AddressbookFrame.surname.text"));
this.addContact.add(namePanel);
}
+ /**
+ * Initializes "other" data panel
+ */
+ private void initOtherDataPanel () {
+ }
+
/**
* Initialize other dialogs (e.g. "Add contact")
*/
private void initStatusPanel () {
// Init status label (which needs to be updated
this.statusLabel = new JLabel();
- this.updateStatus("initializing");
+ this.updateStatus("initializing"); //NOI18N
// Init status bar in south
JPanel panel = new JPanel();
*/
@Override
public void mouseClicked (final MouseEvent e) {
- throw new UnsupportedOperationException("Unfinished.");
+ throw new UnsupportedOperationException("Unfinished."); //NOI18N
}
});
*/
private void updateStatus (final String type) {
// Set status message
- this.statusLabel.setText(this.getBundle().getString(String.format("AddressbookFrame.statusLabel.%s.text", type)));
+ this.statusLabel.setText(this.getBundle().getString(String.format("AddressbookFrame.statusLabel.%s.text", type))); //NOI18N
}
}