Add some logic for fetching stored controlsets and switching amongst them
authorMike Rylander <mrylander@gmail.com>
Fri, 6 May 2011 20:53:17 +0000 (16:53 -0400)
committerMike Rylander <mrylander@gmail.com>
Fri, 6 May 2011 20:53:17 +0000 (16:53 -0400)
Open-ILS/web/js/dojo/MARC/AuthorityControlSet.js

index 2b3bfa4..9422d0e 100644 (file)
@@ -24,288 +24,395 @@ if(!dojo._hasResource["MARC.AuthorityControlSet"]) {
     dojo.provide("MARC.AuthorityControlSet");
     dojo.declare('MARC.AuthorityControlSet', null, {
 
-        // static sorta-LoC setup ... to be overwritten with server data 
-        _loc_authority_tag_map = {
-            100 : [[100,500,700],100],
-            700 : [[100,500,700],100],
-            800 : [[100,500,700],100],
-            110 : [[110,510,710],110],
-            610 : [[110,510,710],110],
-            710 : [[110,510,710],110],
-            810 : [[110,510,710],110],
-            111 : [[111,511,711],111],
-            611 : [[111,511,711],111],
-            711 : [[111,511,711],111],
-            811 : [[111,511,711],111],
-            240 : [[130,530,730],130],
-            130 : [[130,530,730],130],
-            730 : [[130,530,730],130],
-            830 : [[130,530,730],130],
-            600 : [[100,500,580,581,582,585,700,780,781,782,785],100],
-            630 : [[130,530,730],130],
-            648 : [[148,548],148],
-            650 : [[150,550,580,581,582,585,750,780,781,782,785],150],
-            651 : [[151,551,580,581,582,585,751,780,781,782,785],151],
-            655 : [[155,555,580,581,582,585,755,780,781,782,785],155]
+        _controlset : -1,
+
+        constructor : function(kwargs) {
+
+            if (!MARC.AuthorityControlSet._remote_loaded) {
+
+                // TODO -- push the raw tree into the oils cache for later reuse
+
+                var pcrud = new openils.PermaCrud();
+                var acs_list = pcrud.retrieveAll('acs');
+
+                // loop over each acs
+                dojo.forEach( acs_list, function (cs) {
+                    MARC.AuthorityControlSet._controlsets[cs.id()] = {
+                        id : cs.id(),
+                        name : cs.name(),
+                        description : cs.description(),
+                        authority_tag_map : {},
+                        control_map : {},
+                        bib_fields : [],
+                        raw : cs
+                    };
+
+                    // grab the authority fields
+                    var acsaf_list = pcrud.search('acsaf', {control_set : cs.id()});
+                    MARC.AuthorityControlSet._controlsets[cs.name()].raw.authority_fields( acsaf_list );
+
+                    // and loop over each
+                    dojo.forEach( acsaf_list, function (csaf) {
+                        // link the main entry if we're subordinate
+                        if (csaf.main_entry()) {
+                            csaf.main_entry(
+                                dojo.filter(acsaf_list, function (x) {
+                                    return x.id() == csaf.main_entry();
+                                })[0]
+                            );
+                        }
+
+                        // link the sub entries if we're main
+                        csaf.sub_entries(
+                            dojo.filter(acsaf_list, function (x) {
+                                return x.main_entry() == csaf.id();
+                            })[0]
+                        );
+
+                        // now, bib fields
+                        var acsbf_list = pcrud.search('acsbf', {authority_field : csaf.id()});
+                        csaf.bib_fields( acsbf_list );
+
+                        MARC.AuthorityControlSet._controlsets[cs.name()].bib_fields = [].concat(
+                            MARC.AuthorityControlSet._controlsets[cs.name()].bib_fields
+                            acsbf_list
+                        );
+
+                        dojo.forEach( acsbf_list, function (csbf) {
+                            // link the main entry if we're subordinate
+                            if (csbf.authority_field()) {
+                                csbf.authority_field(
+                                    dojo.filter(acsaf_list, function (x) {
+                                        return x.a() == csbf.authority_field();
+                                    })[0]
+                                );
+                            }
+    
+                        });
+                    });
+
+                    // build the authority_tag_map
+                    dojo.forEach( MARC.AuthorityControlSet._controlsets[cs.name()].bib_fields, function (bf) {
+                        MARC.AuthorityControlSet._controlsets[cs.name()].authority_tag_map[bf.tag()] = [/*XXX*/];
+                        MARC.AuthorityControlSet._controlsets[cs.name()].control_map[bf.tag()] = {/*XXX*/};
+                    });
+                });
+
+            }
+
+            if (kwargs.controlSet) {
+                this._controlset = kwargs.controlSet;
+            }
         },
 
-        _loc_control_map = {
-            100 : {
-                'a' : { 100 : 'a' },
-                'd' : { 100 : 'd' },
-                'e' : { 100 : 'e' },
-                'q' : { 100 : 'q' }
-            },
-            110 : {
-                'a' : { 110 : 'a' },
-                'd' : { 110 : 'd' }
-            },
-            111 : {
-                'a' : { 111 : 'a' },
-                'd' : { 111 : 'd' }
-            },
-            130 : {
-                'a' : { 130 : 'a' },
-                'd' : { 130 : 'd' }
-            },
-            240 : {
-                'a' : { 130 : 'a' },
-                'd' : { 130 : 'd' }
-            },
-            400 : {
-                'a' : { 100 : 'a' },
-                'd' : { 100 : 'd' }
-            },
-            410 : {
-                'a' : { 110 : 'a' },
-                'd' : { 110 : 'd' }
-            },
-            411 : {
-                'a' : { 111 : 'a' },
-                'd' : { 111 : 'd' }
-            },
-            440 : {
-                'a' : { 130 : 'a' },
-                'n' : { 130 : 'n' },
-                'p' : { 130 : 'p' }
-            },
-            700 : {
-                'a' : { 100 : 'a' },
-                'd' : { 100 : 'd' },
-                'q' : { 100 : 'q' },
-                't' : { 100 : 't' }
-            },
-            710 : {
-                'a' : { 110 : 'a' },
-                'd' : { 110 : 'd' }
-            },
-            711 : {
-                'a' : { 111 : 'a' },
-                'c' : { 111 : 'c' },
-                'd' : { 111 : 'd' }
-            },
-            730 : {
-                'a' : { 130 : 'a' },
-                'd' : { 130 : 'd' }
-            },
-            800 : {
-                'a' : { 100 : 'a' },
-                'd' : { 100 : 'd' }
-            },
-            810 : {
-                'a' : { 110 : 'a' },
-                'd' : { 110 : 'd' }
-            },
-            811 : {
-                'a' : { 111 : 'a' },
-                'd' : { 111 : 'd' }
-            },
-            830 : {
-                'a' : { 130 : 'a' },
-                'd' : { 130 : 'd' }
+        controlSetId: function (x) {
+            if (x) this._controlset = x;
+            return this._controlset;
+        },
+
+        controlSet: function (x) {
+            return MARC.AuthorityControlSet._controlsets[this.controlSetId(x)];
+        },
+
+        controlSetList : function () {
+            var l = [];
+            for (var i in MARC.AuthorityControlSet._controlsets) {
+                l.push(i);
+            }
+            return l;
+        }
+
+    });
+
+    MARC.AuthorityControlSet._remote_loaded = false;
+
+    MARC.AuthorityControlSet._controlsets = {
+        // static sorta-LoC setup ... to be overwritten with server data 
+        -1 : {
+            id : -1,
+            name : 'Static LoC legacy mapping',
+            description : 'Legacy mapping provided as a default',
+            authority_tag_map : {
+                100 : [[100,500,700],100],
+                700 : [[100,500,700],100],
+                800 : [[100,500,700],100],
+                110 : [[110,510,710],110],
+                610 : [[110,510,710],110],
+                710 : [[110,510,710],110],
+                810 : [[110,510,710],110],
+                111 : [[111,511,711],111],
+                611 : [[111,511,711],111],
+                711 : [[111,511,711],111],
+                811 : [[111,511,711],111],
+                240 : [[130,530,730],130],
+                130 : [[130,530,730],130],
+                730 : [[130,530,730],130],
+                830 : [[130,530,730],130],
+                600 : [[100,500,580,581,582,585,700,780,781,782,785],100],
+                630 : [[130,530,730],130],
+                648 : [[148,548],148],
+                650 : [[150,550,580,581,582,585,750,780,781,782,785],150],
+                651 : [[151,551,580,581,582,585,751,780,781,782,785],151],
+                655 : [[155,555,580,581,582,585,755,780,781,782,785],155]
             },
-            600 : {
-                'a' : { 100 : 'a' },
-                'd' : { 100 : 'd' },
-                'q' : { 100 : 'q' },
-                't' : { 100 : 't' },
-                'v' : { 180 : 'v',
-                    100 : 'v',
-                    181 : 'v',
-                    182 : 'v',
-                    185 : 'v'
+            contorl_map : {
+                100 : {
+                    'a' : { 100 : 'a' },
+                    'd' : { 100 : 'd' },
+                    'e' : { 100 : 'e' },
+                    'q' : { 100 : 'q' }
                 },
-                'x' : { 180 : 'x',
-                    100 : 'x',
-                    181 : 'x',
-                    182 : 'x',
-                    185 : 'x'
+                110 : {
+                    'a' : { 110 : 'a' },
+                    'd' : { 110 : 'd' }
                 },
-                'y' : { 180 : 'y',
-                    100 : 'y',
-                    181 : 'y',
-                    182 : 'y',
-                    185 : 'y'
+                111 : {
+                    'a' : { 111 : 'a' },
+                    'd' : { 111 : 'd' }
                 },
-                'z' : { 180 : 'z',
-                    100 : 'z',
-                    181 : 'z',
-                    182 : 'z',
-                    185 : 'z'
-                }
-            },
-            610 : {
-                'a' : { 110 : 'a' },
-                'd' : { 110 : 'd' },
-                't' : { 110 : 't' },
-                'v' : { 180 : 'v',
-                    110 : 'v',
-                    181 : 'v',
-                    182 : 'v',
-                    185 : 'v'
+                130 : {
+                    'a' : { 130 : 'a' },
+                    'd' : { 130 : 'd' }
                 },
-                'x' : { 180 : 'x',
-                    110 : 'x',
-                    181 : 'x',
-                    182 : 'x',
-                    185 : 'x'
+                240 : {
+                    'a' : { 130 : 'a' },
+                    'd' : { 130 : 'd' }
                 },
-                'y' : { 180 : 'y',
-                    110 : 'y',
-                    181 : 'y',
-                    182 : 'y',
-                    185 : 'y'
+                400 : {
+                    'a' : { 100 : 'a' },
+                    'd' : { 100 : 'd' }
                 },
-                'z' : { 180 : 'z',
-                    110 : 'z',
-                    181 : 'z',
-                    182 : 'z',
-                    185 : 'z'
-                }
-            },
-            611 : {
-                'a' : { 111 : 'a' },
-                'd' : { 111 : 'd' },
-                't' : { 111 : 't' },
-                'v' : { 180 : 'v',
-                    111 : 'v',
-                    181 : 'v',
-                    182 : 'v',
-                    185 : 'v'
+                410 : {
+                    'a' : { 110 : 'a' },
+                    'd' : { 110 : 'd' }
                 },
-                'x' : { 180 : 'x',
-                    111 : 'x',
-                    181 : 'x',
-                    182 : 'x',
-                    185 : 'x'
+                411 : {
+                    'a' : { 111 : 'a' },
+                    'd' : { 111 : 'd' }
                 },
-                'y' : { 180 : 'y',
-                    111 : 'y',
-                    181 : 'y',
-                    182 : 'y',
-                    185 : 'y'
+                440 : {
+                    'a' : { 130 : 'a' },
+                    'n' : { 130 : 'n' },
+                    'p' : { 130 : 'p' }
                 },
-                'z' : { 180 : 'z',
-                    111 : 'z',
-                    181 : 'z',
-                    182 : 'z',
-                    185 : 'z'
-                }
-            },
-            630 : {
-                'a' : { 130 : 'a' },
-                'd' : { 130 : 'd' }
-            },
-            648 : {
-                'a' : { 148 : 'a' },
-                'v' : { 148 : 'v' },
-                'x' : { 148 : 'x' },
-                'y' : { 148 : 'y' },
-                'z' : { 148 : 'z' }
-            },
-            650 : {
-                'a' : { 150 : 'a' },
-                'b' : { 150 : 'b' },
-                'v' : { 180 : 'v',
-                    150 : 'v',
-                    181 : 'v',
-                    182 : 'v',
-                    185 : 'v'
+                700 : {
+                    'a' : { 100 : 'a' },
+                    'd' : { 100 : 'd' },
+                    'q' : { 100 : 'q' },
+                    't' : { 100 : 't' }
                 },
-                'x' : { 180 : 'x',
-                    150 : 'x',
-                    181 : 'x',
-                    182 : 'x',
-                    185 : 'x'
+                710 : {
+                    'a' : { 110 : 'a' },
+                    'd' : { 110 : 'd' }
                 },
-                'y' : { 180 : 'y',
-                    150 : 'y',
-                    181 : 'y',
-                    182 : 'y',
-                    185 : 'y'
+                711 : {
+                    'a' : { 111 : 'a' },
+                    'c' : { 111 : 'c' },
+                    'd' : { 111 : 'd' }
                 },
-                'z' : { 180 : 'z',
-                    150 : 'z',
-                    181 : 'z',
-                    182 : 'z',
-                    185 : 'z'
-                }
-            },
-            651 : {
-                'a' : { 151 : 'a' },
-                'v' : { 180 : 'v',
-                    151 : 'v',
-                    181 : 'v',
-                    182 : 'v',
-                    185 : 'v'
+                730 : {
+                    'a' : { 130 : 'a' },
+                    'd' : { 130 : 'd' }
                 },
-                'x' : { 180 : 'x',
-                    151 : 'x',
-                    181 : 'x',
-                    182 : 'x',
-                    185 : 'x'
+                800 : {
+                    'a' : { 100 : 'a' },
+                    'd' : { 100 : 'd' }
                 },
-                'y' : { 180 : 'y',
-                    151 : 'y',
-                    181 : 'y',
-                    182 : 'y',
-                    185 : 'y'
+                810 : {
+                    'a' : { 110 : 'a' },
+                    'd' : { 110 : 'd' }
                 },
-                'z' : { 180 : 'z',
-                    151 : 'z',
-                    181 : 'z',
-                    182 : 'z',
-                    185 : 'z'
-                }
-            },
-            655 : {
-                'a' : { 155 : 'a' },
-                'v' : { 180 : 'v',
-                    155 : 'v',
-                    181 : 'v',
-                    182 : 'v',
-                    185 : 'v'
+                811 : {
+                    'a' : { 111 : 'a' },
+                    'd' : { 111 : 'd' }
+                },
+                830 : {
+                    'a' : { 130 : 'a' },
+                    'd' : { 130 : 'd' }
                 },
-                'x' : { 180 : 'x',
-                    155 : 'x',
-                    181 : 'x',
-                    182 : 'x',
-                    185 : 'x'
+                600 : {
+                    'a' : { 100 : 'a' },
+                    'd' : { 100 : 'd' },
+                    'q' : { 100 : 'q' },
+                    't' : { 100 : 't' },
+                    'v' : { 180 : 'v',
+                        100 : 'v',
+                        181 : 'v',
+                        182 : 'v',
+                        185 : 'v'
+                    },
+                    'x' : { 180 : 'x',
+                        100 : 'x',
+                        181 : 'x',
+                        182 : 'x',
+                        185 : 'x'
+                    },
+                    'y' : { 180 : 'y',
+                        100 : 'y',
+                        181 : 'y',
+                        182 : 'y',
+                        185 : 'y'
+                    },
+                    'z' : { 180 : 'z',
+                        100 : 'z',
+                        181 : 'z',
+                        182 : 'z',
+                        185 : 'z'
+                    }
                 },
-                'y' : { 180 : 'y',
-                    155 : 'y',
-                    181 : 'y',
-                    182 : 'y',
-                    185 : 'y'
+                610 : {
+                    'a' : { 110 : 'a' },
+                    'd' : { 110 : 'd' },
+                    't' : { 110 : 't' },
+                    'v' : { 180 : 'v',
+                        110 : 'v',
+                        181 : 'v',
+                        182 : 'v',
+                        185 : 'v'
+                    },
+                    'x' : { 180 : 'x',
+                        110 : 'x',
+                        181 : 'x',
+                        182 : 'x',
+                        185 : 'x'
+                    },
+                    'y' : { 180 : 'y',
+                        110 : 'y',
+                        181 : 'y',
+                        182 : 'y',
+                        185 : 'y'
+                    },
+                    'z' : { 180 : 'z',
+                        110 : 'z',
+                        181 : 'z',
+                        182 : 'z',
+                        185 : 'z'
+                    }
                 },
-                'z' : { 180 : 'z',
-                    155 : 'z',
-                    181 : 'z',
-                    182 : 'z',
-                    185 : 'z'
+                611 : {
+                    'a' : { 111 : 'a' },
+                    'd' : { 111 : 'd' },
+                    't' : { 111 : 't' },
+                    'v' : { 180 : 'v',
+                        111 : 'v',
+                        181 : 'v',
+                        182 : 'v',
+                        185 : 'v'
+                    },
+                    'x' : { 180 : 'x',
+                        111 : 'x',
+                        181 : 'x',
+                        182 : 'x',
+                        185 : 'x'
+                    },
+                    'y' : { 180 : 'y',
+                        111 : 'y',
+                        181 : 'y',
+                        182 : 'y',
+                        185 : 'y'
+                    },
+                    'z' : { 180 : 'z',
+                        111 : 'z',
+                        181 : 'z',
+                        182 : 'z',
+                        185 : 'z'
+                    }
+                },
+                630 : {
+                    'a' : { 130 : 'a' },
+                    'd' : { 130 : 'd' }
+                },
+                648 : {
+                    'a' : { 148 : 'a' },
+                    'v' : { 148 : 'v' },
+                    'x' : { 148 : 'x' },
+                    'y' : { 148 : 'y' },
+                    'z' : { 148 : 'z' }
+                },
+                650 : {
+                    'a' : { 150 : 'a' },
+                    'b' : { 150 : 'b' },
+                    'v' : { 180 : 'v',
+                        150 : 'v',
+                        181 : 'v',
+                        182 : 'v',
+                        185 : 'v'
+                    },
+                    'x' : { 180 : 'x',
+                        150 : 'x',
+                        181 : 'x',
+                        182 : 'x',
+                        185 : 'x'
+                    },
+                    'y' : { 180 : 'y',
+                        150 : 'y',
+                        181 : 'y',
+                        182 : 'y',
+                        185 : 'y'
+                    },
+                    'z' : { 180 : 'z',
+                        150 : 'z',
+                        181 : 'z',
+                        182 : 'z',
+                        185 : 'z'
+                    }
+                },
+                651 : {
+                    'a' : { 151 : 'a' },
+                    'v' : { 180 : 'v',
+                        151 : 'v',
+                        181 : 'v',
+                        182 : 'v',
+                        185 : 'v'
+                    },
+                    'x' : { 180 : 'x',
+                        151 : 'x',
+                        181 : 'x',
+                        182 : 'x',
+                        185 : 'x'
+                    },
+                    'y' : { 180 : 'y',
+                        151 : 'y',
+                        181 : 'y',
+                        182 : 'y',
+                        185 : 'y'
+                    },
+                    'z' : { 180 : 'z',
+                        151 : 'z',
+                        181 : 'z',
+                        182 : 'z',
+                        185 : 'z'
+                    }
+                },
+                655 : {
+                    'a' : { 155 : 'a' },
+                    'v' : { 180 : 'v',
+                        155 : 'v',
+                        181 : 'v',
+                        182 : 'v',
+                        185 : 'v'
+                    },
+                    'x' : { 180 : 'x',
+                        155 : 'x',
+                        181 : 'x',
+                        182 : 'x',
+                        185 : 'x'
+                    },
+                    'y' : { 180 : 'y',
+                        155 : 'y',
+                        181 : 'y',
+                        182 : 'y',
+                        185 : 'y'
+                    },
+                    'z' : { 180 : 'z',
+                        155 : 'z',
+                        181 : 'z',
+                        182 : 'z',
+                        185 : 'z'
+                    }
                 }
             }
-        };
-        
-    });
+        }
+     };
+
 }