aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Source/SPCSVExporter.h63
-rw-r--r--Source/SPCSVExporter.m54
-rw-r--r--Source/SPExportController.m14
-rw-r--r--Source/SPExporter.h49
-rw-r--r--Source/SPExporter.m30
-rw-r--r--sequel-pro.xcodeproj/project.pbxproj24
6 files changed, 227 insertions, 7 deletions
diff --git a/Source/SPCSVExporter.h b/Source/SPCSVExporter.h
new file mode 100644
index 00000000..48f0c424
--- /dev/null
+++ b/Source/SPCSVExporter.h
@@ -0,0 +1,63 @@
+//
+// $Id$
+//
+// SPCSVExporter.h
+// sequel-pro
+//
+// Created by Stuart Connolly (stuconnolly.com) on August 29, 2009
+// Copyright (c) 2009 Stuart Connolly. All rights reserved.
+//
+// This program is free software; you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation; either version 2 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+//
+// More info at <http://code.google.com/p/sequel-pro/>
+
+#import <Cocoa/Cocoa.h>
+
+#import "SPExporter.h"
+#import "MCPKit.h"
+
+@interface SPCSVExporter : SPExporter
+{
+ // CSV file
+ NSFileHandle *csvFileHandle;
+
+ // CSV data
+ NSArray *csvDataArray;
+ MCPResult *csvDataResult;
+
+ // CSV options
+ BOOL csvOutputFieldNames;
+ NSString *csvFieldSeparatorString;
+ NSString *csvEnclosingCharacterString;
+ NSString *csvEscapeString;
+ NSString *csvLineEndingString;
+ NSArray *csvTableColumnNumericStatus;
+}
+
+@property (readwrite, retain) NSFileHandle *csvFileHandle;
+
+@property (readwrite, retain) NSArray *csvDataArray;
+@property (readwrite, retain) MCPResult *csvDataResult;
+
+@property (readwrite) BOOL csvOutputFieldNames;
+@property (readwrite, retain) NSString *csvFieldSeparatorString;
+@property (readwrite, retain) NSString *csvEnclosingCharacterString;
+@property (readwrite, retain) NSString *csvEscapeString;
+@property (readwrite, retain) NSString *csvLineEndingString;
+@property (readwrite, retain) NSArray *csvTableColumnNumericStatus;
+
+- (id)initWithFileHandle:(NSFileHandle *)fileHandle;
+
+@end
diff --git a/Source/SPCSVExporter.m b/Source/SPCSVExporter.m
new file mode 100644
index 00000000..15cf6827
--- /dev/null
+++ b/Source/SPCSVExporter.m
@@ -0,0 +1,54 @@
+//
+// $Id$
+//
+// SPCSVExporter.m
+// sequel-pro
+//
+// Created by Stuart Connolly (stuconnolly.com) on August 29, 2009
+// Copyright (c) 2009 Stuart Connolly. All rights reserved.
+//
+// This program is free software; you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation; either version 2 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+//
+// More info at <http://code.google.com/p/sequel-pro/>
+
+#import "SPCSVExporter.h"
+
+@implementation SPCSVExporter
+
+@synthesize csvFileHandle;
+
+@synthesize csvDataArray;
+@synthesize csvDataResult;
+
+@synthesize csvOutputFieldNames;
+@synthesize csvFieldSeparatorString;
+@synthesize csvEnclosingCharacterString;
+@synthesize csvEscapeString;
+@synthesize csvLineEndingString;
+@synthesize csvTableColumnNumericStatus;
+
+/**
+ * Initialize an instance of the exporter using the supplied file handle.
+ */
+- (id)initWithFileHandle:(NSFileHandle *)fileHandle
+{
+ if ((self == [super init])) {
+ [self setCsvFileHandle:fileHandle];
+ }
+
+ return self;
+}
+
+@end
diff --git a/Source/SPExportController.m b/Source/SPExportController.m
index 4e83d818..f89e727d 100644
--- a/Source/SPExportController.m
+++ b/Source/SPExportController.m
@@ -63,13 +63,17 @@
- (IBAction)closeSheet:(id)sender
{
- [NSApp endSheet:exportWindow];
- [NSApp stopModalWithCode:[sender tag]];
+ [NSApp endSheet:exportWindow returnCode:[sender tag]];
+ [exportWindow orderOut:self];
}
- (void)sheetDidEnd:(NSWindow *)sheet returnCode:(int)returnCode contextInfo:(void *)contextInfo
{
- [sheet orderOut:self];
+ // Perform the export
+ if (returnCode == NSOKButton) {
+
+ // First determine what type of export the user selected
+ }
}
#pragma mark -
@@ -159,10 +163,9 @@
- (NSArray *)toolbarSelectableItemIdentifiers:(NSToolbar *)toolbar
{
- NSArray *array = [toolbar items];
NSMutableArray *items = [NSMutableArray arrayWithCapacity:6];
- for (NSToolbarItem *item in array)
+ for (NSToolbarItem *item in [toolbar items])
{
[items addObject:[item itemIdentifier]];
}
@@ -176,6 +179,7 @@
- (void)dealloc
{
[tables release], tables = nil;
+
[super dealloc];
}
diff --git a/Source/SPExporter.h b/Source/SPExporter.h
new file mode 100644
index 00000000..bf405f58
--- /dev/null
+++ b/Source/SPExporter.h
@@ -0,0 +1,49 @@
+//
+// $Id$
+//
+// SPExporter.h
+// sequel-pro
+//
+// Created by Stuart Connolly (stuconnolly.com) on August 29, 2009
+// Copyright (c) 2009 Stuart Connolly. All rights reserved.
+//
+// This program is free software; you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation; either version 2 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+//
+// More info at <http://code.google.com/p/sequel-pro/>
+
+#import <Cocoa/Cocoa.h>
+
+/**
+ * This class is designed to be the base class of all data exporters and provide basic functionality
+ * common to each of them. Each data exporter (i.e. CSV, SQL, XML, etc.) should be implemented as a subclass
+ * of this class, with the end result being an uncomplicated export architecture defined by export type.
+ *
+ * All export functionality is initially controlled by SPExportController, which is the single point within the
+ * architecture that controls the user interface and provides user feedback. When the user starts an export
+ * operation after selecting the available options, SPExportController should create an instance of the appropriate
+ * exporter (e.g. SPCSVExporter for a CSV export) and begin the export process. Any available progress information
+ * (defined in SPExporter as is common to all exporters) of the export should be set by the exporter and made
+ * available to SPExportController via delegate methods in order to update the user interface.
+ *
+ * Note that all core export processes should be designed and implemented to run in a separate thread to avoid
+ * blocking the main thread and also to provide improved efficiency over the current design (for example, all memory
+ * used within a separate thread can be reclaimed immediately after the thread completes its cycle and it's
+ * autorelease pool is released).
+ */
+@interface SPExporter : NSObject
+
+// Implement functionality common to all exporters here
+
+@end
diff --git a/Source/SPExporter.m b/Source/SPExporter.m
new file mode 100644
index 00000000..fc5a231b
--- /dev/null
+++ b/Source/SPExporter.m
@@ -0,0 +1,30 @@
+//
+// $Id$
+//
+// SPExporter.m
+// sequel-pro
+//
+// Created by Stuart Connolly (stuconnolly.com) on August 29, 2009
+// Copyright (c) 2009 Stuart Connolly. All rights reserved.
+//
+// This program is free software; you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation; either version 2 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+//
+// More info at <http://code.google.com/p/sequel-pro/>
+
+#import "SPExporter.h"
+
+@implementation SPExporter
+
+@end
diff --git a/sequel-pro.xcodeproj/project.pbxproj b/sequel-pro.xcodeproj/project.pbxproj
index ac8cdfe0..90b8298e 100644
--- a/sequel-pro.xcodeproj/project.pbxproj
+++ b/sequel-pro.xcodeproj/project.pbxproj
@@ -108,6 +108,8 @@
17E6420A0EF020CB001BC333 /* DBView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 17E642060EF020CB001BC333 /* DBView.xib */; };
17E6423B0EF0216C001BC333 /* Credits.rtf in Resources */ = {isa = PBXBuildFile; fileRef = 17E642390EF0216C001BC333 /* Credits.rtf */; };
17E6423E0EF0218B001BC333 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 17E6423C0EF0218B001BC333 /* InfoPlist.strings */; };
+ 17F5B1511048C4E400FC794F /* SPCSVExporter.m in Sources */ = {isa = PBXBuildFile; fileRef = 17F5B1501048C4E400FC794F /* SPCSVExporter.m */; };
+ 17F5B1541048C50D00FC794F /* SPExporter.m in Sources */ = {isa = PBXBuildFile; fileRef = 17F5B1531048C50D00FC794F /* SPExporter.m */; };
296DC89F0F8FD336002A3258 /* WebKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 296DC89E0F8FD336002A3258 /* WebKit.framework */; };
296DC8B60F909194002A3258 /* MGTemplateEngine.m in Sources */ = {isa = PBXBuildFile; fileRef = 296DC8A70F909194002A3258 /* MGTemplateEngine.m */; };
296DC8B70F909194002A3258 /* RegexKitLite.m in Sources */ = {isa = PBXBuildFile; fileRef = 296DC8AB0F909194002A3258 /* RegexKitLite.m */; };
@@ -458,6 +460,10 @@
17E642070EF020CB001BC333 /* English */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = English; path = English.lproj/DBView.xib; sourceTree = "<group>"; };
17E6423A0EF0216C001BC333 /* English */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = English; path = Interfaces/English.lproj/Credits.rtf; sourceTree = SOURCE_ROOT; };
17E6423D0EF0218B001BC333 /* English */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = English; path = Interfaces/English.lproj/InfoPlist.strings; sourceTree = SOURCE_ROOT; };
+ 17F5B14F1048C4E400FC794F /* SPCSVExporter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SPCSVExporter.h; sourceTree = "<group>"; };
+ 17F5B1501048C4E400FC794F /* SPCSVExporter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SPCSVExporter.m; sourceTree = "<group>"; };
+ 17F5B1521048C50D00FC794F /* SPExporter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SPExporter.h; sourceTree = "<group>"; };
+ 17F5B1531048C50D00FC794F /* SPExporter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SPExporter.m; sourceTree = "<group>"; };
296DC89E0F8FD336002A3258 /* WebKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = WebKit.framework; path = /System/Library/Frameworks/WebKit.framework; sourceTree = "<absolute>"; };
296DC8A50F909194002A3258 /* MGTemplateMarker.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGTemplateMarker.h; sourceTree = "<group>"; };
296DC8A60F909194002A3258 /* MGTemplateFilter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGTemplateFilter.h; sourceTree = "<group>"; };
@@ -907,6 +913,7 @@
17E641470EF01EB8001BC333 /* Controllers */ = {
isa = PBXGroup;
children = (
+ 17F5B1491048C4C000FC794F /* Data Export */,
17E641480EF01EF6001BC333 /* CustomQuery.h */,
17E641490EF01EF6001BC333 /* CustomQuery.m */,
17E6414A0EF01EF6001BC333 /* SPAppController.h */,
@@ -915,8 +922,6 @@
5822C9B41000DB2400DCC3D6 /* SPConnectionController.m */,
1740FAB90FC4372F00CF3699 /* SPDatabaseData.h */,
1740FABA0FC4372F00CF3699 /* SPDatabaseData.m */,
- B5E92F1A0F75B2E800012500 /* SPExportController.h */,
- B5E92F1B0F75B2E800012500 /* SPExportController.m */,
BC9F087F100FCF2C00A80D32 /* SPFieldEditorController.h */,
BC9F0880100FCF2C00A80D32 /* SPFieldEditorController.m */,
17E6414C0EF01EF6001BC333 /* SPGrowlController.h */,
@@ -1144,6 +1149,19 @@
path = Interfaces;
sourceTree = "<group>";
};
+ 17F5B1491048C4C000FC794F /* Data Export */ = {
+ isa = PBXGroup;
+ children = (
+ 17F5B1521048C50D00FC794F /* SPExporter.h */,
+ 17F5B1531048C50D00FC794F /* SPExporter.m */,
+ 17F5B14F1048C4E400FC794F /* SPCSVExporter.h */,
+ 17F5B1501048C4E400FC794F /* SPCSVExporter.m */,
+ B5E92F1A0F75B2E800012500 /* SPExportController.h */,
+ B5E92F1B0F75B2E800012500 /* SPExportController.m */,
+ );
+ name = "Data Export";
+ sourceTree = "<group>";
+ };
19C28FB0FE9D524F11CA2CBB /* Products */ = {
isa = PBXGroup;
children = (
@@ -1673,6 +1691,8 @@
BC01BCCF104024BE006BDEE7 /* SPEncodingPopupAccessory.m in Sources */,
173C4366104455E0001F3A30 /* SPQueryFavoriteManager.m in Sources */,
173C44D81044A6B0001F3A30 /* SPOutlineView.m in Sources */,
+ 17F5B1511048C4E400FC794F /* SPCSVExporter.m in Sources */,
+ 17F5B1541048C50D00FC794F /* SPExporter.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};