Source code: com/cybertivity/powerjournal/SingleEntryController.java
1 package com.cybertivity.powerjournal;
2 import java.awt.Container;
3 import java.io.File;
4 import java.security.NoSuchAlgorithmException;
5 import java.sql.Timestamp;
6 import java.text.ParseException;
7 import java.text.SimpleDateFormat;
8 import java.util.ArrayList;
9 import java.util.Date;
10 import java.util.HashMap;
11 import java.util.Iterator;
12 import java.util.Set;
13 import javax.swing.JDialog;
14 import javax.swing.JFrame;
15 import javax.swing.JOptionPane;
16 import com.cybertivity.powerjournal.database.*;
17 import com.cybertivity.powerjournal.framework.*;
18
19 /**
20 * Title: PowerJournal
21 * Description: $Id: SingleEntryController.java,v 1.2 2001/12/15 17:12:38 arrowood Exp $
22 * Copyright: Copyright (c) 2001
23 * Company: <A HREF="http://www.cybertivity.com">Cybertivity</A>
24 *
25 * @author <A HREF="mailto:chris.arrowood@cybertivity.com">Chris Arrowood</A>
26 * @created December 9, 2001
27 * @version 1.0
28 */
29
30 public class SingleEntryController extends EntryController {
31
32 private SingleEntryView view = null;
33 private Container content = null;
34 private boolean isGuest = true;
35 private EntryManager entryManager = null;
36
37
38 public SingleEntryController(Container contentArg, SingleEntryView singleEntryView, boolean isGuestArg) {
39 content = contentArg;
40 isGuest = isGuestArg;
41 view = singleEntryView;
42 singleEntryView.addObserver(this);
43 }
44
45
46 public void handleModelEvent(ModelEvent event) {
47
48 }
49
50
51 public void handleViewEvent(ViewEvent event) {
52 Object initiator = event.getInitiator();
53 String action = event.getField();
54 try {
55 if (initiator instanceof SingleEntryView) {
56 handleSingleEntryView(event);
57 } else {
58 throw new java.lang.UnsupportedOperationException("Error: MainController recieved an action that has not been implemented. ACTION:" + action);
59 }
60 } catch (Exception ex) {
61 new ExceptionDialog(ex);
62 }
63 }
64
65
66 private void handleSingleEntryView(ViewEvent event) {
67 String action = event.getField();
68 Object arg = event.getValue();
69 if (action.equals(SingleEntryView.EVENT_FIRST)) {
70 if (saveCurrentEntry()) {
71 moveToFirstEntry();
72 }
73 } else if (action.equals(SingleEntryView.EVENT_PREVIOUS)) {
74 if (saveCurrentEntry()) {
75 moveToPreviousEntry();
76 }
77 } else if (action.equals(SingleEntryView.EVENT_NEXT)) {
78 if (saveCurrentEntry()) {
79 moveToNextEntry();
80 }
81 } else if (action.equals(SingleEntryView.EVENT_LAST)) {
82 if (saveCurrentEntry()) {
83 moveToLastEntry();
84 }
85 } else if (action.equals(SingleEntryView.EVENT_NEW)) {
86 if (saveCurrentEntry()) {
87 newEntry();
88 }
89 } else if (action.equals(SingleEntryView.EVENT_RELOAD)) {
90 reloadEntry();
91 } else if (action.equals(SingleEntryView.EVENT_DELETE)) {
92 deleteEntry();
93 } else if (action.equals(SingleEntryView.EVENT_VIEW_ALL)) {
94 fireEvent(SingleEntryView.EVENT_VIEW_ALL,"");
95 } else {
96 throw new java.lang.UnsupportedOperationException("Error: MainController recieved an action that has not been implemented. ACTION:" + action);
97 }
98 }
99
100
101 protected void setEntryManager(EntryManager entryManagerArg) {
102 entryManager = entryManagerArg;
103 }
104
105
106 protected void setGuestMode(boolean guestMode) {
107 isGuest = guestMode;
108 }
109
110
111 protected void moveToFirstEntry() {
112 try {
113 Entry entry = entryManager.moveToFirstEntry();
114 view.displayEntry(entry, isGuest);
115 } catch (DBException e) {
116 Dialogs.showError(content, MainController.ERROR_TITLE_DB, e.getMessage());
117 }
118 }
119
120
121 private void moveToNextEntry() {
122 try {
123 view.displayEntry(entryManager.moveToNextEntry(view.getSelectedEntryNumber()), isGuest);
124 } catch (DBException e) {
125 Dialogs.showError(content, MainController.ERROR_TITLE_DB, e.getMessage());
126 }
127 }
128
129
130 private void moveToPreviousEntry() {
131 try {
132 view.displayEntry(entryManager.moveToPreviousEntry(view.getSelectedEntryNumber()), isGuest);
133 } catch (DBException e) {
134 Dialogs.showError(content, MainController.ERROR_TITLE_DB, e.getMessage());
135 }
136 }
137
138
139 private void moveToLastEntry() {
140 try {
141 Entry entry = entryManager.moveToLastEntry();
142 view.displayEntry(entry, isGuest);
143 } catch (DBException e) {
144 Dialogs.showError(content, MainController.ERROR_TITLE_DB, e.getMessage());
145 }
146 }
147
148 protected boolean saveCurrentEntry() {
149 boolean success = true;
150 if (!isGuest) {
151 try {
152 SimpleDateFormat sdf = new SimpleDateFormat(Entry.DATE_FORMAT);
153 Date date = sdf.parse(view.getDisplayedEntryDate());
154 Timestamp dateTimeStamp = new Timestamp(date.getTime());
155 Entry entry = new Entry("", "");
156 entry.setEntryContents(view.getDisplayedEntryContents());
157 entry.setEntryDescription(view.getDisplayedEntryDescription());
158 entry.setEntryDate(dateTimeStamp);
159 entry.setEntryPrivate(view.getDisplayedEntryIsPrivate());
160 if (view.getSelectedEntryNumber().equals(SingleEntryView.NEW_ENTRY_NUMBER_LABEL)) {
161 entryManager.insertEntryToTable(entry);
162 } else {
163 entryManager.updateCurrentEntry(entry, Integer.parseInt(view.getSelectedEntryNumber()));
164 }
165 } catch (ParseException e) {
166 Dialogs.showError(content, "Entry Error", "The date and time that you entered are invalid.\n\nUse the following format:\n" + Entry.DATE_FORMAT);
167 success = false;
168 } catch (DBException e) {
169 Dialogs.showError(content, MainController.ERROR_TITLE_DB, e.getMessage());
170 success = false;
171 }
172 }
173 return success;
174 }
175
176
177 protected void newEntry() {
178 Entry newEntry = new Entry("", "");
179 view.displayEntry(newEntry, isGuest, true);
180 }
181
182
183 protected void deleteEntry() {
184 fireEvent(SingleEntryView.EVENT_DELETE,"");
185 }
186
187
188 private void reloadEntry() {
189 try {
190 int ans = Dialogs.getConfirm(content, "Reload Current Entry?", "Are you sure you wish to reload the current entry? You will lose any changes that have been made to this entry.");
191 if (ans == JOptionPane.OK_OPTION) {
192 Entry entry = entryManager.getEntryById(view.getSelectedEntryNumber());
193 view.displayEntry(entry, isGuest);
194 } else {
195 Dialogs.showInformation(content, "Action Canceled", "The action was canceled");
196 }
197 } catch (DBException e) {
198 Dialogs.showError(content, MainController.ERROR_TITLE_DB, e.getMessage());
199 }
200 }
201
202 }