Changeset 16250 for gli


Ignore:
Timestamp:
2008-06-30T14:46:16+12:00 (16 years ago)
Author:
ak19
Message:

For GSDLRemote case. Moved duplicate scheduling code into scheduling() method which is now only called when greenstone is NOT remote. Otherwise GLI won't allow creation of a new collection over a remote GS server.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • gli/trunk/src/org/greenstone/gatherer/collection/CollectionManager.java

    r16132 r16250  
    557557        collection.import_options.setValue("removeold", true, null);
    558558
    559         //try to obtain email address of collection owner if it exists...
    560         String stmp = Configuration.getEmail();
    561         if(stmp != null) {
    562         collection.schedule_options.setValue("toaddr", false, Configuration.getEmail());
    563         }
    564 
    565         //try to obtain email address of Greenstone installation webmaster for - used to indicate "sender".
    566         File mcfg = new File(LocalGreenstone.getDirectoryPath()+"etc" + File.separator + "main.cfg");
    567         BufferedReader maincfg = new BufferedReader(new FileReader(mcfg));     
     559        // for remote case, scheduling causes an Exception on creating a new collection that
     560        // can't be recovered from.
     561        if (!Gatherer.isGsdlRemote) {
     562        scheduling();
     563        }
     564               
     565        MetadataSetManager.clearMetadataSets();
     566        MetadataXMLFileManager.clearMetadataXMLFiles();
     567        DocXMLFileManager.clearDocXMLFiles();
     568
     569        // Import default metadata sets, if any
     570        // for (int i = 0; metadata_sets != null && i < metadata_sets.size(); i++) {
     571        // importMetadataSet((MetadataSet) metadata_sets.get(i));
     572        // }
     573
     574        ProfileXMLFileManager.loadProfileXMLFile(new File(collection_directory_path + "metadata"));
     575
     576        // Before creating the CollectionDesignManager check if we are basing it upon some other collection
     577        if (base_collection_directory != null) {
     578        DebugStream.println("Basing new collection on existing one: " + base_collection_directory);
     579
     580        // If we're using a remote Greenstone server, download the collection shell to get the files needed
     581        if (Gatherer.isGsdlRemote) {
     582            String base_collection_name = base_collection_directory.getName();
     583            RemoteGreenstoneServer.downloadCollection(base_collection_name);
     584        }
     585
     586        collection.setBaseCollection(base_collection_directory.getAbsolutePath());
     587        // copy over other needed directories
     588        copyExtraBaseCollStuff(new File(collection_directory_path), base_collection_directory);
     589
     590        // Try to import any existing metadata sets for this collection
     591        // Look in base_collection_directory/metadata and import any metadata sets found.
     592        File base_metadata_directory = new File(base_collection_directory, "metadata");
     593        ArrayList base_metadata_sets = MetadataSetManager.listMetadataSets(base_metadata_directory);
     594        if (base_metadata_sets != null) {
     595            for (int i = 0; i < base_metadata_sets.size(); i++) {
     596            importMetadataSet((MetadataSet) base_metadata_sets.get(i));
     597            }
     598        }
     599        else {
     600            DebugStream.println("This base collection has no metadata directory.");
     601        }
     602
     603        // Now we update our collect.cfg
     604        DebugStream.println("Copy and update " + file_name + " from base collection.");
     605
     606        if (Gatherer.GS3 == true) {
     607            updateCollectionConfigXML(new File(base_collection_directory, Utility.CONFIG_GS3_FILE),
     608                    new File(collection_directory_path, Utility.CONFIG_GS3_FILE));
     609        } else {
     610            updateCollectionCFG(new File(base_collection_directory, Utility.CONFIG_FILE),
     611                    new File(collection_directory_path, Utility.CONFIG_FILE),
     612                    description, email, title);
     613        }
     614        }
     615
     616        // Load the default metadata sets
     617        addDefaultMetadataSets();
     618
     619        // Make sure we always have the extracted metadata set
     620        addRequiredMetadataSets();
     621
     622        collection.cdm = new CollectionDesignManager(new File(getLoadedCollectionCfgFilePath()));
     623
     624        // We always set title and description here rather than calling mkcol.pl with Unicode arguments
     625        CollectionMeta collection_name_collectionmeta = collection.cdm.collectionmeta_manager.getMetadatum(StaticStrings.COLLECTIONMETADATA_COLLECTIONNAME_STR);
     626        collection_name_collectionmeta.setValue(title);
     627        CollectionMeta collection_extra_collectionmeta = collection.cdm.collectionmeta_manager.getMetadatum(StaticStrings.COLLECTIONMETADATA_COLLECTIONEXTRA_STR);
     628        collection_extra_collectionmeta.setValue(description);
     629
     630        // Now that we have a CDM, update several settings, such as if we created this collection by basing it on another, set it as public automatically. This update is done to the internal xml structure which may be saved into collect.cfg or collectionConfig.xml accordingly.
     631        if (base_collection_directory != null) {
     632        // Update the creator and maintainer
     633        CollectionMeta creator_collectionmeta = new CollectionMeta(collection.cdm.collect_config.getCreator());
     634        creator_collectionmeta.setValue(email);
     635        creator_collectionmeta = null;
     636        CollectionMeta maintainer_collectionmeta = new CollectionMeta(collection.cdm.collect_config.getMaintainer());
     637        maintainer_collectionmeta.setValue(email);
     638        maintainer_collectionmeta = null;
     639
     640        // All collections based on others are automatically public
     641        CollectionMeta public_collectionmeta = new CollectionMeta(collection.cdm.collect_config.getPublic());
     642        public_collectionmeta.setValue(StaticStrings.TRUE_STR);
     643        public_collectionmeta = null;
     644
     645        // Finally reset the icons
     646        CollectionMeta icon_collection_collectionmeta = collection.cdm.collectionmeta_manager.getMetadatum(StaticStrings.COLLECTIONMETADATA_ICONCOLLECTION_STR);
     647        icon_collection_collectionmeta.setValue(StaticStrings.EMPTY_STR);
     648        icon_collection_collectionmeta = null;
     649        CollectionMeta icon_collection_small_collectionmeta = collection.cdm.collectionmeta_manager.getMetadatum(StaticStrings.COLLECTIONMETADATA_ICONCOLLECTIONSMALL_STR);
     650        icon_collection_small_collectionmeta.setValue(StaticStrings.EMPTY_STR);
     651        icon_collection_small_collectionmeta = null;
     652        }
     653
     654        saveCollection();
     655
     656        // Create a lock file
     657        createLockFile(new File(collection_directory_path, LOCK_FILE));
     658
     659        // We're done. Let everyone know.
     660        Gatherer.refresh(Gatherer.COLLECTION_OPENED);
     661    }
     662    catch (Exception error) {
     663        DebugStream.printStackTrace(error);
     664    }
     665    }
     666
     667    private void scheduling()
     668    throws Exception
     669    {
     670    //try to obtain email address of collection owner if it exists...
     671    String stmp = Configuration.getEmail();
     672    if(stmp != null) {
     673        collection.schedule_options.setValue("toaddr", false, Configuration.getEmail());
     674    }
     675   
     676    //The next few items deal with updating the SMTP server, and the to: and from: addresses
     677    //from main.cfg and the collection configuration. if no changes are made, or the
     678    //values are result to NULL, any existing values are kept.
     679
     680    //try to obtain email address of Greenstone installation webmaster for - used to indicate "sender".
     681    File mcfg = new File(LocalGreenstone.getDirectoryPath() + File.separator + "etc" + File.separator + "main.cfg");
     682    BufferedReader maincfg = new BufferedReader(new FileReader(mcfg));     
    568683        stmp = "";
    569684        String fromaddr = "";
     
    598713            maincfg.close();
    599714
    600             //try if lookup failes
     715            //try if lookup fails
    601716            if(smtptmp.equals("NULL") || smtptmp.equals("null")) {
    602717        String email2=fromaddr;
     
    611726        }
    612727
    613         MetadataSetManager.clearMetadataSets();
    614         MetadataXMLFileManager.clearMetadataXMLFiles();
    615         DocXMLFileManager.clearDocXMLFiles();
    616 
    617         // Import default metadata sets, if any
    618         // for (int i = 0; metadata_sets != null && i < metadata_sets.size(); i++) {
    619         // importMetadataSet((MetadataSet) metadata_sets.get(i));
    620         // }
    621 
    622         ProfileXMLFileManager.loadProfileXMLFile(new File(collection_directory_path + "metadata"));
    623 
    624         // Before creating the CollectionDesignManager check if we are basing it upon some other collection
    625         if (base_collection_directory != null) {
    626         DebugStream.println("Basing new collection on existing one: " + base_collection_directory);
    627 
    628         // If we're using a remote Greenstone server, download the collection shell to get the files needed
    629         if (Gatherer.isGsdlRemote) {
    630             String base_collection_name = base_collection_directory.getName();
    631             RemoteGreenstoneServer.downloadCollection(base_collection_name);
    632         }
    633 
    634         collection.setBaseCollection(base_collection_directory.getAbsolutePath());
    635         // copy over other needed directories
    636         copyExtraBaseCollStuff(new File(collection_directory_path), base_collection_directory);
    637 
    638         // Try to import any existing metadata sets for this collection
    639         // Look in base_collection_directory/metadata and import any metadata sets found.
    640         File base_metadata_directory = new File(base_collection_directory, "metadata");
    641         ArrayList base_metadata_sets = MetadataSetManager.listMetadataSets(base_metadata_directory);
    642         if (base_metadata_sets != null) {
    643             for (int i = 0; i < base_metadata_sets.size(); i++) {
    644             importMetadataSet((MetadataSet) base_metadata_sets.get(i));
    645             }
    646         }
    647         else {
    648             DebugStream.println("This base collection has no metadata directory.");
    649         }
    650 
    651         // Now we update our collect.cfg
    652         DebugStream.println("Copy and update " + file_name + " from base collection.");
    653 
    654         if (Gatherer.GS3 == true) {
    655             updateCollectionConfigXML(new File(base_collection_directory, Utility.CONFIG_GS3_FILE),
    656                     new File(collection_directory_path, Utility.CONFIG_GS3_FILE));
    657         } else {
    658             updateCollectionCFG(new File(base_collection_directory, Utility.CONFIG_FILE),
    659                     new File(collection_directory_path, Utility.CONFIG_FILE),
    660                     description, email, title);
    661         }
    662         }
    663 
    664         // Load the default metadata sets
    665         addDefaultMetadataSets();
    666 
    667         // Make sure we always have the extracted metadata set
    668         addRequiredMetadataSets();
    669 
    670         collection.cdm = new CollectionDesignManager(new File(getLoadedCollectionCfgFilePath()));
    671 
    672         // We always set title and description here rather than calling mkcol.pl with Unicode arguments
    673         CollectionMeta collection_name_collectionmeta = collection.cdm.collectionmeta_manager.getMetadatum(StaticStrings.COLLECTIONMETADATA_COLLECTIONNAME_STR);
    674         collection_name_collectionmeta.setValue(title);
    675         CollectionMeta collection_extra_collectionmeta = collection.cdm.collectionmeta_manager.getMetadatum(StaticStrings.COLLECTIONMETADATA_COLLECTIONEXTRA_STR);
    676         collection_extra_collectionmeta.setValue(description);
    677 
    678         // Now that we have a CDM, update several settings, such as if we created this collection by basing it on another, set it as public automatically. This update is done to the internal xml structure which may be saved into collect.cfg or collectionConfig.xml accordingly.
    679         if (base_collection_directory != null) {
    680         // Update the creator and maintainer
    681         CollectionMeta creator_collectionmeta = new CollectionMeta(collection.cdm.collect_config.getCreator());
    682         creator_collectionmeta.setValue(email);
    683         creator_collectionmeta = null;
    684         CollectionMeta maintainer_collectionmeta = new CollectionMeta(collection.cdm.collect_config.getMaintainer());
    685         maintainer_collectionmeta.setValue(email);
    686         maintainer_collectionmeta = null;
    687 
    688         // All collections based on others are automatically public
    689         CollectionMeta public_collectionmeta = new CollectionMeta(collection.cdm.collect_config.getPublic());
    690         public_collectionmeta.setValue(StaticStrings.TRUE_STR);
    691         public_collectionmeta = null;
    692 
    693         // Finally reset the icons
    694         CollectionMeta icon_collection_collectionmeta = collection.cdm.collectionmeta_manager.getMetadatum(StaticStrings.COLLECTIONMETADATA_ICONCOLLECTION_STR);
    695         icon_collection_collectionmeta.setValue(StaticStrings.EMPTY_STR);
    696         icon_collection_collectionmeta = null;
    697         CollectionMeta icon_collection_small_collectionmeta = collection.cdm.collectionmeta_manager.getMetadatum(StaticStrings.COLLECTIONMETADATA_ICONCOLLECTIONSMALL_STR);
    698         icon_collection_small_collectionmeta.setValue(StaticStrings.EMPTY_STR);
    699         icon_collection_small_collectionmeta = null;
    700         }
    701 
    702         saveCollection();
    703 
    704         // Create a lock file
    705         createLockFile(new File(collection_directory_path, LOCK_FILE));
    706 
    707         // We're done. Let everyone know.
    708         Gatherer.refresh(Gatherer.COLLECTION_OPENED);
    709     }
    710     catch (Exception error) {
    711         DebugStream.printStackTrace(error);
    712     }
    713728    }
    714729
     
    11981213        return;
    11991214        }
    1200 
    1201         //THIS LOOKS LIKE THE BEST PLACE TO TRY AND UPDATE .col FILES FOR EXISTING COLLECTIONS...Wendy
     1215       
     1216        if (!Gatherer.isGsdlRemote) {
     1217        //THIS LOOKS LIKE THE BEST PLACE TO TRY AND UPDATE .col FILES FOR EXISTING COLLECTIONS...Wendy
    12021218 
    1203         //First, see if "Schedule" exists in the XMl File...
    1204         BufferedReader bir = new BufferedReader(new FileReader(collection_file));
    1205         boolean flag = false;
    1206         try {
    1207         String stmp = new String();
     1219        //First, see if "Schedule" exists in the XMl File...
     1220        BufferedReader bir = new BufferedReader(new FileReader(collection_file));
     1221        boolean flag = false;
     1222        try {
     1223            String stmp = new String();
    12081224           
    1209         while((stmp = bir.readLine()) != null) {
    1210             stmp = stmp.trim(); 
    1211             if(stmp.equals("<Schedule>") || stmp.equals("<Schedule/>")) {
    1212                flag = true;
    1213                break;
     1225            while((stmp = bir.readLine()) != null) {
     1226            stmp = stmp.trim(); 
     1227            if(stmp.equals("<Schedule>") || stmp.equals("<Schedule/>")) {
     1228                flag = true;
     1229                break;
     1230            }
    12141231            }
    1215         }
    1216         bir.close();
    1217 
    1218         } catch (IOException ioe) {
    1219         //do something here
    1220         }
    1221 
    1222         //modify if old .col (i.e. no Schedule exists in XML file)
    1223         if(!flag) {
    1224         File new_collection_file = new File(collection_directory.getAbsolutePath() + "/tmp.col");
    1225 
    1226 
    1227         BufferedWriter bor = new BufferedWriter(new FileWriter(new_collection_file));
    1228         bir = new BufferedReader(new FileReader(collection_file));
    1229 
    1230         try {
    1231             String stmp = new String();
    1232             while((stmp = bir.readLine()) != null) {
    1233             String stmp2 = stmp.trim();
    1234             if(stmp2.startsWith("<!ELEMENT Argument")) {
    1235                 bor.write("  <!ELEMENT Schedule          (Arguments*)>\n");               
    1236                 }
    1237                         else if(stmp2.equals("</BuildConfig>")) {
    1238                                bor.write("      <Schedule/>\n");
    1239                         }
    1240 
    1241                         bor.write(stmp + "\n");
    1242 
     1232            bir.close();
     1233           
     1234        } catch (IOException ioe) {
     1235            Debug.printStackTrace(ioe);
     1236        }
     1237       
     1238        //modify if old .col (i.e. no Schedule exists in XML file)
     1239        if(!flag) {
     1240            File new_collection_file = new File(collection_directory.getAbsolutePath() + "/tmp.col");
     1241           
     1242           
     1243            BufferedWriter bor = new BufferedWriter(new FileWriter(new_collection_file));
     1244            bir = new BufferedReader(new FileReader(collection_file));
     1245           
     1246            try {
     1247            String stmp = new String();
     1248            while((stmp = bir.readLine()) != null) {
     1249                String stmp2 = stmp.trim();
     1250                if(stmp2.startsWith("<!ELEMENT Argument")) {
     1251                bor.write("  <!ELEMENT Schedule          (Arguments*)>\n");               
     1252                }
     1253                else if(stmp2.equals("</BuildConfig>")) {
     1254                bor.write("      <Schedule/>\n");
     1255                }
     1256               
     1257                bor.write(stmp + "\n");
     1258               
     1259            }
     1260            bir.close();
     1261            bor.close();
     1262            } catch (IOException ioe) { 
     1263            Debug.printStackTrace(ioe);
     1264            } 
     1265           
     1266            //copy over tmp.col to replace
     1267            try {
     1268            collection_file.delete();
     1269            new_collection_file.renameTo(collection_file);
     1270            } catch (Exception e) {
     1271            Debug.printStackTrace(ioe);
     1272            }
     1273        }
     1274       
     1275        // Open the collection file
     1276        this.collection = new Collection(collection_file);
     1277        if (collection.error) {
     1278            collection = null;
     1279            // Remove lock file
     1280            if (lock_file.exists()) {
     1281            lock_file.delete();
    12431282            }
    1244                     bir.close();
    1245                     bor.close();
    1246                 } catch (IOException ioe) { 
    1247                   //do something here
    1248                 } 
    1249 
    1250         //copy over tmp.col to replace
    1251         try {
    1252         collection_file.delete();
    1253         new_collection_file.renameTo(collection_file);
    1254         } catch (Exception e) {
    1255             //do something here
    1256         }
    1257         }
    1258 
    1259         // Open the collection file
    1260         this.collection = new Collection(collection_file);
    1261         if (collection.error) {
    1262         collection = null;
    1263         // Remove lock file
    1264         if (lock_file.exists()) {
    1265             lock_file.delete();
    1266         }
    1267         throw(new Exception(Dictionary.get("CollectionManager.Missing_Config"))); // this error message does not agree with the error
    1268         }
    1269 
    1270 
    1271         //try to obtain email address of collection owner if it exists...
    1272         String stmp = Configuration.getEmail();
    1273         if(stmp != null) {
    1274         collection.schedule_options.setValue("toaddr", false, Configuration.getEmail());
    1275         }
    1276 
    1277 
    1278 
    1279         //The next few items deal with updating the SMTP server, and the to: and from: addresses
    1280         //from main.cfg and the collection configuration. if no changes are made, or the
    1281         //values are result to NULL, any existing values are kept.
    1282 
    1283         //try to obtain email address of Greenstone installation webmaster for - used to indicate "sender".
    1284         File mcfg = new File(LocalGreenstone.getDirectoryPath()+"etc" + File.separator + "main.cfg");
    1285         BufferedReader maincfg = new BufferedReader(new FileReader(mcfg));     
    1286         stmp = "";
    1287         String fromaddr = "";
    1288         while((stmp = maincfg.readLine()) != null) {
    1289         if(stmp.startsWith("maintainer")) {
    1290                fromaddr = stmp.substring(10); //length of MailServer
    1291            fromaddr = fromaddr.trim(); 
    1292            break;
    1293         }
    1294         }
    1295         maincfg.close();
    1296         if(!fromaddr.equals("NULL") && !fromaddr.equals("null")) {
    1297         collection.schedule_options.setValue("fromaddr", false, fromaddr);     
    1298         }
    1299 
    1300         //try to obtain an smtp server address from main.cfg. If that fails,
    1301         //try mail.server if an email address exists. If that fails,
    1302         //maybe a message to set attribute in main.cfg?
    1303         //i'm pretty sure there exists functionality to do this, but
    1304         //i'll finish this faster if I just wrote it
    1305 
    1306 
    1307         maincfg = new BufferedReader(new FileReader(mcfg));       
    1308         String smtptmp = "NULL";
    1309         while((stmp = maincfg.readLine()) != null) {
    1310         if(stmp.startsWith("MailServer")) {
    1311                smtptmp = stmp.substring(10); //length of MailServer
    1312            smtptmp = smtptmp.trim();
    1313            break;
    1314         }
    1315         }
    1316             maincfg.close();
    1317 
    1318             //try if lookup failes
    1319             if(smtptmp.equals("NULL") || smtptmp.equals("null")) {
    1320         String email2=fromaddr;
    1321         if(!email2.equals("NULL") && !email2.equals("null")) {
    1322             int loc = email2.indexOf('@');
    1323             email2 = email2.substring(loc+1);
    1324             smtptmp = "mail."+email2;
    1325             }
    1326             }
    1327         if(!smtptmp.equals("NULL") && !smtptmp.equals("null")) {
    1328         collection.schedule_options.setValue("smtp", false, smtptmp);
    1329         }
    1330 
    1331 
     1283            throw(new Exception(Dictionary.get("CollectionManager.Missing_Config"))); // this error message does not agree with the error
     1284        }
     1285       
     1286        scheduling();
     1287        }
     1288     
    13321289            MetadataSetManager.clearMetadataSets();
    13331290        MetadataSetManager.loadMetadataSets(collection_metadata_directory);
Note: See TracChangeset for help on using the changeset viewer.