import org.mxchange.addressbook.client.AddressbookClient;
import org.mxchange.addressbook.client.console.ConsoleClient;
import org.mxchange.addressbook.client.gui.SwingClient;
-import org.mxchange.jcore.BaseFrameworkSystem;
import org.mxchange.jcore.application.Application;
+import org.mxchange.jcore.application.BaseApplication;
import org.mxchange.jcore.client.Client;
import org.mxchange.jcore.exceptions.UnhandledUserChoiceException;
import org.mxchange.jcore.manager.application.ApplicationManager;
+import org.mxchange.jcoreeelogger.beans.local.logger.LoggerBeanLocal;
/**
- * ============================================
- * 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: ???
-*
+ * Address book application class. Please see ROADMAP.txt for details.
+ * <p>
* @author Roland Haeder
* @version 0.0
*/
-public class AddressbookApplication extends BaseFrameworkSystem implements Application {
+public class AddressbookApplication extends BaseApplication implements Application {
/**
* Application title
*/
private boolean guiClient = false;
+ /**
+ * Logger instance
+ */
+ private LoggerBeanLocal logger;
+
/**
* Protected constructor
- * @throws java.io.IOException If any IO error occurs
*/
- protected AddressbookApplication () throws IOException {
+ protected AddressbookApplication () {
// Init properties file
this.initProperties();
*/
@Override
public void doBootstrap () {
- this.getLogger().debug("Initializing application ..."); //NOI18N
+ this.getLogger().logDebug("Initializing application ..."); //NOI18N
// Init client variable
Client client = null;
// Is console or Swing choosen?
if (this.isConsole()) {
// Debug message
- this.getLogger().debug("Initializing console client ..."); //NOI18N
+ this.getLogger().logDebug("Initializing console client ..."); //NOI18N
// Init console client instance
client = new ConsoleClient(this);
} else if (this.isGui()) {
// Debug message
- this.getLogger().debug("Initializing GUI (Swing) client ..."); //NOI18N
+ this.getLogger().logDebug("Initializing GUI (Swing) client ..."); //NOI18N
// Init console instance
client = new SwingClient(this);
} else {
// Not client choosen
- this.getLogger().error("No client choosen. Cannot launch."); //NOI18N
+ this.getLogger().logError("No client choosen. Cannot launch."); //NOI18N
try {
this.doShutdown();
this.getClient().enableIsRunning();
// Trace message
- this.getLogger().trace("EXIT!"); //NOI18N
+ this.getLogger().logTrace("EXIT!"); //NOI18N
}
/**
AddressbookClient client = (AddressbookClient) this.getClient();
// Debug message
- this.getLogger().trace("CALLED!"); //NOI18N
+ this.getLogger().logTrace("CALLED!"); //NOI18N
// TODO The application should be running now
// Output introduction
// Ask for user input and run proper method
client.doUserMenuChoice();
} catch (final UnhandledUserChoiceException ex) {
- this.getLogger().catching(ex);
+ this.getLogger().logException(ex);
}
try {
// --- Main loop ends here ---
// Debug message
- this.getLogger().debug("Main loop exit - shutting down ..."); //NOI18N
+ this.getLogger().logDebug("Main loop exit - shutting down ..."); //NOI18N
}
/**
@Override
public void doShutdown () throws SQLException, IOException {
// Trace message
- this.getLogger().trace("CALLED!"); //NOI18N
+ this.getLogger().logTrace("CALLED!"); //NOI18N
// Shutdown client
this.getClient().doShutdown();
- this.getLogger().info("End of program (last line)"); //NOI18N
+ this.getLogger().logInfo("End of program (last line)"); //NOI18N
System.exit(0);
}
+ /**
+ * Logs given exception
+ *
+ * @param exception Throwable
+ */
+ protected void logException (final Throwable exception) {
+ this.getLogger().logException(exception);
+ }
+
+ /**
+ * Initializes properties
+ */
+ private void initProperties () throws IOException {
+ throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
+ }
+
+ /**
+ * Log exception and abort program.
+ *
+ * @param throwable Throwable
+ */
+ protected void abortProgramWithException (final Throwable throwable) {
+ // Log exception
+ this.logException(throwable);
+
+ // Abort here
+ System.exit(1);
+ }
+
/**
* Enables console client by setting propper flag
*/
private void enableConsoleClient () {
- this.getLogger().debug("Enabling console client (may become optional client) ..."); //NOI18N
+ this.getLogger().logDebug("Enabling console client (may become optional client) ..."); //NOI18N
this.consoleClient = true;
this.guiClient = false;
}
* Enables GUI client by setting propper flag
*/
private void enableGuiClient () {
- this.getLogger().debug("Enabling GUI client (may become new default client) ..."); //NOI18N
+ this.getLogger().logDebug("Enabling GUI client (may become new default client) ..."); //NOI18N
this.consoleClient = false;
this.guiClient = true;
}
/**
* Checks whether the client shoule be console client should be launched by
* checking if -console is set.
- *
+ * <p>
* @return Whether console client should be taken
*/
private boolean isConsole () {
/**
* Checks whether the client shoule be GUI client should be launched by
* checking if -gui is set.
- *
+ * <p>
* @return Whether GUI client should be taken
*/
private boolean isGui () {
/**
* Parses all given arguments
- *
+ * <p>
* @param args Arguments from program launch
*/
private void parseArguments (final String[] args) {
// Trace message
- this.getLogger().trace(MessageFormat.format("args()={0} - CALLED!", args.length)); //NOI18N
+ this.getLogger().logTrace(MessageFormat.format("args()={0} - CALLED!", args.length)); //NOI18N
// Debug message
- this.getLogger().debug(MessageFormat.format("Parsing {0} arguments ...", args.length)); //NOI18N
+ this.getLogger().logDebug(MessageFormat.format("Parsing {0} arguments ...", args.length)); //NOI18N
for (final String arg : args) {
// Switch on it
*/
private void showIntro () {
// Trace message
- this.getLogger().trace("CALLED!"); //NOI18N
+ this.getLogger().logTrace("CALLED!"); //NOI18N
// Let the client show it
this.getClient().showWelcome();
// Trace message
- this.getLogger().trace("EXIT!"); //NOI18N
+ this.getLogger().logTrace("EXIT!"); //NOI18N
}
/**
* Launches the application
- *
+ * <p>
* @param args Arguments handled to program
*/
private void start (final String args[]) {
- this.getLogger().info("Program is started."); //NOI18N
+ this.getLogger().logInfo("Program is started."); //NOI18N
+
try {
// Init properties file
this.initProperties();
ApplicationManager.getSingeltonManager(this).start();
// Good bye, but this should not be reached ...
- this.getLogger().warn("Unusual exit reached."); //NOI18N
+ this.getLogger().logWarning("Unusual exit reached."); //NOI18N
+
try {
this.doShutdown();
} catch (final SQLException | IOException ex) {
+ // Something bad happened
this.abortProgramWithException(ex);
}
}
/**
* Main method (entry point)
- *
+ * <p>
* @param args the command line arguments
*/
public static void main (String[] args) {
- try {
- // Start application
- new AddressbookApplication().start(args);
- } catch (final IOException ex) {
- // Get instance
- BaseFrameworkSystem.getInstance().getLogger().catching(ex);
- System.exit(1);
- }
+ // Start application
+ new AddressbookApplication().start(args);
}
/**
* Getter for printable application name
- *
+ * <p>
* @return A printable name
*/
public static String printableTitle () {
return MessageFormat.format("{0} v{1}", APP_TITLE, APP_VERSION); //NOI18N
}
+
+ /**
+ * Getter for logger instance
+ *
+ * @return Logger instance
+ */
+ protected LoggerBeanLocal getLogger () {
+ return this.logger;
+ }
}