~ubuntu-branches/ubuntu/quantal/shotwell/quantal

« back to all changes in this revision

Viewing changes to plugins/shotwell-data-imports/FSpotDatabaseBehavior.vala

  • Committer: Package Import Robot
  • Author(s): Robert Ancell
  • Date: 2012-02-21 13:52:58 UTC
  • mto: This revision was merged to the branch mainline in revision 47.
  • Revision ID: package-import@ubuntu.com-20120221135258-ao9jiib5qicomq7q
Tags: upstream-0.11.92
ImportĀ upstreamĀ versionĀ 0.11.92

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/* Copyright 2011 Yorba Foundation
 
2
 *
 
3
 * This software is licensed under the GNU Lesser General Public License
 
4
 * (version 2.1 or later).  See the COPYING file in this distribution. 
 
5
 */
 
6
 
 
7
namespace DataImports.FSpot.Db {
 
8
 
 
9
private class FSpotBehaviorEntry {
 
10
    private Utils.VersionNumber version;
 
11
    private FSpotTableBehavior behavior;
 
12
    
 
13
    public FSpotBehaviorEntry(Utils.VersionNumber version, FSpotTableBehavior behavior) {
 
14
        this.version = version;
 
15
        this.behavior = behavior;
 
16
    }
 
17
    
 
18
    public Utils.VersionNumber get_version() {
 
19
        return version;
 
20
    }
 
21
    
 
22
    public FSpotTableBehavior get_behavior() {
 
23
        return behavior;
 
24
    }
 
25
}
 
26
 
 
27
/**
 
28
 * A class that consolidates the behavior of all F-Spot tables (apart from meta)
 
29
 * and is the one place to check whether the database version is supported.
 
30
 */
 
31
public class FSpotDatabaseBehavior : Object {
 
32
    // Minimum unsupported version: any database from that version and above
 
33
    // is not supported as it's too new and support has not been provided
 
34
    // In practice, the code may work with future versions but this cannot be
 
35
    // guaranteed as it hasn't been tested so it's probably better to just
 
36
    // bomb out at that point rather than risk importing incorrect data
 
37
    public static Utils.VersionNumber MIN_UNSUPPORTED_VERSION =
 
38
        new Utils.VersionNumber({ 19 });
 
39
    private static Gee.Map<string, Gee.List<FSpotBehaviorEntry>> behavior_map;
 
40
    
 
41
    private FSpotTableBehavior<FSpotPhotoRow> photos_behavior;
 
42
    private FSpotTableBehavior<FSpotTagRow> tags_behavior;
 
43
    private FSpotTableBehavior<FSpotPhotoTagRow> photo_tags_behavior;
 
44
    private FSpotTableBehavior<FSpotPhotoVersionRow> photo_versions_behavior;
 
45
    private FSpotTableBehavior<FSpotRollRow> rolls_behavior;
 
46
    
 
47
    public static void create_behavior_map() {
 
48
        behavior_map = new Gee.HashMap<string, Gee.List<FSpotBehaviorEntry>>();
 
49
        // photos table
 
50
        Gee.List<FSpotBehaviorEntry> photos_list = new Gee.ArrayList<FSpotBehaviorEntry>();
 
51
        // v0-4
 
52
        photos_list.add(new FSpotBehaviorEntry(
 
53
            new Utils.VersionNumber({ 0 }),
 
54
            FSpotPhotosV0Behavior.get_instance()
 
55
        ));
 
56
        // v5-6
 
57
        photos_list.add(new FSpotBehaviorEntry(
 
58
            new Utils.VersionNumber({ 5 }),
 
59
            FSpotPhotosV5Behavior.get_instance()
 
60
        ));
 
61
        // v7-10
 
62
        photos_list.add(new FSpotBehaviorEntry(
 
63
            new Utils.VersionNumber({ 7 }),
 
64
            FSpotPhotosV7Behavior.get_instance()
 
65
        ));
 
66
        // v11-15
 
67
        photos_list.add(new FSpotBehaviorEntry(
 
68
            new Utils.VersionNumber({ 11 }),
 
69
            FSpotPhotosV11Behavior.get_instance()
 
70
        ));
 
71
        // v16
 
72
        photos_list.add(new FSpotBehaviorEntry(
 
73
            new Utils.VersionNumber({ 16 }),
 
74
            FSpotPhotosV16Behavior.get_instance()
 
75
        ));
 
76
        // v17
 
77
        photos_list.add(new FSpotBehaviorEntry(
 
78
            new Utils.VersionNumber({ 17 }),
 
79
            FSpotPhotosV17Behavior.get_instance()
 
80
        ));
 
81
        // v18+
 
82
        photos_list.add(new FSpotBehaviorEntry(
 
83
            new Utils.VersionNumber({ 18 }),
 
84
            FSpotPhotosV18Behavior.get_instance()
 
85
        ));
 
86
        behavior_map.set(FSpotPhotosTable.TABLE_NAME, photos_list);
 
87
        // tags table
 
88
        Gee.List<FSpotBehaviorEntry> tags_list = new Gee.ArrayList<FSpotBehaviorEntry>();
 
89
        // v0+
 
90
        tags_list.add(new FSpotBehaviorEntry(
 
91
            new Utils.VersionNumber({ 0 }),
 
92
            FSpotTagsV0Behavior.get_instance()
 
93
        ));
 
94
        behavior_map.set(FSpotTagsTable.TABLE_NAME, tags_list);
 
95
        // photo_tags table
 
96
        Gee.List<FSpotBehaviorEntry> photo_tags_list = new Gee.ArrayList<FSpotBehaviorEntry>();
 
97
        // v0+
 
98
        photo_tags_list.add(new FSpotBehaviorEntry(
 
99
            new Utils.VersionNumber({ 0 }),
 
100
            FSpotPhotoTagsV0Behavior.get_instance()
 
101
        ));
 
102
        behavior_map.set(FSpotPhotoTagsTable.TABLE_NAME, photo_tags_list);
 
103
        // photo_versions table
 
104
        Gee.List<FSpotBehaviorEntry> photo_versions_list = new Gee.ArrayList<FSpotBehaviorEntry>();
 
105
        // v0-8
 
106
        photo_versions_list.add(new FSpotBehaviorEntry(
 
107
            new Utils.VersionNumber({ 0 }),
 
108
            FSpotPhotoVersionsV0Behavior.get_instance()
 
109
        ));
 
110
        // v9-15
 
111
        photo_versions_list.add(new FSpotBehaviorEntry(
 
112
            new Utils.VersionNumber({ 9 }),
 
113
            FSpotPhotoVersionsV9Behavior.get_instance()
 
114
        ));
 
115
        // v16
 
116
        photo_versions_list.add(new FSpotBehaviorEntry(
 
117
            new Utils.VersionNumber({ 16 }),
 
118
            FSpotPhotoVersionsV16Behavior.get_instance()
 
119
        ));
 
120
        // v17
 
121
        photo_versions_list.add(new FSpotBehaviorEntry(
 
122
            new Utils.VersionNumber({ 17 }),
 
123
            FSpotPhotoVersionsV17Behavior.get_instance()
 
124
        ));
 
125
        // v18+
 
126
        photo_versions_list.add(new FSpotBehaviorEntry(
 
127
            new Utils.VersionNumber({ 18 }),
 
128
            FSpotPhotoVersionsV18Behavior.get_instance()
 
129
        ));
 
130
        behavior_map.set(FSpotPhotoVersionsTable.TABLE_NAME, photo_versions_list);
 
131
        // rolls table
 
132
        Gee.List<FSpotBehaviorEntry> rolls_list = new Gee.ArrayList<FSpotBehaviorEntry>();
 
133
        // v0-4
 
134
        rolls_list.add(new FSpotBehaviorEntry(
 
135
            new Utils.VersionNumber({ 0 }),
 
136
            FSpotRollsV0Behavior.get_instance()
 
137
        ));
 
138
        // v5+
 
139
        rolls_list.add(new FSpotBehaviorEntry(
 
140
            new Utils.VersionNumber({ 5 }),
 
141
            FSpotRollsV5Behavior.get_instance()
 
142
        ));
 
143
        behavior_map.set(FSpotRollsTable.TABLE_NAME, rolls_list);
 
144
    }
 
145
    
 
146
    public static FSpotTableBehavior? find_behavior(string table_name, Utils.VersionNumber version) {
 
147
        FSpotTableBehavior behavior = null;
 
148
        Gee.List<FSpotBehaviorEntry> behavior_list = behavior_map.get(table_name);
 
149
        if (behavior_list != null)
 
150
            foreach (FSpotBehaviorEntry entry in behavior_list) {
 
151
                if (version.compare_to(entry.get_version()) >= 0)
 
152
                    behavior = entry.get_behavior();
 
153
            }
 
154
        else
 
155
            warning("Could not find behavior list for table %s", table_name);
 
156
        return behavior;
 
157
 
 
158
    }
 
159
    public FSpotDatabaseBehavior(Utils.VersionNumber version) throws Spit.DataImports.DataImportError {
 
160
        if (version.compare_to(MIN_UNSUPPORTED_VERSION) >= 0)
 
161
            throw new Spit.DataImports.DataImportError.UNSUPPORTED_VERSION("Version %s is not yet supported", version.to_string());
 
162
        
 
163
        FSpotTableBehavior? photos_generic_behavior = find_behavior(FSpotPhotosTable.TABLE_NAME, version);
 
164
        if (photos_generic_behavior != null)
 
165
            photos_behavior = photos_generic_behavior as FSpotTableBehavior<FSpotPhotoRow>;
 
166
        FSpotTableBehavior? tags_generic_behavior = find_behavior(FSpotTagsTable.TABLE_NAME, version);
 
167
        if (tags_generic_behavior != null)
 
168
            tags_behavior = tags_generic_behavior as FSpotTableBehavior<FSpotTagRow>;
 
169
        FSpotTableBehavior? photo_tags_generic_behavior = find_behavior(FSpotPhotoTagsTable.TABLE_NAME, version);
 
170
        if (photo_tags_generic_behavior != null)
 
171
            photo_tags_behavior = photo_tags_generic_behavior as FSpotTableBehavior<FSpotPhotoTagRow>;
 
172
        FSpotTableBehavior? photo_versions_generic_behavior = find_behavior(FSpotPhotoVersionsTable.TABLE_NAME, version);
 
173
        if (photo_versions_generic_behavior != null)
 
174
            photo_versions_behavior = photo_versions_generic_behavior as FSpotTableBehavior<FSpotPhotoVersionRow>;
 
175
        FSpotTableBehavior? rolls_generic_behavior = find_behavior(FSpotRollsTable.TABLE_NAME, version);
 
176
        if (rolls_generic_behavior != null)
 
177
            rolls_behavior = rolls_generic_behavior as FSpotTableBehavior<FSpotRollRow>;
 
178
        
 
179
        if (photos_behavior == null || tags_behavior == null ||
 
180
            photo_tags_behavior == null || photo_versions_behavior == null ||
 
181
            rolls_behavior == null
 
182
        )
 
183
            throw new Spit.DataImports.DataImportError.UNSUPPORTED_VERSION("Version %s is not supported", version.to_string());
 
184
    }
 
185
    
 
186
    public FSpotTableBehavior<FSpotPhotoRow> get_photos_behavior() {
 
187
        return photos_behavior;
 
188
    }
 
189
    
 
190
    public FSpotTableBehavior<FSpotTagRow> get_tags_behavior() {
 
191
        return tags_behavior;
 
192
    }
 
193
    
 
194
    public FSpotTableBehavior<FSpotPhotoTagRow> get_photo_tags_behavior() {
 
195
        return photo_tags_behavior;
 
196
    }
 
197
    
 
198
    public FSpotTableBehavior<FSpotPhotoVersionRow> get_photo_versions_behavior() {
 
199
        return photo_versions_behavior;
 
200
    }
 
201
    
 
202
    public FSpotTableBehavior<FSpotRollRow> get_rolls_behavior() {
 
203
        return rolls_behavior;
 
204
    }
 
205
}
 
206
 
 
207
}
 
208