From: <yo...@us...> - 2009-11-17 04:29:00
|
Revision: 271 http://treebase.svn.sourceforge.net/treebase/?rev=271&view=rev Author: youjun Date: 2009-11-17 04:28:48 +0000 (Tue, 17 Nov 2009) Log Message: ----------- optimize templates Modified Paths: -------------- trunk/oai-pmh_data_provider/data_provider_web/src/main/java/org/treebase/oai/web/command/OAIPMHCommand.java trunk/oai-pmh_data_provider/data_provider_web/src/main/java/org/treebase/oai/web/controller/OAIPMHController.java trunk/oai-pmh_data_provider/data_provider_web/src/main/webapp/WEB-INF/vmFiles/Identify.vm trunk/oai-pmh_data_provider/data_provider_web/src/main/webapp/WEB-INF/vmFiles/ListMetadataFormats.vm trunk/oai-pmh_data_provider/data_provider_web/src/main/webapp/WEB-INF/vmFiles/ListSets.vm trunk/oai-pmh_data_provider/data_provider_web/src/main/webapp/WEB-INF/vmFiles/oai_dc_ListIdentifiers.vm trunk/oai-pmh_data_provider/data_provider_web/src/test/java/org/treebase/oai/web/controller/OAIPMHControllerTest.java trunk/oai-pmh_data_provider/data_provider_web/src/test/resources/Identify.vm trunk/oai-pmh_data_provider/data_provider_web/src/test/resources/ListMetadataFormats.vm trunk/oai-pmh_data_provider/data_provider_web/src/test/resources/ListSets.vm trunk/oai-pmh_data_provider/data_provider_web/src/test/resources/oai_dc_ListIdentifiers.vm Added Paths: ----------- trunk/oai-pmh_data_provider/data_provider_web/src/main/webapp/WEB-INF/vmFiles/GetRecord.vm trunk/oai-pmh_data_provider/data_provider_web/src/main/webapp/WEB-INF/vmFiles/ListRecords.vm trunk/oai-pmh_data_provider/data_provider_web/src/main/webapp/WEB-INF/vmFiles/error.vm trunk/oai-pmh_data_provider/data_provider_web/src/main/webapp/WEB-INF/vmFiles/head.vm trunk/oai-pmh_data_provider/data_provider_web/src/main/webapp/WEB-INF/vmFiles/oai_dc_record.vm trunk/oai-pmh_data_provider/data_provider_web/src/test/resources/GetRecord.vm trunk/oai-pmh_data_provider/data_provider_web/src/test/resources/ListRecords.vm trunk/oai-pmh_data_provider/data_provider_web/src/test/resources/error.vm trunk/oai-pmh_data_provider/data_provider_web/src/test/resources/head.vm trunk/oai-pmh_data_provider/data_provider_web/src/test/resources/oai_dc_record.vm Removed Paths: ------------- trunk/oai-pmh_data_provider/data_provider_web/src/main/webapp/WEB-INF/vmFiles/badArgument.vm trunk/oai-pmh_data_provider/data_provider_web/src/main/webapp/WEB-INF/vmFiles/badVerb.vm trunk/oai-pmh_data_provider/data_provider_web/src/main/webapp/WEB-INF/vmFiles/cannotDisseminateFormat.vm trunk/oai-pmh_data_provider/data_provider_web/src/main/webapp/WEB-INF/vmFiles/idDoesNotExist.vm trunk/oai-pmh_data_provider/data_provider_web/src/main/webapp/WEB-INF/vmFiles/oai_dc_GetRecord.vm trunk/oai-pmh_data_provider/data_provider_web/src/main/webapp/WEB-INF/vmFiles/oai_dc_ListRecords.vm trunk/oai-pmh_data_provider/data_provider_web/src/test/resources/badArgument.vm trunk/oai-pmh_data_provider/data_provider_web/src/test/resources/badVerb.vm trunk/oai-pmh_data_provider/data_provider_web/src/test/resources/cannotDisseminateFormat.vm trunk/oai-pmh_data_provider/data_provider_web/src/test/resources/idDoesNotExist.vm trunk/oai-pmh_data_provider/data_provider_web/src/test/resources/oai_dc_GetRecord.vm trunk/oai-pmh_data_provider/data_provider_web/src/test/resources/oai_dc_ListRecords.vm Modified: trunk/oai-pmh_data_provider/data_provider_web/src/main/java/org/treebase/oai/web/command/OAIPMHCommand.java =================================================================== --- trunk/oai-pmh_data_provider/data_provider_web/src/main/java/org/treebase/oai/web/command/OAIPMHCommand.java 2009-11-16 21:31:12 UTC (rev 270) +++ trunk/oai-pmh_data_provider/data_provider_web/src/main/java/org/treebase/oai/web/command/OAIPMHCommand.java 2009-11-17 04:28:48 UTC (rev 271) @@ -20,17 +20,27 @@ public void setVerb(String verb) { this.verb = verb; } - public String getFrom() { + public String getModifiedFrom() { if(from!=null&&from.trim()!="")return from; return "1995-11-04T00:00:00Z"; } + + public String getFrom() { + return from; + } + public void setFrom(String from) { this.from = from; } - public String getUntil() { + public String getModifiedUntil() { if(until != null && until.trim()!="") return until; return ""; } + + public String getUntil() { + return until; + } + public void setUntil(String until) { this.until = until; } Modified: trunk/oai-pmh_data_provider/data_provider_web/src/main/java/org/treebase/oai/web/controller/OAIPMHController.java =================================================================== --- trunk/oai-pmh_data_provider/data_provider_web/src/main/java/org/treebase/oai/web/controller/OAIPMHController.java 2009-11-16 21:31:12 UTC (rev 270) +++ trunk/oai-pmh_data_provider/data_provider_web/src/main/java/org/treebase/oai/web/controller/OAIPMHController.java 2009-11-17 04:28:48 UTC (rev 271) @@ -82,21 +82,32 @@ model.put("identify", this.identify); if(errors.getErrorCount()>0){ - if(errors.hasFieldErrors("metadataPrefix")) - return new ModelAndView("cannotDisseminateFormat.vm",model); - if(errors.hasFieldErrors("verb")) - return new ModelAndView("badVerb.vm",model); - if(errors.hasFieldErrors("identifier")) - return new ModelAndView("idDoesNotExist.vm",model); + if(errors.hasFieldErrors("metadataPrefix")){ + model.put("error_code", "cannotDisseminateFormat"); + model.put("error", "bad metadataPrefix"); + return new ModelAndView("error.vm",model); + } + if(errors.hasFieldErrors("verb")){ + model.put("error_code", "badVerb"); + model.put("error", "no verb was found"); + return new ModelAndView("error.vm",model); + } + if(errors.hasFieldErrors("identifier")){ + model.put("error_code", "idDoesNotExist"); + model.put("error", "no id was found"); + return new ModelAndView("error.vm",model); + } } Method method=null; try{ method=this.getClass().getMethod(params.getVerb(), new Class[]{OAIPMHCommand.class, Map.class}); - }catch(NoSuchMethodException nsme){ - return new ModelAndView("badVerb.vm",model); + }catch(NoSuchMethodException nsme){ + model.put("error_code", "badVerb"); + model.put("error", "invalid verb"); + return new ModelAndView("error.vm",model); }catch(NullPointerException e){ - return (new ModelAndView("badArgument.vm",model)); + return (new ModelAndView("error.vm",model)); } return (ModelAndView) method.invoke(this, params, model); @@ -107,14 +118,15 @@ List<Submission> list=null; try { - list = (List)submissionService.findSubmissionByCreateDateRange(IdentifyUtil.parseGranularity(identify.getGranularityPattern(),params.getFrom()), - IdentifyUtil.parseGranularity(identify.getGranularityPattern(),params.getUntil())); + list = (List)submissionService.findSubmissionByCreateDateRange(IdentifyUtil.parseGranularity(identify.getGranularityPattern(),params.getModifiedFrom()), + IdentifyUtil.parseGranularity(identify.getGranularityPattern(),params.getModifiedUntil())); } catch (ParseException e) { - // TODO Auto-generated catch block - return (new ModelAndView("badArgument.vm",model)); + model.put("error_code", "badArgument"); + model.put("error", "invalid from or until format"); + return (new ModelAndView("error.vm",model)); } model.put("recordList", getRecordList(list)); - return (new ModelAndView(params.getMetadataPrefix()+"_ListRecords.vm",model)); + return (new ModelAndView("ListRecords.vm",model)); } @@ -123,11 +135,12 @@ List<Submission> list=null; try { - list = (List)submissionService.findSubmissionByCreateDateRange(IdentifyUtil.parseGranularity(identify.getGranularityPattern(),params.getFrom()), - IdentifyUtil.parseGranularity(identify.getGranularityPattern(), params.getUntil())); + list = (List)submissionService.findSubmissionByCreateDateRange(IdentifyUtil.parseGranularity(identify.getGranularityPattern(),params.getModifiedFrom()), + IdentifyUtil.parseGranularity(identify.getGranularityPattern(), params.getModifiedUntil())); } catch (ParseException e) { - // TODO Auto-generated catch block - return (new ModelAndView("badArgument.vm",model)); + model.put("error_code", "badArgument"); + model.put("error", "invalid from or until format"); + return (new ModelAndView("error.vm",model)); } model.put("recordList", getRecordList(list)); return (new ModelAndView(params.getMetadataPrefix()+"_ListIdentifiers.vm",model)); @@ -142,14 +155,20 @@ long id = IdentifyUtil.parseID(params); submission = studyService.findByID(id).getSubmission(); }catch(NumberFormatException nfe){ - return (new ModelAndView("badArgument.vm",model)); + model.put("error_code", "badArgument"); + model.put("error", "invalid id format"); + return (new ModelAndView("error.vm",model)); + } catch (NullPointerException e){ - return (new ModelAndView("idDoesNotExist.vm",model)); + model.put("error_code", "idDoesNotExist"); + model.put("error", "invalid id"); + return (new ModelAndView("error.vm",model)); + } model.put("record", getRecordMap(submission)); - return (new ModelAndView(params.getMetadataPrefix()+"_GetRecord.vm",model)); + return (new ModelAndView("GetRecord.vm",model)); } @@ -161,9 +180,10 @@ } ModelAndView ListSets(OAIPMHCommand params, Map model){ + model.put("error_code", "noSetHierarchy"); + model.put("error", "This repository does not support sets"); + return (new ModelAndView("error.vm",model)); - return (new ModelAndView("ListSets.vm",model)); - } ModelAndView ListMetadataFormats(OAIPMHCommand params, Map model){ @@ -174,7 +194,10 @@ long id = IdentifyUtil.parseID(params); submission = studyService.findByID(id).getSubmission(); }catch(NumberFormatException nfe){ - return (new ModelAndView("badArgument.vm",model)); + model.put("error_code", "badArgument"); + model.put("error", "invalid id format"); + return (new ModelAndView("error.vm",model)); + } catch (NullPointerException e){ //id is optional for ListMetadataFormats Added: trunk/oai-pmh_data_provider/data_provider_web/src/main/webapp/WEB-INF/vmFiles/GetRecord.vm =================================================================== --- trunk/oai-pmh_data_provider/data_provider_web/src/main/webapp/WEB-INF/vmFiles/GetRecord.vm (rev 0) +++ trunk/oai-pmh_data_provider/data_provider_web/src/main/webapp/WEB-INF/vmFiles/GetRecord.vm 2009-11-17 04:28:48 UTC (rev 271) @@ -0,0 +1,7 @@ +#parse("head.vm") +<GetRecord> +#if($!model.params.metadataPrefix=="oai_dc") +#parse("oai_dc_record.vm") +#end +</GetRecord> +</OAI-PMH> Modified: trunk/oai-pmh_data_provider/data_provider_web/src/main/webapp/WEB-INF/vmFiles/Identify.vm =================================================================== --- trunk/oai-pmh_data_provider/data_provider_web/src/main/webapp/WEB-INF/vmFiles/Identify.vm 2009-11-16 21:31:12 UTC (rev 270) +++ trunk/oai-pmh_data_provider/data_provider_web/src/main/webapp/WEB-INF/vmFiles/Identify.vm 2009-11-17 04:28:48 UTC (rev 271) @@ -1,10 +1,4 @@ -<?xml version="1.0" encoding="UTF-8"?> -<OAI-PMH xmlns="http://www.openarchives.org/OAI/2.0/" - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/ - http://www.openarchives.org/OAI/2.0/OAI-PMH.xsd"> - <responseDate>${model.identify.getResponseDate()}</responseDate> - <request verb="Identify">${model.identify.baseRUL}</request> +#parse("head.vm") <Identify> <repositoryName>${model.identify.repositoryName}</repositoryName> <baseURL>${model.identify.baseURL}</baseURL> @@ -26,7 +20,6 @@ <delimiter>${model.identify.identifierDelimiter}</delimiter> <sampleIdentifier>${model.identify.sampleIdentifier}</sampleIdentifier> </oai-identifier> - </description> - + </description> </Identify> </OAI-PMH> Modified: trunk/oai-pmh_data_provider/data_provider_web/src/main/webapp/WEB-INF/vmFiles/ListMetadataFormats.vm =================================================================== --- trunk/oai-pmh_data_provider/data_provider_web/src/main/webapp/WEB-INF/vmFiles/ListMetadataFormats.vm 2009-11-16 21:31:12 UTC (rev 270) +++ trunk/oai-pmh_data_provider/data_provider_web/src/main/webapp/WEB-INF/vmFiles/ListMetadataFormats.vm 2009-11-17 04:28:48 UTC (rev 271) @@ -1,12 +1,4 @@ -<?xml version="1.0" encoding="UTF-8"?> -<OAI-PMH xmlns="http://www.openarchives.org/OAI/2.0/" - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/ - http://www.openarchives.org/OAI/2.0/OAI-PMH.xsd"> - - <responseDate>${model.identify.getResponseDate()}</responseDate> - <request verb="ListMetadataFormats" - identifier="${model.params.identifier}">${model.identify.baseURL}</request> +#parse("head.vm") <ListMetadataFormats> <metadataFormat> <metadataPrefix>oai_dc</metadataPrefix> Added: trunk/oai-pmh_data_provider/data_provider_web/src/main/webapp/WEB-INF/vmFiles/ListRecords.vm =================================================================== --- trunk/oai-pmh_data_provider/data_provider_web/src/main/webapp/WEB-INF/vmFiles/ListRecords.vm (rev 0) +++ trunk/oai-pmh_data_provider/data_provider_web/src/main/webapp/WEB-INF/vmFiles/ListRecords.vm 2009-11-17 04:28:48 UTC (rev 271) @@ -0,0 +1,9 @@ +#parse("head.vm") +<ListRecords> +#if($!model.params.metadataPrefix=="oai_dc") +#foreach($record in $model.recordList) +#parse("oai_dc_record.vm") +#end +#end +</ListRecords> +</OAI-PMH> Modified: trunk/oai-pmh_data_provider/data_provider_web/src/main/webapp/WEB-INF/vmFiles/ListSets.vm =================================================================== --- trunk/oai-pmh_data_provider/data_provider_web/src/main/webapp/WEB-INF/vmFiles/ListSets.vm 2009-11-16 21:31:12 UTC (rev 270) +++ trunk/oai-pmh_data_provider/data_provider_web/src/main/webapp/WEB-INF/vmFiles/ListSets.vm 2009-11-17 04:28:48 UTC (rev 271) @@ -1,10 +1,3 @@ -<?xml version="1.0" encoding="UTF-8"?> -<OAI-PMH xmlns="http://www.openarchives.org/OAI/2.0/" - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/ - http://www.openarchives.org/OAI/2.0/OAI-PMH.xsd"> - <responseDate>${model.identify.responseDate}</responseDate> - <request verb="ListSets">${model.identify.baseURL}</request> - <error code="noSetHierarchy">This repository does not - support sets</error> +#parse("head.vm") + <error code="noSetHierarchy">This repository does not support sets</error> </OAI-PMH> Added: trunk/oai-pmh_data_provider/data_provider_web/src/main/webapp/WEB-INF/vmFiles/error.vm =================================================================== --- trunk/oai-pmh_data_provider/data_provider_web/src/main/webapp/WEB-INF/vmFiles/error.vm (rev 0) +++ trunk/oai-pmh_data_provider/data_provider_web/src/main/webapp/WEB-INF/vmFiles/error.vm 2009-11-17 04:28:48 UTC (rev 271) @@ -0,0 +1,3 @@ +#parse("head.vm") +<error code="$!model.error_code">$!model.error</error> +</OAI-PMH> Added: trunk/oai-pmh_data_provider/data_provider_web/src/main/webapp/WEB-INF/vmFiles/head.vm =================================================================== --- trunk/oai-pmh_data_provider/data_provider_web/src/main/webapp/WEB-INF/vmFiles/head.vm (rev 0) +++ trunk/oai-pmh_data_provider/data_provider_web/src/main/webapp/WEB-INF/vmFiles/head.vm 2009-11-17 04:28:48 UTC (rev 271) @@ -0,0 +1,14 @@ +<?xml version="1.0" encoding="UTF-8"?> +<OAI-PMH xmlns="http://www.openarchives.org/OAI/2.0/" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/ + http://www.openarchives.org/OAI/2.0/OAI-PMH.xsd"> +<responseDate>${model.identify.getResponseDate()}</responseDate> +<request #if($!model.params.verb)verb="$!model.params.verb" #end +#if($!model.params.identifier)identifier="$!model.params.identifier" #end +#if($!model.params.metadataPrefix)metadataPrefix="$!model.params.metadataPrefix" #end +#if($!model.params.from)from="$!model.params.from" #end +#if($!model.params.until)until="$!model.params.until" #end +#if($!model.params.resumptionToken)resumptionToken="$!model.params.resumptionToken" #end +#if($!model.params.set)set="$!model.params.set" #end> +$!model.identify.BaseURL</request> Deleted: trunk/oai-pmh_data_provider/data_provider_web/src/main/webapp/WEB-INF/vmFiles/idDoesNotExist.vm =================================================================== --- trunk/oai-pmh_data_provider/data_provider_web/src/main/webapp/WEB-INF/vmFiles/idDoesNotExist.vm 2009-11-16 21:31:12 UTC (rev 270) +++ trunk/oai-pmh_data_provider/data_provider_web/src/main/webapp/WEB-INF/vmFiles/idDoesNotExist.vm 2009-11-17 04:28:48 UTC (rev 271) @@ -1 +0,0 @@ -id not exist \ No newline at end of file Deleted: trunk/oai-pmh_data_provider/data_provider_web/src/main/webapp/WEB-INF/vmFiles/oai_dc_GetRecord.vm =================================================================== --- trunk/oai-pmh_data_provider/data_provider_web/src/main/webapp/WEB-INF/vmFiles/oai_dc_GetRecord.vm 2009-11-16 21:31:12 UTC (rev 270) +++ trunk/oai-pmh_data_provider/data_provider_web/src/main/webapp/WEB-INF/vmFiles/oai_dc_GetRecord.vm 2009-11-17 04:28:48 UTC (rev 271) @@ -1,76 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<OAI-PMH xmlns="http://www.openarchives.org/OAI/2.0/" - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/ - http://www.openarchives.org/OAI/2.0/OAI-PMH.xsd"> - <responseDate>${model.identify.getResponseDate()}</responseDate> - <request verb="GetRecord" identifier="${model.params.identifier}" - metadataPrefix="oai_dc">${model.identify.BaseURL}</request> - <GetRecord> - <record> - <header> - <identifier>${model.record.identifier}</identifier> - <datestamp>$!model.record.datestamp</datestamp> - </header> - <metadata> - <oai_dc:dc - xmlns:oai_dc="http://www.openarchives.org/OAI/2.0/oai_dc/" - xmlns:dc="http://purl.org/dc/elements/1.1/" - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/oai_dc/ - http://www.openarchives.org/OAI/2.0/oai_dc.xsd"> - #if($model.record.title) - <dc:title>${model.record.title}</dc:title> - #end - #if($model.record.creator) - #foreach ($person in $model.record.creator) - <dc:creator>${person.lastName}, ${person.firstName}</dc:creator> - #end - #end - #if($model.record.subject) - <dc:subject>${model.record.subject}</dc:subject> - #end - #if($model.record.description) - <dc:description>${model.record.description}</dc:description> - #end - #if($model.record.publisher) - <dc:publisher>${model.record.publisher}</dc:publisher> - #end - #if($model.record.contributor) - <dc:contributor>${model.record.contributor}</dc:contributor> - #end - #if($model.record.date) - <dc:date>${model.record.date}</dc:date> - #end - #if($model.record.type) - <dc:type>${model.record.type}</dc:type> - #end - #if($model.record.format) - <dc:format>${model.record.format}</dc:format> - #end - - ##if($model.record.identifier) - ##<dc:identifier>${model.record.identifier}</dc:identifier> - ##end - - #if($model.record.source) - <dc:source>{model.record.source}</dc:source> - #end - #if($model.record.language) - <dc:language>${model.record.language}</dc:language> - #end - #if($model.record.relation) - <dc:relation>${model.record.relation}</dc:relation> - #end - #if($model.record.coverage) - <dc:coverage>${model.record.coverage}</dc:coverage> - #end - #if($model.record.rights) - <dc:rights>${model.record.rights}</dc:rights> - #end - </oai_dc:dc> - - </metadata> - </record> - </GetRecord> -</OAI-PMH> Modified: trunk/oai-pmh_data_provider/data_provider_web/src/main/webapp/WEB-INF/vmFiles/oai_dc_ListIdentifiers.vm =================================================================== --- trunk/oai-pmh_data_provider/data_provider_web/src/main/webapp/WEB-INF/vmFiles/oai_dc_ListIdentifiers.vm 2009-11-16 21:31:12 UTC (rev 270) +++ trunk/oai-pmh_data_provider/data_provider_web/src/main/webapp/WEB-INF/vmFiles/oai_dc_ListIdentifiers.vm 2009-11-17 04:28:48 UTC (rev 271) @@ -1,19 +1,10 @@ -<?xml version="1.0" encoding="UTF-8"?> -<OAI-PMH xmlns="http://www.openarchives.org/OAI/2.0/" - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/ - http://www.openarchives.org/OAI/2.0/OAI-PMH.xsd"> - <responseDate>${model.identify.getResponseDate()}</responseDate> - <request verb="ListIdentifiers" from="${model.params.from}" - until="$!model.params.until" - metadataPrefix="${model.params.metadataPrefix}"> - ${model.identify.BaseURL}</request> - <ListIdentifiers> - #foreach ( $record in $model.recordList) - <header> - <identifier>${record.identifier}</identifier> - <datestamp>$!record.datestamp</datestamp> - </header> - #end - </ListIdentifiers> +#parse("head.vm") +<ListIdentifiers> +#foreach ( $record in $model.recordList) +<header> +<identifier>${record.identifier}</identifier> +<datestamp>$!record.datestamp</datestamp> +</header> +#end +</ListIdentifiers> </OAI-PMH> Deleted: trunk/oai-pmh_data_provider/data_provider_web/src/main/webapp/WEB-INF/vmFiles/oai_dc_ListRecords.vm =================================================================== --- trunk/oai-pmh_data_provider/data_provider_web/src/main/webapp/WEB-INF/vmFiles/oai_dc_ListRecords.vm 2009-11-16 21:31:12 UTC (rev 270) +++ trunk/oai-pmh_data_provider/data_provider_web/src/main/webapp/WEB-INF/vmFiles/oai_dc_ListRecords.vm 2009-11-17 04:28:48 UTC (rev 271) @@ -1,77 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<OAI-PMH xmlns="http://www.openarchives.org/OAI/2.0/" - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/ - http://www.openarchives.org/OAI/2.0/OAI-PMH.xsd"> - <responseDate>${model.identify.getResponseDate()}</responseDate> - <request verb="ListRecords" from="${model.params.from}" - until="${model.params.from}" metadataPrefix="${model.params.metadataPrefix}"> - ${model.identify.BaseURL}</request> - <ListRecords> - #foreach ( $record in $model.recordList) - <record> - <header> - <identifier>${record.identifier}</identifier> - <datestamp>$!record.datestamp</datestamp> - </header> - <metadata> - <oai_dc:dc - xmlns:oai_dc="http://www.openarchives.org/OAI/2.0/oai_dc/" - xmlns:dc="http://purl.org/dc/elements/1.1/" - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/oai_dc/ - http://www.openarchives.org/OAI/2.0/oai_dc.xsd"> - #if($record.title) - <dc:title>${record.title}</dc:title> - #end - #if($record.creator) - #foreach ($person in $record.creator) - <dc:creator>${person.lastName}, ${person.firstName}</dc:creator> - #end - #end - #if($record.subject) - <dc:subject>${record.subject}</dc:subject> - #end - #if($record.description) - <dc:description>${record.description}</dc:description> - #end - #if($record.publisher) - <dc:publisher>${record.publisher}</dc:publisher> - #end - #if($record.contributor) - <dc:contributor>${record.contributor}</dc:contributor> - #end - #if($record.date) - <dc:date>${record.date}</dc:date> - #end - #if($record.type) - <dc:type>${record.type}</dc:type> - #end - #if($record.format) - <dc:format>${record.format}</dc:format> - #end - #if($record.identifier) - <dc:identifier>${record.identifier}</dc:identifier> - #end - #if($record.source) - <dc:source>{record.source}</dc:source> - #end - #if($record.language) - <dc:language>${record.language}</dc:language> - #end - #if($record.relation) - <dc:relation>${record.relation}</dc:relation> - #end - #if($record.coverage) - <dc:coverage>${record.coverage}</dc:coverage> - #end - #if($record.rights) - <dc:rights>${record.rights}</dc:rights> - #end - #end - </oai_dc:dc> - </metadata> - </record> - - </ListRecords> -</OAI-PMH> Added: trunk/oai-pmh_data_provider/data_provider_web/src/main/webapp/WEB-INF/vmFiles/oai_dc_record.vm =================================================================== --- trunk/oai-pmh_data_provider/data_provider_web/src/main/webapp/WEB-INF/vmFiles/oai_dc_record.vm (rev 0) +++ trunk/oai-pmh_data_provider/data_provider_web/src/main/webapp/WEB-INF/vmFiles/oai_dc_record.vm 2009-11-17 04:28:48 UTC (rev 271) @@ -0,0 +1,62 @@ +<record> + <header> + <identifier>${model.record.identifier}</identifier> + <datestamp>$!model.record.datestamp</datestamp> + </header> + <metadata> + <oai_dc:dc + xmlns:oai_dc="http://www.openarchives.org/OAI/2.0/oai_dc/" + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/oai_dc/ + http://www.openarchives.org/OAI/2.0/oai_dc.xsd"> + #if($model.record.title) + <dc:title>${model.record.title}</dc:title> + #end + #if($model.record.creator) + #foreach ($person in $model.record.creator) + <dc:creator>${person.lastName}, ${person.firstName}</dc:creator> + #end + #end + #if($model.record.subject) + <dc:subject>${model.record.subject}</dc:subject> + #end + #if($model.record.description) + <dc:description>${model.record.description}</dc:description> + #end + #if($model.record.publisher) + <dc:publisher>${model.record.publisher}</dc:publisher> + #end + #if($model.record.contributor) + <dc:contributor>${model.record.contributor}</dc:contributor> + #end + #if($model.record.date) + <dc:date>${model.record.date}</dc:date> + #end + #if($model.record.type) + <dc:type>${model.record.type}</dc:type> + #end + #if($model.record.format) + <dc:format>${model.record.format}</dc:format> +#end +##if($model.record.identifier) +##<dc:identifier>${model.record.identifier}</dc:identifier> +##end + #if($model.record.source) + <dc:source>{model.record.source}</dc:source> + #end + #if($model.record.language) + <dc:language>${model.record.language}</dc:language> + #end + #if($model.record.relation) + <dc:relation>${model.record.relation}</dc:relation> + #end + #if($model.record.coverage) + <dc:coverage>${model.record.coverage}</dc:coverage> + #end + #if($model.record.rights) + <dc:rights>${model.record.rights}</dc:rights> + #end + </oai_dc:dc> + </metadata> + </record> \ No newline at end of file Modified: trunk/oai-pmh_data_provider/data_provider_web/src/test/java/org/treebase/oai/web/controller/OAIPMHControllerTest.java =================================================================== --- trunk/oai-pmh_data_provider/data_provider_web/src/test/java/org/treebase/oai/web/controller/OAIPMHControllerTest.java 2009-11-16 21:31:12 UTC (rev 270) +++ trunk/oai-pmh_data_provider/data_provider_web/src/test/java/org/treebase/oai/web/controller/OAIPMHControllerTest.java 2009-11-17 04:28:48 UTC (rev 271) @@ -95,7 +95,8 @@ OAIPMHCommand params=new OAIPMHCommand(); params.setVerb("Identify"); Map model=new HashMap(); - model.put("identify",identify ); + model.put("identify",identify ); + model.put("params", params); ModelAndView mav=controller.Identify(params, model); String result=vu.runTemplate(mav); this.assertNotNull(result); @@ -109,7 +110,8 @@ OAIPMHCommand params=new OAIPMHCommand(); params.setVerb("ListSets"); Map model=new HashMap(); - model.put("identify",identify ); + model.put("identify",identify ); + model.put("params", params); ModelAndView mav=controller.ListSets(params, model); String result=vu.runTemplate(mav); this.assertNotNull(result); @@ -164,8 +166,8 @@ ModelAndView mav=controller.ListRecords(params, model); String result=vu.runTemplate(mav); this.assertNotNull(result); - System.out.println("---------test ListRecord---------"); - System.out.print(result); + //System.out.println("---------test ListRecord---------"); + //System.out.print(result); } @@ -182,8 +184,8 @@ ModelAndView mav=controller.ListIdentifiers(params, model); String result=vu.runTemplate(mav); this.assertNotNull(result); - System.out.println("---------test ListIdentifiers---------"); - System.out.print(result); + //System.out.println("---------test ListIdentifiers---------"); + //System.out.print(result); } Copied: trunk/oai-pmh_data_provider/data_provider_web/src/test/resources/GetRecord.vm (from rev 270, trunk/oai-pmh_data_provider/data_provider_web/src/test/resources/oai_dc_GetRecord.vm) =================================================================== --- trunk/oai-pmh_data_provider/data_provider_web/src/test/resources/GetRecord.vm (rev 0) +++ trunk/oai-pmh_data_provider/data_provider_web/src/test/resources/GetRecord.vm 2009-11-17 04:28:48 UTC (rev 271) @@ -0,0 +1,7 @@ +#parse("head.vm") +<GetRecord> +#if($!model.params.metadataPrefix=="oai_dc") +#parse("oai_dc_record.vm") +#end +</GetRecord> +</OAI-PMH> Modified: trunk/oai-pmh_data_provider/data_provider_web/src/test/resources/Identify.vm =================================================================== --- trunk/oai-pmh_data_provider/data_provider_web/src/test/resources/Identify.vm 2009-11-16 21:31:12 UTC (rev 270) +++ trunk/oai-pmh_data_provider/data_provider_web/src/test/resources/Identify.vm 2009-11-17 04:28:48 UTC (rev 271) @@ -1,10 +1,4 @@ -<?xml version="1.0" encoding="UTF-8"?> -<OAI-PMH xmlns="http://www.openarchives.org/OAI/2.0/" - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/ - http://www.openarchives.org/OAI/2.0/OAI-PMH.xsd"> - <responseDate>${model.identify.getResponseDate()}</responseDate> - <request verb="Identify">${model.identify.baseRUL}</request> +#parse("head.vm") <Identify> <repositoryName>${model.identify.repositoryName}</repositoryName> <baseURL>${model.identify.baseURL}</baseURL> @@ -26,7 +20,6 @@ <delimiter>${model.identify.identifierDelimiter}</delimiter> <sampleIdentifier>${model.identify.sampleIdentifier}</sampleIdentifier> </oai-identifier> - </description> - + </description> </Identify> </OAI-PMH> Modified: trunk/oai-pmh_data_provider/data_provider_web/src/test/resources/ListMetadataFormats.vm =================================================================== --- trunk/oai-pmh_data_provider/data_provider_web/src/test/resources/ListMetadataFormats.vm 2009-11-16 21:31:12 UTC (rev 270) +++ trunk/oai-pmh_data_provider/data_provider_web/src/test/resources/ListMetadataFormats.vm 2009-11-17 04:28:48 UTC (rev 271) @@ -1,12 +1,4 @@ -<?xml version="1.0" encoding="UTF-8"?> -<OAI-PMH xmlns="http://www.openarchives.org/OAI/2.0/" - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/ - http://www.openarchives.org/OAI/2.0/OAI-PMH.xsd"> - - <responseDate>${model.identify.getResponseDate()}</responseDate> - <request verb="ListMetadataFormats" - identifier="${model.params.identifier}">${model.identify.baseURL}</request> +#parse("head.vm") <ListMetadataFormats> <metadataFormat> <metadataPrefix>oai_dc</metadataPrefix> Copied: trunk/oai-pmh_data_provider/data_provider_web/src/test/resources/ListRecords.vm (from rev 270, trunk/oai-pmh_data_provider/data_provider_web/src/test/resources/oai_dc_ListRecords.vm) =================================================================== --- trunk/oai-pmh_data_provider/data_provider_web/src/test/resources/ListRecords.vm (rev 0) +++ trunk/oai-pmh_data_provider/data_provider_web/src/test/resources/ListRecords.vm 2009-11-17 04:28:48 UTC (rev 271) @@ -0,0 +1,9 @@ +#parse("head.vm") +<ListRecords> +#if($!model.params.metadataPrefix=="oai_dc") +#foreach($record in $model.recordList) +#parse("oai_dc_record.vm") +#end +#end +</ListRecords> +</OAI-PMH> Modified: trunk/oai-pmh_data_provider/data_provider_web/src/test/resources/ListSets.vm =================================================================== --- trunk/oai-pmh_data_provider/data_provider_web/src/test/resources/ListSets.vm 2009-11-16 21:31:12 UTC (rev 270) +++ trunk/oai-pmh_data_provider/data_provider_web/src/test/resources/ListSets.vm 2009-11-17 04:28:48 UTC (rev 271) @@ -1,10 +1,3 @@ -<?xml version="1.0" encoding="UTF-8"?> -<OAI-PMH xmlns="http://www.openarchives.org/OAI/2.0/" - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/ - http://www.openarchives.org/OAI/2.0/OAI-PMH.xsd"> - <responseDate>${model.identify.responseDate}</responseDate> - <request verb="ListSets">${model.identify.baseURL}</request> - <error code="noSetHierarchy">This repository does not - support sets</error> +#parse("head.vm") + <error code="noSetHierarchy">This repository does not support sets</error> </OAI-PMH> Copied: trunk/oai-pmh_data_provider/data_provider_web/src/test/resources/error.vm (from rev 270, trunk/oai-pmh_data_provider/data_provider_web/src/test/resources/cannotDisseminateFormat.vm) =================================================================== --- trunk/oai-pmh_data_provider/data_provider_web/src/test/resources/error.vm (rev 0) +++ trunk/oai-pmh_data_provider/data_provider_web/src/test/resources/error.vm 2009-11-17 04:28:48 UTC (rev 271) @@ -0,0 +1,3 @@ +#parse("head.vm") +<error code="$!model.error_code">$!model.error</error> +</OAI-PMH> Added: trunk/oai-pmh_data_provider/data_provider_web/src/test/resources/head.vm =================================================================== --- trunk/oai-pmh_data_provider/data_provider_web/src/test/resources/head.vm (rev 0) +++ trunk/oai-pmh_data_provider/data_provider_web/src/test/resources/head.vm 2009-11-17 04:28:48 UTC (rev 271) @@ -0,0 +1,14 @@ +<?xml version="1.0" encoding="UTF-8"?> +<OAI-PMH xmlns="http://www.openarchives.org/OAI/2.0/" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/ + http://www.openarchives.org/OAI/2.0/OAI-PMH.xsd"> +<responseDate>${model.identify.getResponseDate()}</responseDate> +<request #if($!model.params.verb)verb="$!model.params.verb" #end +#if($!model.params.identifier)identifier="$!model.params.identifier" #end +#if($!model.params.metadataPrefix)metadataPrefix="$!model.params.metadataPrefix" #end +#if($!model.params.from)from="$!model.params.from" #end +#if($!model.params.until)until="$!model.params.until" #end +#if($!model.params.resumptionToken)resumptionToken="$!model.params.resumptionToken" #end +#if($!model.params.set)set="$!model.params.set" #end> +$!model.identify.BaseURL</request> Deleted: trunk/oai-pmh_data_provider/data_provider_web/src/test/resources/idDoesNotExist.vm =================================================================== --- trunk/oai-pmh_data_provider/data_provider_web/src/test/resources/idDoesNotExist.vm 2009-11-16 21:31:12 UTC (rev 270) +++ trunk/oai-pmh_data_provider/data_provider_web/src/test/resources/idDoesNotExist.vm 2009-11-17 04:28:48 UTC (rev 271) @@ -1 +0,0 @@ -id not exist \ No newline at end of file Deleted: trunk/oai-pmh_data_provider/data_provider_web/src/test/resources/oai_dc_GetRecord.vm =================================================================== --- trunk/oai-pmh_data_provider/data_provider_web/src/test/resources/oai_dc_GetRecord.vm 2009-11-16 21:31:12 UTC (rev 270) +++ trunk/oai-pmh_data_provider/data_provider_web/src/test/resources/oai_dc_GetRecord.vm 2009-11-17 04:28:48 UTC (rev 271) @@ -1,76 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<OAI-PMH xmlns="http://www.openarchives.org/OAI/2.0/" - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/ - http://www.openarchives.org/OAI/2.0/OAI-PMH.xsd"> - <responseDate>${model.identify.getResponseDate()}</responseDate> - <request verb="GetRecord" identifier="${model.params.identifier}" - metadataPrefix="oai_dc">${model.identify.BaseURL}</request> - <GetRecord> - <record> - <header> - <identifier>${model.record.identifier}</identifier> - <datestamp>$!model.record.datestamp</datestamp> - </header> - <metadata> - <oai_dc:dc - xmlns:oai_dc="http://www.openarchives.org/OAI/2.0/oai_dc/" - xmlns:dc="http://purl.org/dc/elements/1.1/" - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/oai_dc/ - http://www.openarchives.org/OAI/2.0/oai_dc.xsd"> - #if($model.record.title) - <dc:title>${model.record.title}</dc:title> - #end - #if($model.record.creator) - #foreach ($person in $model.record.creator) - <dc:creator>${person.lastName}, ${person.firstName}</dc:creator> - #end - #end - #if($model.record.subject) - <dc:subject>${model.record.subject}</dc:subject> - #end - #if($model.record.description) - <dc:description>${model.record.description}</dc:description> - #end - #if($model.record.publisher) - <dc:publisher>${model.record.publisher}</dc:publisher> - #end - #if($model.record.contributor) - <dc:contributor>${model.record.contributor}</dc:contributor> - #end - #if($model.record.date) - <dc:date>${model.record.date}</dc:date> - #end - #if($model.record.type) - <dc:type>${model.record.type}</dc:type> - #end - #if($model.record.format) - <dc:format>${model.record.format}</dc:format> - #end - - ##if($model.record.identifier) - ##<dc:identifier>${model.record.identifier}</dc:identifier> - ##end - - #if($model.record.source) - <dc:source>{model.record.source}</dc:source> - #end - #if($model.record.language) - <dc:language>${model.record.language}</dc:language> - #end - #if($model.record.relation) - <dc:relation>${model.record.relation}</dc:relation> - #end - #if($model.record.coverage) - <dc:coverage>${model.record.coverage}</dc:coverage> - #end - #if($model.record.rights) - <dc:rights>${model.record.rights}</dc:rights> - #end - </oai_dc:dc> - - </metadata> - </record> - </GetRecord> -</OAI-PMH> Modified: trunk/oai-pmh_data_provider/data_provider_web/src/test/resources/oai_dc_ListIdentifiers.vm =================================================================== --- trunk/oai-pmh_data_provider/data_provider_web/src/test/resources/oai_dc_ListIdentifiers.vm 2009-11-16 21:31:12 UTC (rev 270) +++ trunk/oai-pmh_data_provider/data_provider_web/src/test/resources/oai_dc_ListIdentifiers.vm 2009-11-17 04:28:48 UTC (rev 271) @@ -1,19 +1,10 @@ -<?xml version="1.0" encoding="UTF-8"?> -<OAI-PMH xmlns="http://www.openarchives.org/OAI/2.0/" - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/ - http://www.openarchives.org/OAI/2.0/OAI-PMH.xsd"> - <responseDate>${model.identify.getResponseDate()}</responseDate> - <request verb="ListIdentifiers" from="${model.params.from}" - until="$!model.params.until" - metadataPrefix="${model.params.metadataPrefix}"> - ${model.identify.BaseURL}</request> - <ListIdentifiers> - #foreach ( $record in $model.recordList) - <header> - <identifier>${record.identifier}</identifier> - <datestamp>$!record.datestamp</datestamp> - </header> - #end - </ListIdentifiers> +#parse("head.vm") +<ListIdentifiers> +#foreach ( $record in $model.recordList) +<header> +<identifier>${record.identifier}</identifier> +<datestamp>$!record.datestamp</datestamp> +</header> +#end +</ListIdentifiers> </OAI-PMH> Deleted: trunk/oai-pmh_data_provider/data_provider_web/src/test/resources/oai_dc_ListRecords.vm =================================================================== --- trunk/oai-pmh_data_provider/data_provider_web/src/test/resources/oai_dc_ListRecords.vm 2009-11-16 21:31:12 UTC (rev 270) +++ trunk/oai-pmh_data_provider/data_provider_web/src/test/resources/oai_dc_ListRecords.vm 2009-11-17 04:28:48 UTC (rev 271) @@ -1,77 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<OAI-PMH xmlns="http://www.openarchives.org/OAI/2.0/" - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/ - http://www.openarchives.org/OAI/2.0/OAI-PMH.xsd"> - <responseDate>${model.identify.getResponseDate()}</responseDate> - <request verb="ListRecords" from="${model.params.from}" - until="${model.params.from}" metadataPrefix="${model.params.metadataPrefix}"> - ${model.identify.BaseURL}</request> - <ListRecords> - #foreach ( $record in $model.recordList) - <record> - <header> - <identifier>${record.identifier}</identifier> - <datestamp>$!record.datestamp</datestamp> - </header> - <metadata> - <oai_dc:dc - xmlns:oai_dc="http://www.openarchives.org/OAI/2.0/oai_dc/" - xmlns:dc="http://purl.org/dc/elements/1.1/" - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/oai_dc/ - http://www.openarchives.org/OAI/2.0/oai_dc.xsd"> - #if($record.title) - <dc:title>${record.title}</dc:title> - #end - #if($record.creator) - #foreach ($person in $record.creator) - <dc:creator>${person.lastName}, ${person.firstName}</dc:creator> - #end - #end - #if($record.subject) - <dc:subject>${record.subject}</dc:subject> - #end - #if($record.description) - <dc:description>${record.description}</dc:description> - #end - #if($record.publisher) - <dc:publisher>${record.publisher}</dc:publisher> - #end - #if($record.contributor) - <dc:contributor>${record.contributor}</dc:contributor> - #end - #if($record.date) - <dc:date>${record.date}</dc:date> - #end - #if($record.type) - <dc:type>${record.type}</dc:type> - #end - #if($record.format) - <dc:format>${record.format}</dc:format> - #end - #if($record.identifier) - <dc:identifier>${record.identifier}</dc:identifier> - #end - #if($record.source) - <dc:source>{record.source}</dc:source> - #end - #if($record.language) - <dc:language>${record.language}</dc:language> - #end - #if($record.relation) - <dc:relation>${record.relation}</dc:relation> - #end - #if($record.coverage) - <dc:coverage>${record.coverage}</dc:coverage> - #end - #if($record.rights) - <dc:rights>${record.rights}</dc:rights> - #end - #end - </oai_dc:dc> - </metadata> - </record> - - </ListRecords> -</OAI-PMH> Added: trunk/oai-pmh_data_provider/data_provider_web/src/test/resources/oai_dc_record.vm =================================================================== --- trunk/oai-pmh_data_provider/data_provider_web/src/test/resources/oai_dc_record.vm (rev 0) +++ trunk/oai-pmh_data_provider/data_provider_web/src/test/resources/oai_dc_record.vm 2009-11-17 04:28:48 UTC (rev 271) @@ -0,0 +1,62 @@ +<record> + <header> + <identifier>${model.record.identifier}</identifier> + <datestamp>$!model.record.datestamp</datestamp> + </header> + <metadata> + <oai_dc:dc + xmlns:oai_dc="http://www.openarchives.org/OAI/2.0/oai_dc/" + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/oai_dc/ + http://www.openarchives.org/OAI/2.0/oai_dc.xsd"> + #if($model.record.title) + <dc:title>${model.record.title}</dc:title> + #end + #if($model.record.creator) + #foreach ($person in $model.record.creator) + <dc:creator>${person.lastName}, ${person.firstName}</dc:creator> + #end + #end + #if($model.record.subject) + <dc:subject>${model.record.subject}</dc:subject> + #end + #if($model.record.description) + <dc:description>${model.record.description}</dc:description> + #end + #if($model.record.publisher) + <dc:publisher>${model.record.publisher}</dc:publisher> + #end + #if($model.record.contributor) + <dc:contributor>${model.record.contributor}</dc:contributor> + #end + #if($model.record.date) + <dc:date>${model.record.date}</dc:date> + #end + #if($model.record.type) + <dc:type>${model.record.type}</dc:type> + #end + #if($model.record.format) + <dc:format>${model.record.format}</dc:format> +#end +##if($model.record.identifier) +##<dc:identifier>${model.record.identifier}</dc:identifier> +##end + #if($model.record.source) + <dc:source>{model.record.source}</dc:source> + #end + #if($model.record.language) + <dc:language>${model.record.language}</dc:language> + #end + #if($model.record.relation) + <dc:relation>${model.record.relation}</dc:relation> + #end + #if($model.record.coverage) + <dc:coverage>${model.record.coverage}</dc:coverage> + #end + #if($model.record.rights) + <dc:rights>${model.record.rights}</dc:rights> + #end + </oai_dc:dc> + </metadata> + </record> \ No newline at end of file This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |