http://git-wip-us.apache.org/repos/asf/incubator-sdap-edge/blob/53351bf3/src/main/python/plugins/product/iso/template.xml
----------------------------------------------------------------------
diff --git a/src/main/python/plugins/product/iso/template.xml 
b/src/main/python/plugins/product/iso/template.xml
new file mode 100644
index 0000000..eb83846
--- /dev/null
+++ b/src/main/python/plugins/product/iso/template.xml
@@ -0,0 +1,726 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<gmd:DS_Series xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
+       xsi:schemaLocation="http://www.isotc211.org/2005/gmd 
http://www.ngdc.noaa.gov/metadata/published/xsd/schema.xsd";
+       xmlns:gmd="http://www.isotc211.org/2005/gmd"; 
xmlns:gco="http://www.isotc211.org/2005/gco";
+       xmlns:xlink="http://www.w3.org/1999/xlink"; 
xmlns:gml="http://www.opengis.net/gml";
+       xmlns:gsr="http://www.isotc211.org/2005/gsr"; 
xmlns:gss="http://www.isotc211.org/2005/gss";
+       xmlns:gts="http://www.isotc211.org/2005/gts"; 
xmlns:gmx="http://www.isotc211.org/2005/gmx";
+       xmlns:gmi="http://www.isotc211.org/2005/gmi";>
+       <gmd:composedOf gco:nilReason="inapplicable" />
+       <gmd:seriesMetadata>
+               <gmi:MI_Metadata id="{{ docs[0]['id'] }}">
+                       <gmd:fileIdentifier>
+                               <gco:CharacterString>{{ docs[0]['product_name'] 
}}</gco:CharacterString>
+                       </gmd:fileIdentifier>                
+                       <gmd:language>
+                               <gco:CharacterString>eng</gco:CharacterString>
+                       </gmd:language>
+                       <gmd:characterSet>
+                               <gmd:MD_CharacterSetCode
+                                       
codeList="http://www.isotc211.org/2005/resources/Codelist/gmxCodelists.xml#MD_CharacterSetCode";
+                                       codeListValue="UTF8">UTF8
+                               </gmd:MD_CharacterSetCode>
+                       </gmd:characterSet>
+                       <gmd:hierarchyLevel>
+                               <gmd:MD_ScopeCode
+                                       
codeList="http://www.isotc211.org/2005/resources/Codelist/gmxCodelists.xml#MD_ScopeCode";
+                                       codeListValue="series">series
+                               </gmd:MD_ScopeCode>
+                       </gmd:hierarchyLevel>
+                       {% if docs[0].__contains__('product_contact_role_list') 
and
+                               
docs[0]['product_contact_role_list'].__contains__('POINT_OF_CONTACT') %}
+                               <gmd:contact>
+                                       {% for i in 
range(docs[0]['product_contact_role_list'].__len__()) %}
+                                               {% if 
docs[0]['product_contact_role_list'][i] == 'POINT_OF_CONTACT' %}
+                                                       
<gmd:CI_ResponsibleParty id="seriesMetadataContact">
+                                                               
<gmd:individualName>                                            
+                                                                       
<gco:CharacterString>
+                                                                               
{% if docs[0]['product_contact_first_name_list'][i] != 'null' %} 
+                                                                               
        {{ docs[0]['product_contact_first_name_list'][i] }}
+                                                                               
{% endif %}
+                                                                               
{% if docs[0]['product_contact_middle_name_list'][i] != 'null' %} 
+                                                                               
        {{ docs[0]['product_contact_middle_name_list'][i] }}
+                                                                               
        {% endif %} 
+                                                                               
{{ docs[0]['product_contact_last_name_list'][i] }}
+                                                                       
</gco:CharacterString>
+                                                               
</gmd:individualName>
+                                                               
<gmd:organisationName>
+                                                                       
<gco:CharacterString>{{ docs[0]['product_contact_provider_short_name_list'][i] 
}} &gt; {{ docs[0]['product_contact_provider_long_name_list'][i] 
}}</gco:CharacterString>
+                                                               
</gmd:organisationName>
+                                                               
<gmd:positionName>
+                                                                       
<gco:CharacterString>
+                                                                       {% if 
docs[0].__contains__('product_contact_role_list') %} 
+                                                                               
{{ docs[0]['product_contact_role_list'][i] }}
+                                                                       {% 
endif %} 
+                                                                       
</gco:CharacterString>
+                                                               
</gmd:positionName>
+                                                               
<gmd:contactInfo>
+                                                                       
<gmd:CI_Contact>
+                                                                               
<gmd:phone>
+                                                                               
        <gmd:CI_Telephone>
+                                                                               
                {% if docs[0]['product_contact_phone_list'][i] != 'null' %}
+                                                                               
                        <gmd:voice>
+                                                                               
                                <gco:CharacterString>{{ 
docs[0]['product_contact_phone_list'][i] }}</gco:CharacterString>
+                                                                               
                        </gmd:voice>
+                                                                               
                {% else %}
+                                                                               
                        <gmd:voice gco:nilReason="missing" />
+                                                                               
                {% endif %}
+                                                                               
                {% if docs[0]['product_contact_fax_list'][i] != 'null' %}
+                                                                               
                        <gmd:facsimile>
+                                                                               
                                <gco:CharacterString>{{ 
docs[0]['product_contact_fax_list'][i] }}</gco:CharacterString>
+                                                                               
                        </gmd:facsimile>
+                                                                               
                {% else %}
+                                                                               
                        <gmd:facsimile gco:nilReason="missing" />
+                                                                               
                {% endif %}
+                                                                               
        </gmd:CI_Telephone>
+                                                                               
</gmd:phone>
+                                                                               
<gmd:address>
+                                                                               
        <gmd:CI_Address>
+                                                                               
                {% if docs[0]['product_contact_address_list'][i] != 'null' %}
+                                                                               
                        <gmd:electronicMailAddress>
+                                                                               
                                <gco:CharacterString>{{ 
docs[0]['product_contact_address_list'][i] }}</gco:CharacterString>
+                                                                               
                        </gmd:electronicMailAddress>
+                                                                               
                {% else %}
+                                                                               
                        <gmd:electronicMailAddress gco:nilReason="missing" />
+                                                                               
                {% endif %}
+                                                                               
       </gmd:CI_Address>
+                                                                               
</gmd:address>
+                                                                               
<gmd:contactInstructions>
+                                                                               
        <gco:CharacterString>Phone/FAX/E-mail</gco:CharacterString>
+                                                                               
</gmd:contactInstructions>
+                                                                       
</gmd:CI_Contact>
+                                                               
</gmd:contactInfo>
+                                                               <gmd:role>
+                                                                       
<gmd:CI_RoleCode
+                                                                               
codeList="http://www.isotc211.org/2005/resources/Codelist/gmxCodelists.xml#CI_RoleCode";
+                                                                               
codeListValue="pointOfContact">pointOfContact
+                                                                       
</gmd:CI_RoleCode>
+                                                               </gmd:role>
+                                                       
</gmd:CI_ResponsibleParty>
+                                               {% endif %}
+                                       {% endfor %}
+                               </gmd:contact>
+                       {% else %}
+                               <gmd:contact gco:nilReason="missing" />
+                       {% endif %}
+                       <gmd:dateStamp>
+                               <gco:Date>{{ 
docs[0]['product_meta_history_last_revision_date_string'] }}</gco:Date>
+                       </gmd:dateStamp>
+                       <gmd:metadataStandardName>
+                               <gco:CharacterString>ISO 19115-2 Geographic 
information — Metadata —
+                                       Part 2: Extensions for imagery and 
gridded data
+                               </gco:CharacterString>
+                       </gmd:metadataStandardName>
+                       <gmd:metadataStandardVersion>
+                               <gco:CharacterString>ISO 
19115-2:2009-02-15</gco:CharacterString>
+                       </gmd:metadataStandardVersion>
+                       <gmd:locale>
+                               <gmd:PT_Locale>
+                                       <gmd:languageCode>
+                                               <gmd:LanguageCode
+                                                       
codeList="http://www.loc.gov/standards/iso639-2/php/English_list.php";
+                                                       
codeListValue="eng">eng</gmd:LanguageCode>
+                                       </gmd:languageCode>
+                                       <gmd:country>
+                                               <gmd:Country 
codeList="http://www.iso.org/iso/iso_3166-1_list_en.zip";
+                                                       
codeListValue="US">US</gmd:Country>
+                                       </gmd:country>
+                                       <gmd:characterEncoding>
+                                               <gmd:MD_CharacterSetCode
+                                                       
codeList="http://www.isotc211.org/2005/resources/Codelist/gmxCodelists.xml#MD_CharacterSetCode";
+                                                       
codeListValue="UTF8">UTF8</gmd:MD_CharacterSetCode>
+                                       </gmd:characterEncoding>
+                               </gmd:PT_Locale>
+                       </gmd:locale>
+                       <gmd:metadataExtensionInfo>
+                               <gmd:MD_MetadataExtensionInformation>
+                                       <gmd:extensionOnLineResource>
+                                               <gmd:CI_OnlineResource>
+                                                       <gmd:linkage>
+                                                               
<gmd:URL>http://www.ngdc.noaa.gov/metadata/published/19115/GHRSST/ISO/CoverageExtensions.xml</gmd:URL>
+                                                       </gmd:linkage>
+                                                       <gmd:applicationProfile>
+                                                               
<gco:CharacterString>Web Browser</gco:CharacterString>
+                                                       
</gmd:applicationProfile>
+                                                       <gmd:description>
+                                                               
<gco:CharacterString>A description of extensions developed at NGDC to classify 
coverages.</gco:CharacterString>
+                                                       </gmd:description>
+                                                       <gmd:function>
+                                                               
<gmd:CI_OnLineFunctionCode
+                                                                       
codeList="http://www.isotc211.org/2005/resources/Codelist/gmxCodelists.xml#CI_OnlineFunctionCode";
+                                                                       
codeListValue="information">information
+                                                               
</gmd:CI_OnLineFunctionCode>
+                                                       </gmd:function>
+                                               </gmd:CI_OnlineResource>
+                                       </gmd:extensionOnLineResource>
+                               </gmd:MD_MetadataExtensionInformation>
+                       </gmd:metadataExtensionInfo>
+                       <gmd:identificationInfo>
+                               <gmd:MD_DataIdentification 
id="seriesIdentification">
+                                       <gmd:citation>
+                                               <gmd:CI_Citation>
+                                                       {% if 
docs[0].__contains__('product_name') %}
+                                                               <gmd:title>
+                                                                       
<gco:CharacterString>{{ docs[0]['product_name'] }}</gco:CharacterString>
+                                                               </gmd:title> 
+                                                       {% else %} 
+                                                               <gmd:title 
gco:nilReason="missing" />
+                                                       {% endif %}
+                                                       {% if 
docs[0].__contains__('product_name') %}
+                                                               
<gmd:alternateTitle>
+                                                                       
<gco:CharacterString>{{ docs[0]['product_name'] }}</gco:CharacterString>
+                                                               
</gmd:alternateTitle> 
+                                                       {% else %} 
+                                                               
<gmd:alternateTitle gco:nilReason="missing" />
+                                                       {% endif %}
+                                                       <gmd:date>
+                                                               <gmd:CI_Date>
+                                                                       
<gmd:date>                                      
+                                                                               
<gco:Date>{{ docs[0]['product_create_time_string'] }}</gco:Date>
+                                                                       
</gmd:date>
+                                                                       
<gmd:dateType>
+                                                                               
<gmd:CI_DateTypeCode
+                                                                               
        
codeList="http://www.isotc211.org/2005/resources/Codelist/gmxCodelists.xml#CI_DateTypeCode";
+                                                                               
        codeListValue="creation">creation
+                                                                               
</gmd:CI_DateTypeCode>
+                                                                       
</gmd:dateType>
+                                                               </gmd:CI_Date>
+                                                       </gmd:date>
+                                                       {% if 
docs[0].__contains__('product_revision') %}
+                                                               <gmd:edition>
+                                                                       
<gco:CharacterString>{{ docs[0]['product_revision'] }}</gco:CharacterString>
+                                                               </gmd:edition> 
+                                                       {% else %} 
+                                                           <gmd:edition 
gco:nilReason="missing" />
+                                                       {% endif %}           
+                                                       
<gmd:citedResponsibleParty>
+                                                               
<gmd:CI_ResponsibleParty id="seriesMetadataContact">
+                                                                       
<gmd:individualName gco:nilReason="missing" />
+                                                                       
<gmd:contactInfo gco:nilReason="missing" />
+                                                                       
<gmd:role>
+                                                                               
<gmd:CI_RoleCode
+                                                                               
        
codeList="http://www.isotc211.org/2005/resources/Codelist/gmxCodelists.xml#CI_RoleCode";
+                                                                               
        codeListValue="originator">originator
+                                                                               
</gmd:CI_RoleCode>
+                                                                       
</gmd:role>
+                                                               
</gmd:CI_ResponsibleParty>
+                                                       
</gmd:citedResponsibleParty>        
+                                                       
<gmd:citedResponsibleParty>
+                                                               
<gmd:CI_ResponsibleParty id="seriesMetadataContact">
+                                                                       
<gmd:individualName gco:nilReason="missing" />
+                                                                       
<gmd:contactInfo gco:nilReason="missing" />
+                                                                       
<gmd:role>
+                                                                               
<gmd:CI_RoleCode
+                                                                               
        
codeList="http://www.isotc211.org/2005/resources/Codelist/gmxCodelists.xml#CI_RoleCode";
+                                                                               
        codeListValue="publisher">publisher
+                                                                               
</gmd:CI_RoleCode>
+                                                                       
</gmd:role>
+                                                               
</gmd:CI_ResponsibleParty>
+                                                       
</gmd:citedResponsibleParty>         
+                                               </gmd:CI_Citation>
+                                       </gmd:citation>
+                                       {% if 
docs[0].__contains__('product_name') %}
+                                               <gmd:abstract>
+                                                       <gco:CharacterString>{{ 
docs[0]['product_name'] }}</gco:CharacterString>
+                                               </gmd:abstract>
+                                       {% else %}
+                                               <gmd:abstract  
gco:nilReason="missing" />
+                                       {% endif %}
+                                       <gmd:credit gco:nilReason="missing" />
+                                       <gmd:status>
+                                               <gmd:MD_ProgressCode
+                                                       
codeList="http://www.isotc211.org/2005/resources/Codelist/gmxCodelists.xml#MD_ProgressCode";
+                                                       
codeListValue="onGoing">onGoing
+                                               </gmd:MD_ProgressCode>
+                                       </gmd:status>
+                                       {% if 
docs[0].__contains__('product_contact_role_list') and 
docs[0]['product_contact_role_list'].__contains__('POINT_OF_CONTACT') %}
+                                               <gmd:pointOfContact>
+                                                       {% for i in 
range(docs[0]['product_contact_role_list'].__len__()) %}
+                                                               {% if 
docs[0]['product_contact_role_list'][i] == 'POINT_OF_CONTACT' %}
+                                                                       
<gmd:CI_ResponsibleParty id="seriesMetadataContact">
+                                                                               
<gmd:individualName>                                            
+                                                                               
        <gco:CharacterString>
+                                                                               
                {% if docs[0]['product_contact_first_name_list'][i] != 'null' 
%} 
+                                                                               
                        {{ docs[0]['product_contact_first_name_list'][i] }}
+                                                                               
                {% endif %}
+                                                                               
                {% if docs[0]['product_contact_middle_name_list'][i] != 'null' 
%} 
+                                                                               
                        {{ docs[0]['product_contact_middle_name_list'][i] }}
+                                                                               
                {% endif %} 
+                                                                               
                {{ docs[0]['product_contact_last_name_list'][i] }}
+                                                                               
        </gco:CharacterString>
+                                                                               
</gmd:individualName>
+                                                                               
<gmd:organisationName>
+                                                                               
        <gco:CharacterString>{{ 
docs[0]['product_contact_provider_short_name_list'][i] }} &gt; {{ 
docs[0]['product_contact_provider_long_name_list'][i] }}</gco:CharacterString>
+                                                                               
</gmd:organisationName>     
+                                                                               
<gmd:contactInfo>
+                                                                               
        <gmd:CI_Contact>
+                                                                               
                <gmd:phone>
+                                                                               
                        <gmd:CI_Telephone>
+                                                                               
                                {% if docs[0]['product_contact_phone_list'][i] 
!= 'null' %}
+                                                                               
                                        <gmd:voice>
+                                                                               
                                                <gco:CharacterString>{{ 
docs[0]['product_contact_phone_list'][i] }}</gco:CharacterString>
+                                                                               
                                        </gmd:voice>
+                                                                               
                                {% else %}
+                                                                               
                                        <gmd:voice gco:nilReason="missing" />
+                                                                               
                                {% endif %}
+                                                                               
                                {% if docs[0]['product_contact_fax_list'][i] != 
'null' %}
+                                                                               
                                        <gmd:facsimile>
+                                                                               
                                                <gco:CharacterString>{{ 
docs[0]['product_contact_fax_list'][i] }}</gco:CharacterString>
+                                                                               
                                        </gmd:facsimile>
+                                                                               
                                {% else %}
+                                                                               
                                        <gmd:facsimile gco:nilReason="missing" 
/>
+                                                                               
                                {% endif %}
+                                                                               
                        </gmd:CI_Telephone>
+                                                                               
                </gmd:phone>
+                                                                               
                <gmd:address>
+                                                                               
                        <gmd:CI_Address>
+                                                                               
                                {% if 
docs[0]['product_contact_address_list'][i] != 'null' %}
+                                                                               
                                        <gmd:electronicMailAddress>
+                                                                               
                                                <gco:CharacterString>{{ 
docs[0]['product_contact_address_list'][i] }}</gco:CharacterString>
+                                                                               
                                        </gmd:electronicMailAddress>
+                                                                               
                                {% else %}
+                                                                               
                                        <gmd:electronicMailAddress 
gco:nilReason="missing" />
+                                                                               
                                {% endif %}
+                                                                               
                        </gmd:CI_Address>
+                                                                               
                </gmd:address>
+                                                                               
                <gmd:contactInstructions>
+                                                                               
                        
<gco:CharacterString>Phone/FAX/E-mail</gco:CharacterString>
+                                                                               
                </gmd:contactInstructions>
+                                                                               
                {% if 
docs[0]['product_contact_provider_resource_paths_list'][i] != 'null' %}
+                                                                               
                        <gmd:onlineResource>
+                                                                               
                                <gmd:CI_OnlineResource>
+                                                                               
                                        <gmd:linkage>
+                                                                               
                                                <gmd:URL>{{ 
docs[0]['product_contact_provider_resource_paths_list'][i] }}</gmd:URL>
+                                                                               
                                        </gmd:linkage>
+                                                                               
                                </gmd:CI_OnlineResource>
+                                                                               
                        </gmd:onlineResource>
+                                                                               
                {% else %}
+                                                                               
                        <gmd:onlineResource gco:nilReason="missing" />
+                                                                               
                {% endif %}
+                                                                               
        </gmd:CI_Contact>
+                                                                               
</gmd:contactInfo>
+                                                                               
<gmd:role>
+                                                                               
    <gmd:CI_RoleCode
+                                                                               
        
codeList="http://www.isotc211.org/2005/resources/Codelist/gmxCodelists.xml#CI_RoleCode";
+                                                                               
        codeListValue="pointOfContact">pointOfContact
+                                                                               
    </gmd:CI_RoleCode>
+                                                                               
</gmd:role>
+                                                                       
</gmd:CI_ResponsibleParty>
+                                                               {% endif %}
+                                                       {% endfor %}
+                                               </gmd:pointOfContact>
+                                       {% else %}
+                                               <gmd:pointOfContact 
gco:nilReason="missing" />
+                                       {% endif %}
+                                       {% if 
docs[0].__contains__('product_reference_name_list') %}    
+                                               <gmd:resourceFormat>
+                                                       {% for i in 
range(docs[0]['product_reference_name_list'].__len__()) %}
+                                                               <gmd:MD_Format 
id="resourceFormat">
+                                                                       {% if 
docs[0].__contains__('product_reference_name_list') %}
+                                                                               
<gmd:name>
+                                                                               
        <gco:CharacterString>{{ docs[0]['product_reference_name_list'][i] 
}}</gco:CharacterString>
+                                                                               
</gmd:name>
+                                                                       {% else 
%}
+                                                                               
<gmd:name gco:nilReason="missing" />
+                                                                       {% 
endif %}
+                                                                       {% if 
docs[0].__contains__('product_reference_version_list') %}
+                                                                               
<gmd:version>
+                                                                               
        <gco:CharacterString>{{ docs[0]['product_reference_version_list'][i] 
}}</gco:CharacterString>
+                                                                               
</gmd:version>
+                                                                       {% else 
%}
+                                                                               
<gmd:version gco:nilReason="missing" />
+                                                                       {% 
endif %}
+                                                                       
<gmd:fileDecompressionTechnique gco:nilReason="missing" />
+                                                               </gmd:MD_Format>
+                                                       {% endfor %}
+                                               </gmd:resourceFormat>
+                                       {% else %}
+                                               <gmd:resourceFormat 
gco:nilReason="missing" /> 
+                                       {% endif %}
+                                       <gmd:descriptiveKeywords>
+                                               <gmd:MD_Keywords>
+                                                       <gmd:keyword 
gco:nilReason="missing" />
+                                                       <gmd:type>
+                                                               
<gmd:MD_KeywordTypeCode
+                                                                       
codeList="http://www.isotc211.org/2005/resources/Codelist/gmxCodelists.xml#MD_KeywordTypeCode";
+                                                                       
codeListValue="theme">theme
+                                                               
</gmd:MD_KeywordTypeCode>
+                                                       </gmd:type>
+                                                       <gmd:thesaurusName>
+                                                               
<gmd:CI_Citation>
+                                                                       
<gmd:title>
+                                                                               
<gco:CharacterString>NASA/GCMD Earth Science Keywords
+                                                                               
</gco:CharacterString>
+                                                                       
</gmd:title>
+                                                                       
<gmd:date gco:nilReason="unknown" />
+                                                               
</gmd:CI_Citation>
+                                                       </gmd:thesaurusName>
+                                               </gmd:MD_Keywords>
+                                       </gmd:descriptiveKeywords>
+                                       {% if 
docs[0].__contains__('product_operation_list') %}
+                                               {% for i in 
range(docs[0]['product_operation_list'].__len__()) %}
+                                                       
<gmd:descriptiveKeywords>
+                                                               
<gmd:MD_Keywords>
+                                                                       
<gmd:keyword >
+                                                                               
<gco:CharacterString>
+                                                                               
        Operation: {{ docs[0]['product_operation_list'][i] }} &gt; Agent: {{ 
docs[0]['product_operation_agent_list'][i] }}
+                                                                               
</gco:CharacterString>
+                                                                       
</gmd:keyword>
+                                                                       
<gmd:type>
+                                                                               
<gmd:MD_KeywordTypeCode
+                                                                               
        
codeList="http://www.isotc211.org/2005/resources/Codelist/gmxCodelists.xml#MD_KeywordTypeCode";
+                                                                               
        codeListValue="place">place
+                                                                               
</gmd:MD_KeywordTypeCode>
+                                                                       
</gmd:type>
+                                                                       
<gmd:thesaurusName>
+                                                                               
<gmd:CI_Citation>
+                                                                               
        <gmd:title>
+                                                                               
                <gco:CharacterString>NASA/GCMD Location 
Keywords</gco:CharacterString>
+                                                                               
        </gmd:title>
+                                                                               
        <gmd:date gco:nilReason="unknown" />
+                                                                               
</gmd:CI_Citation>
+                                                                       
</gmd:thesaurusName>
+                                                               
</gmd:MD_Keywords>
+                                                       
</gmd:descriptiveKeywords>
+                                               {% endfor %}
+                                       {% else %}
+                                               <gmd:descriptiveKeywords>
+                                                       <gmd:MD_Keywords>
+                                                               <gmd:keyword 
gco:nilReason="missing" />
+                                                               <gmd:type>
+                                                                       
<gmd:MD_KeywordTypeCode
+                                                                               
codeList="http://www.isotc211.org/2005/resources/Codelist/gmxCodelists.xml#MD_KeywordTypeCode";
+                                                                               
codeListValue="place">place
+                                                                       
</gmd:MD_KeywordTypeCode>
+                                                               </gmd:type>
+                                                               
<gmd:thesaurusName>
+                                                                       
<gmd:CI_Citation>
+                                                                               
<gmd:title>
+                                                                               
        <gco:CharacterString>NASA/GCMD Location Keywords</gco:CharacterString>
+                                                                               
</gmd:title>
+                                                                               
<gmd:date gco:nilReason="unknown" />
+                                                                       
</gmd:CI_Citation>
+                                                               
</gmd:thesaurusName>
+                                                       </gmd:MD_Keywords>      
                                                
+                                               </gmd:descriptiveKeywords>      
        
+                                       {% endif %}
+                                       <gmd:resourceConstraints>
+                                               <gmd:MD_LegalConstraints>
+                                                       <gmd:useLimitation 
gco:nilReason="missing" />
+                                                       <gmd:otherConstraints 
gco:nilReason="missing" />
+                                               </gmd:MD_LegalConstraints>
+                                       </gmd:resourceConstraints>
+                                       <gmd:spatialRepresentationType>
+                                               
<gmd:MD_SpatialRepresentationTypeCode
+                                                       
codeList="http://www.isotc211.org/2005/resources/Codelist/gmxCodelists.xml#MD_SpatialRepresentationTypeCode";
+                                                       
codeListValue="grid">grid
+                                               
</gmd:MD_SpatialRepresentationTypeCode>
+                                       </gmd:spatialRepresentationType>
+                                       <gmd:language>
+                                               
<gco:CharacterString>eng</gco:CharacterString>
+                                       </gmd:language>
+                                       <gmd:characterSet>
+                                               <gmd:MD_CharacterSetCode
+                                                       
codeList="http://www.isotc211.org/2005/resources/Codelist/gmxCodelists.xml#MD_CharacterSetCode";
+                                                       
codeListValue="UTF8">UTF8
+                                               </gmd:MD_CharacterSetCode>
+                                       </gmd:characterSet>
+                                       <gmd:extent>
+                                               <gmd:EX_Extent 
id="boundingExtent">
+                                                       <gmd:geographicElement>
+                                                               
<gmd:EX_GeographicBoundingBox id="boundingBox">
+                                                                       
<gmd:extentTypeCode>
+                                                                               
<gco:Boolean>true</gco:Boolean>
+                                                                       
</gmd:extentTypeCode>
+                                                                       
<gmd:westBoundLongitude gco:nilReason="missing" />
+                                                                       
<gmd:eastBoundLongitude gco:nilReason="missing" />
+                                                                       
<gmd:southBoundLatitude gco:nilReason="missing" />
+                                                                       
<gmd:northBoundLatitude gco:nilReason="missing" />
+                                                               
</gmd:EX_GeographicBoundingBox>
+                                                       </gmd:geographicElement>
+                                                       <gmd:geographicElement>
+                                                               
<gmd:EX_GeographicDescription>
+                                                                       
<gmd:extentTypeCode>
+                                                                               
<gco:Boolean>true</gco:Boolean>
+                                                                       
</gmd:extentTypeCode>
+                                                                       
<gmd:geographicIdentifier>
+                                                                               
<gmd:MD_Identifier>
+                                                                               
        <gmd:code />
+                                                                               
</gmd:MD_Identifier>
+                                                                       
</gmd:geographicIdentifier>
+                                                               
</gmd:EX_GeographicDescription>
+                                                       </gmd:geographicElement>
+                                                       <gmd:temporalElement>
+                                                               
<gmd:EX_TemporalExtent id="temporalExtent">
+                                                                       
<gmd:extent>
+                                                                               
<TimePeriod xmlns="http://www.opengis.net/gml/3.2";
+                                                                               
        xmlns:ns1="http://www.opengis.net/gml/3.2"; ns1:id="timePeriod">
+                                                                               
        <beginPosition>{{ docs[0]['product_start_time_string'] 
}}</beginPosition>
+                                                                               
        <endPosition>{{ docs[0]['product_stop_time_string'] }}</endPosition>
+                                                                               
</TimePeriod>
+                                                                       
</gmd:extent>
+                                                               
</gmd:EX_TemporalExtent>
+                                                       </gmd:temporalElement>
+                                                       <gmd:verticalElement 
gco:nilReason="inapplicable" />
+                                               </gmd:EX_Extent>
+                                       </gmd:extent>
+                               </gmd:MD_DataIdentification>
+                       </gmd:identificationInfo>
+                       <gmd:contentInfo>
+                               <gmi:MI_CoverageDescription 
id="referenceInformation">
+                                       <gmd:attributeDescription>
+                                               <gco:RecordType 
xlink:href="http://www.ghrsst.org/documents.htm?parent=475"; />
+                                       </gmd:attributeDescription>
+                                       <gmd:contentType>
+                                               <gmd:MD_CoverageContentTypeCode
+                                                       
codeList="http://www.isotc211.org/2005/resources/Codelist/gmxCodelists.xml#MD_CoverageContentTypeCode";
+                                                       
codeListValue="referenceInformation">referenceInformation
+                                               
</gmd:MD_CoverageContentTypeCode>
+                                       </gmd:contentType>
+                                       <gmd:dimension>
+                                               <gmd:MD_Band>
+                                                       <gmd:sequenceIdentifier>
+                                                               <gco:MemberName>
+                                                                       
<gco:aName>
+                                                                               
<gco:CharacterString>lat</gco:CharacterString>
+                                                                       
</gco:aName>
+                                                                       
<gco:attributeType>
+                                                                               
<gco:TypeName>
+                                                                               
        <gco:aName>
+                                                                               
                <gco:CharacterString>float</gco:CharacterString>
+                                                                               
        </gco:aName>
+                                                                               
</gco:TypeName>
+                                                                       
</gco:attributeType>
+                                                               
</gco:MemberName>
+                                                       
</gmd:sequenceIdentifier>
+                                               </gmd:MD_Band>
+                                       </gmd:dimension>
+                                       <gmd:dimension>
+                                               <gmd:MD_Band>
+                                                       <gmd:sequenceIdentifier>
+                                                               <gco:MemberName>
+                                                                       
<gco:aName>
+                                                                               
<gco:CharacterString>lon</gco:CharacterString>
+                                                                       
</gco:aName>
+                                                                       
<gco:attributeType>
+                                                                               
<gco:TypeName>
+                                                                               
        <gco:aName>
+                                                                               
                <gco:CharacterString>float</gco:CharacterString>
+                                                                               
        </gco:aName>
+                                                                               
</gco:TypeName>
+                                                                       
</gco:attributeType>
+                                                               
</gco:MemberName>
+                                                       
</gmd:sequenceIdentifier>
+                                               </gmd:MD_Band>
+                                       </gmd:dimension>
+                                       <gmd:dimension>
+                                               <gmd:MD_Band>
+                                                       <gmd:sequenceIdentifier>
+                                                               <gco:MemberName>
+                                                                       
<gco:aName>
+                                                                               
<gco:CharacterString>time</gco:CharacterString>
+                                                                       
</gco:aName>
+                                                                       
<gco:attributeType>
+                                                                               
<gco:TypeName>
+                                                                               
        <gco:aName>
+                                                                               
                <gco:CharacterString>int</gco:CharacterString>
+                                                                               
        </gco:aName>
+                                                                               
</gco:TypeName>
+                                                                       
</gco:attributeType>
+                                                               
</gco:MemberName>
+                                                       
</gmd:sequenceIdentifier>
+                                               </gmd:MD_Band>
+                                       </gmd:dimension>
+                               </gmi:MI_CoverageDescription>
+                       </gmd:contentInfo>
+                       <gmd:distributionInfo>
+                               <gmd:MD_Distribution>
+                                       <gmd:distributionFormat 
xlink:href="#resourceFormat" />
+                                       <gmd:distributor>
+                                               <gmd:MD_Distributor>
+                                                       <gmd:distributorContact>
+                                                               
<gmd:CI_ResponsibleParty>
+                                                                       
<gmd:individualName>
+                                                                               
<gco:CharacterString>GIBS User Services</gco:CharacterString>
+                                                                       
</gmd:individualName>
+                                                                       
<gmd:organisationName>
+                                                                               
<gco:CharacterString>NASA/JPL/GIBS &gt; Global Imagery Browse Services, Jet 
Propulsion Laboratory, NASA</gco:CharacterString>
+                                                                       
</gmd:organisationName>
+                                                                       
<gmd:contactInfo>
+                                                                               
<gmd:CI_Contact>
+                                                                               
        <gmd:address>
+                                                                               
                <gmd:CI_Address>
+                                                                               
                        <gmd:deliveryPoint>
+                                                                               
                                <gco:CharacterString>4800 Oak Grove 
Drive</gco:CharacterString>
+                                                                               
                        </gmd:deliveryPoint>
+                                                                               
                        <gmd:city>
+                                                                               
                                
<gco:CharacterString>Pasadena</gco:CharacterString>
+                                                                               
                        </gmd:city>
+                                                                               
                        <gmd:administrativeArea>
+                                                                               
                                <gco:CharacterString>CA</gco:CharacterString>
+                                                                               
                        </gmd:administrativeArea>
+                                                                               
                        <gmd:postalCode>
+                                                                               
                                
<gco:CharacterString>91109-8099</gco:CharacterString>
+                                                                               
                        </gmd:postalCode>
+                                                                               
                        <gmd:country>
+                                                                               
                                <gco:CharacterString>USA</gco:CharacterString>
+                                                                               
                        </gmd:country>
+                                                                               
                        <gmd:electronicMailAddress>
+                                                                               
                                
<gco:CharacterString>[email protected]</gco:CharacterString>
+                                                                               
                        </gmd:electronicMailAddress>
+                                                                               
                </gmd:CI_Address>
+                                                                               
        </gmd:address>
+                                                                               
        <gmd:onlineResource>
+                                                                               
                <gmd:CI_OnlineResource>
+                                                                               
                        <gmd:linkage>
+                                                                               
                                <gmd:URL>http://gibs.jpl.nasa.gov</gmd:URL>
+                                                                               
                        </gmd:linkage>
+                                                                               
                </gmd:CI_OnlineResource>
+                                                                               
        </gmd:onlineResource>
+                                                                               
</gmd:CI_Contact>
+                                                                       
</gmd:contactInfo>
+                                                                       
<gmd:role>
+                                                                               
<gmd:CI_RoleCode
+                                                                               
        
codeList="http://www.isotc211.org/2005/resources/Codelist/gmxCodelists.xml#CI_RoleCode";
+                                                                               
        codeListValue="distributor">distributor
+                                                                               
</gmd:CI_RoleCode>
+                                                                       
</gmd:role>
+                                                               
</gmd:CI_ResponsibleParty>
+                                                       
</gmd:distributorContact>
+                                               </gmd:MD_Distributor>
+                                       </gmd:distributor>
+                                       {% if 
docs[0].__contains__('product_reference_path_list') and 
docs[0].__contains__('product_reference_type_list') %} 
+                                               {% for i in 
range(docs[0]['product_reference_path_list'].__len__()) %}
+                                                       if 
docs[0]['product_reference_type_list'][i] != 'Thumbnail' %}
+                                                       <gmd:transferOptions>
+                                                               
<gmd:MD_DigitalTransferOptions>
+                                                                       
<gmd:onLine>
+                                                                               
<gmd:CI_OnlineResource>
+                                                                               
        {% if docs[0].__contains__('product_reference_path_list') %}
+                                                                               
                <gmd:linkage>           
+                                                                               
                        <gmd:URL>{{ docs[0]['product_reference_path_list'][i] 
}}</gmd:URL>
+                                                                               
                </gmd:linkage>
+                                                                               
        {% else %}
+                                                                               
                <gmd:linkage gco:nilReason="missing" />
+                                                                               
        {% endif %}
+                                                                               
        {% if docs[0].__contains__('product_reference_name_list') %}
+                                                                               
                <gmd:name>              
+                                                                               
                        <gmd:CharacterString>{{ 
docs[0]['product_reference_name_list'][i] }}</gmd:CharacterString>
+                                                                               
                </gmd:name>
+                                                                               
        {% else %}
+                                                                               
                <gmd:name gco:nilReason="missing" />
+                                                                               
        {% endif %}
+                                                                               
        {% if docs[0].__contains__('product_type_resource_description_list') %}
+                                                                               
                <gmd:description>               
+                                                                               
                        <gmd:CharacterString>{{ 
docs[0]['product_type_resource_description_list'][i] }}</gmd:CharacterString>
+                                                                               
                </gmd:description>
+                                                                               
        {% else %}
+                                                                               
                <gmd:description gco:nilReason="missing" />
+                                                                               
        {% endif %}
+                                                                               
        <gmd:function>
+                                                                               
                <gmd:CI_OnLineFunctionCode
+                                                                               
                        
codeList="http://www.isotc211.org/2005/resources/Codelist/gmxCodelists.xml#CI_OnlineFunctionCode";
+                                                                               
                        codeListValue="information">information
+                                                                               
                </gmd:CI_OnLineFunctionCode>
+                                                                               
        </gmd:function>
+                                                                               
</gmd:CI_OnlineResource>
+                                                                       
</gmd:onLine>
+                                                               
</gmd:MD_DigitalTransferOptions>
+                                                       </gmd:transferOptions>
+                                               {% endfor %}    
+                                       {% else %} 
+                                               <gmd:transferOptions 
gco:nilReason="missing" />
+                                       {% endif %}
+                               </gmd:MD_Distribution>
+                       </gmd:distributionInfo>
+                       <gmd:metadataMaintenance>
+                               <gmd:MD_MaintenanceInformation>
+                                       <gmd:maintenanceAndUpdateFrequency>
+                                               <gmd:MD_MaintenanceFrequencyCode
+                                                       
codeList="http://www.isotc211.org/2005/resources/Codelist/gmxCodelists.xml#MD_MaintenanceFrequencyCode";
+                                                       
codeListValue="asNeeded">asNeeded</gmd:MD_MaintenanceFrequencyCode>
+                                       </gmd:maintenanceAndUpdateFrequency>
+                                       <gmd:maintenanceNote>
+                                               <gco:CharacterString>Translated 
from GCMD DIF
+                                               </gco:CharacterString>
+                                       </gmd:maintenanceNote>
+                               </gmd:MD_MaintenanceInformation>
+                       </gmd:metadataMaintenance>
+                       <gmi:acquisitionInformation>
+                               <gmi:MI_AcquisitionInformation>
+                                       <gmi:instrument>
+                                               <gmi:MI_Instrument>
+                                                       <gmi:identifier 
gco:nilReason="missing" />
+                                                       <gmi:description 
gco:nilReason="missing" />
+                                               </gmi:MI_Instrument>
+                                       </gmi:instrument>
+                                       <gmi:platform>
+                                               <gmi:MI_Platform>
+                                                       <gmi:identifier 
gco:nilReason="missing" />
+                                                       <gmi:description 
gco:nilReason="missing" />
+                                                       <gmi:sponsor>
+                                                               
<gmd:CI_ResponsibleParty>
+                                                                       
<gmd:organisationName>
+                                                                               
<gco:CharacterString>NASA/JPL/GIBS &gt; Global Imagery Browse Services, Jet 
Propulsion Laboratory, NASA</gco:CharacterString>
+                                                                       
</gmd:organisationName>             
+                                                                       
<gmd:contactInfo>
+                                                                               
<gmd:CI_Contact>
+                                                                               
        <gmd:onlineResource>
+                                                                               
                <gmd:CI_OnlineResource>
+                                                                               
                        <gmd:linkage>
+                                                                               
                                <gmd:URL>http://gibs.jpl.nasa.gov</gmd:URL>
+                                                                               
                        </gmd:linkage>
+                                                                               
                        <gmd:function>
+                                                                               
                                <gmd:CI_OnLineFunctionCode
+                                                                               
                                        
codeList="http://www.isotc211.org/2005/resources/Codelist/gmxCodelists.xml#CI_OnLineFunctionCode";
+                                                                               
                                        codeListValue="information" />
+                                                                               
                        </gmd:function>
+                                                                               
                </gmd:CI_OnlineResource>
+                                                                               
        </gmd:onlineResource>
+                                                                               
</gmd:CI_Contact>
+                                                                       
</gmd:contactInfo>
+                                                                       
<gmd:role>
+                                                                               
<gmd:CI_RoleCode
+                                                                               
        
codeList="http://www.isotc211.org/2005/resources/Codelist/gmxCodelists.xml#CI_RoleCode";
+                                                                               
        codeListValue="sponsor" />
+                                                                       
</gmd:role>
+                                                               
</gmd:CI_ResponsibleParty>
+                                                       </gmi:sponsor>
+                                                       <gmi:sponsor>
+                                                               
<gmd:CI_ResponsibleParty>
+                                                                       
<gmd:organisationName>
+                                                                               
<gco:CharacterString>NASA/JPL/PODAAC &gt; Physical
+                                                                               
        Oceanography Distributed Active Archive Center, Jet
+                                                                               
        Propulsion Laboratory, NASA</gco:CharacterString>
+                                                                       
</gmd:organisationName>
+                                                                       
<gmd:contactInfo>
+                                                                               
<gmd:CI_Contact>
+                                                                               
        <gmd:onlineResource>
+                                                                               
                <gmd:CI_OnlineResource>
+                                                                               
                        <gmd:linkage>
+                                                                               
                                <gmd:URL>http://podaac.jpl.nasa.gov</gmd:URL>
+                                                                               
                        </gmd:linkage>
+                                                                               
                        <gmd:function>
+                                                                               
                                <gmd:CI_OnLineFunctionCode
+                                                                               
                                        
codeList="http://www.isotc211.org/2005/resources/Codelist/gmxCodelists.xml#CI_OnLineFunctionCode";
+                                                                               
                                        codeListValue="information" />
+                                                                               
                        </gmd:function>
+                                                                               
                </gmd:CI_OnlineResource>
+                                                                               
        </gmd:onlineResource>
+                                                                               
</gmd:CI_Contact>
+                                                                       
</gmd:contactInfo>
+                                                                       
<gmd:role>
+                                                                               
<gmd:CI_RoleCode
+                                                                               
        
codeList="http://www.isotc211.org/2005/resources/Codelist/gmxCodelists.xml#CI_RoleCode";
+                                                                               
        codeListValue="sponsor" />
+                                                                       
</gmd:role>
+                                                               
</gmd:CI_ResponsibleParty>
+                                                       </gmi:sponsor>
+                                                       <gmi:instrument 
xlink:href="{{ docs[0]['product_name'] }}" />
+                                               </gmi:MI_Platform>
+                                       </gmi:platform>
+                               </gmi:MI_AcquisitionInformation>
+                       </gmi:acquisitionInformation>
+               </gmi:MI_Metadata>
+       </gmd:seriesMetadata>
+</gmd:DS_Series>

http://git-wip-us.apache.org/repos/asf/incubator-sdap-edge/blob/53351bf3/src/main/python/plugins/productType/__init__.py
----------------------------------------------------------------------
diff --git a/src/main/python/plugins/productType/__init__.py 
b/src/main/python/plugins/productType/__init__.py
new file mode 100644
index 0000000..e69de29

http://git-wip-us.apache.org/repos/asf/incubator-sdap-edge/blob/53351bf3/src/main/python/plugins/productType/atom/AtomWriter.py
----------------------------------------------------------------------
diff --git a/src/main/python/plugins/productType/atom/AtomWriter.py 
b/src/main/python/plugins/productType/atom/AtomWriter.py
new file mode 100644
index 0000000..916b89c
--- /dev/null
+++ b/src/main/python/plugins/productType/atom/AtomWriter.py
@@ -0,0 +1,26 @@
+import logging
+import datetime
+
+from edge.elasticsearch.opensearch.datasetatomresponse import 
DatasetAtomResponse
+from edge.elasticsearch.datasetwriter import DatasetWriter
+
+class AtomWriter(DatasetWriter):
+    def __init__(self, configFilePath):
+        super(AtomWriter, self).__init__(configFilePath)
+
+    def _generateOpenSearchResponse(self, solrResponse, searchText, searchUrl, 
searchParams, pretty):
+        response = DatasetAtomResponse(
+            self._configuration.get('portal', 'datasetUrl'),
+            self._configuration.get('service', 'host'),
+            self._configuration.get('service', 'url'),
+            self.datasets
+        )
+
+        response.title = 'GIBS Imagery Search Results'
+        response.link = searchUrl
+        response.authors.append('GIBS Imagery Search Service')
+        response.updated = datetime.datetime.utcnow().isoformat()+'Z'
+        response.id = 'tag:'+self._configuration.get('service', 
'host')+','+datetime.datetime.utcnow().date().isoformat()
+        response.parameters = searchParams
+
+        return response.generate(solrResponse, pretty)

http://git-wip-us.apache.org/repos/asf/incubator-sdap-edge/blob/53351bf3/src/main/python/plugins/productType/atom/__init__.py
----------------------------------------------------------------------
diff --git a/src/main/python/plugins/productType/atom/__init__.py 
b/src/main/python/plugins/productType/atom/__init__.py
new file mode 100644
index 0000000..e69de29

http://git-wip-us.apache.org/repos/asf/incubator-sdap-edge/blob/53351bf3/src/main/python/plugins/productType/atom/plugin.conf
----------------------------------------------------------------------
diff --git a/src/main/python/plugins/productType/atom/plugin.conf 
b/src/main/python/plugins/productType/atom/plugin.conf
new file mode 100644
index 0000000..66e51b6
--- /dev/null
+++ b/src/main/python/plugins/productType/atom/plugin.conf
@@ -0,0 +1,11 @@
+[solr]
+datasetUrl=http://localhost:9200/gibs/productType
+granuleUrl=http://localhost:9200/gibs/product
+entriesPerPage=7
+
+[portal]
+datasetUrl=http://localhost:8000/drupal/dataset
+
+[service]
+url=http://localhost:8890
+host=localhost:8890

http://git-wip-us.apache.org/repos/asf/incubator-sdap-edge/blob/53351bf3/src/main/python/plugins/product_type/__init__.py
----------------------------------------------------------------------
diff --git a/src/main/python/plugins/product_type/__init__.py 
b/src/main/python/plugins/product_type/__init__.py
new file mode 100644
index 0000000..e69de29

http://git-wip-us.apache.org/repos/asf/incubator-sdap-edge/blob/53351bf3/src/main/python/plugins/product_type/atom/Writer.py
----------------------------------------------------------------------
diff --git a/src/main/python/plugins/product_type/atom/Writer.py 
b/src/main/python/plugins/product_type/atom/Writer.py
new file mode 100644
index 0000000..b381f57
--- /dev/null
+++ b/src/main/python/plugins/product_type/atom/Writer.py
@@ -0,0 +1,74 @@
+import logging
+import os
+import os.path
+import urllib
+
+from edge.writer.solrtemplateresponsewriter import SolrTemplateResponseWriter
+from edge.opensearch.solrcmrtemplateresponse import SolrCmrTemplateResponse
+
+class Writer(SolrTemplateResponseWriter):
+    def __init__(self, configFilePath):
+        super(Writer, self).__init__(configFilePath)
+
+        templatePath = os.path.dirname(configFilePath) + os.sep
+        templatePath += self._configuration.get('service', 'template')
+        self.template = self._readTemplate(templatePath)
+
+    def _generateOpenSearchResponse(self, solrResponse, searchText, searchUrl, 
searchParams, pretty):
+        print "product_type:seachParams = [%s]\n" %searchParams
+        response = SolrCmrTemplateResponse(self._configuration, searchUrl, 
searchParams)
+        response.setTemplate(self.template)
+        response.variables['serviceUrl'] = self._configuration.get('service', 
'url')
+
+        return response.generate(solrResponse, pretty=pretty)
+
+    def _constructSolrQuery(self, startIndex, entriesPerPage, parameters, 
facets):
+        queries = []
+        filterQueries = []
+
+        for key, value in parameters.iteritems():
+            if key == 'keyword':
+                queries.append(urllib.quote(value))
+            elif key == 'layers' and value == 'true':
+                filterQueries.append('-product_type_identifier:*_SRC')
+            elif key == 'layers' and value == 'false':
+                filterQueries.append('product_type_identifier:*_SRC')
+            elif key == 'product_type_identifier':
+                filterQueries.append('product_type_identifier:'+value)
+            elif key == 'startTime':
+                
queries.append('product_type_last_updated:['+value+'%20TO%20*]')
+            elif key == 'endTime':
+                
queries.append('product_type_last_updated:[*%20TO%20'+value+']')
+            elif key == 'bbox':
+                coordinates = value.split(",")
+                filterQueries.append('Spatial-Geometry:[' + coordinates[1] + 
',' + coordinates[0] + '%20TO%20' + coordinates[3] + ',' + coordinates[2] + ']')
+            elif key == 'id':
+                queries.append('id:' + self._urlEncodeSolrQueryValue(value))
+
+        for key, value in facets.iteritems():
+            if type(value) is list:
+                if (len(value) == 1):
+                    filterQueries.append(key + ':' + 
self._urlEncodeSolrQueryValue(value[0]))
+                else:
+                    filterQueries.append(key + ':(' + '+OR+'.join([ 
self._urlEncodeSolrQueryValue(x) for x in value ]) + ")")
+            else:    
+                filterQueries.append(key + ':' + 
self._urlEncodeSolrQueryValue(value))
+
+        if len(queries) == 0:
+            queries.append('*:*')
+
+        query = 'q='+'+AND+'.join(queries)+'&version=2.2&indent=on&wt=json'
+
+        if len(filterQueries) > 0:
+            query += '&fq='+'+AND+'.join(filterQueries)
+        
+        if self.facet:
+            query += '&rows=0&facet=true&facet.limit=-1&facet.mincount=1&'
+            query += '&'.join(['facet.field=' + facet for facet in 
self._configuration.get('solr', 'facets').split(',')])
+        else:
+            query += '&start='+str(startIndex)+'&rows='+str(entriesPerPage)
+            query += '&sort=' + self._configuration.get('solr', 'sort')
+
+        logging.debug('solr query: '+query)
+
+        return query

http://git-wip-us.apache.org/repos/asf/incubator-sdap-edge/blob/53351bf3/src/main/python/plugins/product_type/atom/__init__.py
----------------------------------------------------------------------
diff --git a/src/main/python/plugins/product_type/atom/__init__.py 
b/src/main/python/plugins/product_type/atom/__init__.py
new file mode 100644
index 0000000..e69de29

http://git-wip-us.apache.org/repos/asf/incubator-sdap-edge/blob/53351bf3/src/main/python/plugins/product_type/atom/plugin.conf
----------------------------------------------------------------------
diff --git a/src/main/python/plugins/product_type/atom/plugin.conf 
b/src/main/python/plugins/product_type/atom/plugin.conf
new file mode 100644
index 0000000..617e1d4
--- /dev/null
+++ b/src/main/python/plugins/product_type/atom/plugin.conf
@@ -0,0 +1,12 @@
+[solr]
+datasetUrl=http://localhost:8983/solr/product_type
+entriesPerPage=10
+maxEntriesPerPage=2000
+defaultSearchParam=keyword
+parameters=keyword,layers,startTime,endTime,bbox,id
+facets={}
+sort=product_type_title+asc
+
+[service]
+url=http://localhost:8890
+template=template.xml

http://git-wip-us.apache.org/repos/asf/incubator-sdap-edge/blob/53351bf3/src/main/python/plugins/product_type/atom/template.xml
----------------------------------------------------------------------
diff --git a/src/main/python/plugins/product_type/atom/template.xml 
b/src/main/python/plugins/product_type/atom/template.xml
new file mode 100644
index 0000000..b02803e
--- /dev/null
+++ b/src/main/python/plugins/product_type/atom/template.xml
@@ -0,0 +1,116 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<feed esipdiscovery:version="1.2"
+      xmlns="http://www.w3.org/2005/Atom";
+      xmlns:dc="http://purl.org/dc/terms/";
+      xmlns:echo="http://www.echo.nasa.gov/esip";
+      xmlns:gibs="http://gibs.jpl.nasa.gov/esip"; 
+      xmlns:esipdiscovery="http://commons.esipfed.org/ns/discovery/1.2/";
+      xmlns:georss="http://www.georss.org/georss/10";
+      xmlns:gml="http://www.opengis.net/gml";
+      xmlns:os="http://a9.com/-/spec/opensearch/1.1/";
+      xmlns:time="http://a9.com/-/opensearch/extensions/time/1.0/";>
+   <updated>{{ updated }}</updated>
+   <id>https://api.echo.nasa.gov:443/opensearch/datasets.atom</id>
+   <author>
+      <name>GIBS</name>
+      <email>[email protected]</email>
+   </author>
+   <title type="text">GIBS Product Type Metadata</title>
+   <os:totalResults>{{ numFound }}</os:totalResults>
+   <os:itemsPerPage>{{ itemsPerPage }}</os:itemsPerPage>
+   <os:startIndex>{{ startIndex }}</os:startIndex>
+   <os:Query role="request"
+             xmlns:echo="http://www.echo.nasa.gov/esip";
+             xmlns:geo="http://a9.com/-/opensearch/extensions/geo/1.0/";
+             xmlns:time="http://a9.com/-/opensearch/extensions/time/1.0/"; />
+   <subtitle type="text">Search parameters: None</subtitle>
+   <link href="{{ myself }}" hreflang="en-US" rel="self" 
type="application/atom+xml" />
+   {% if last %}<link href="{{ last }}" hreflang="en-US" rel="last" 
type="application/atom+xml" />{% endif %}
+   {% if prev %}<link href="{{ prev }}" hreflang="en-US" rel="previous" 
type="application/atom+xml" />{% endif %}
+   {% if next %}<link href="{{ next }}" hreflang="en-US" rel="next" 
type="application/atom+xml" />{% endif %}
+   {% if first %}<link href="{{ first }}" hreflang="en-US" rel="first" 
type="application/atom+xml" />{% endif %}
+   <link 
href="https://wiki.earthdata.nasa.gov/display/echo/Open+Search+API+release+information";
+         hreflang="en-US" rel="describedBy" title="Release Notes" 
type="text/html" />
+   {% for doc in docs %}
+      <entry>
+         <id>{{ link }}?id={{ doc['product_type_id'] }}</id>
+         <dc:identifier>{{ doc['product_type_identifier'] }}</dc:identifier>
+         <author>
+            <name>GIBS</name>
+            <email>[email protected]</email>
+         </author>
+         <title type="text">{{ doc['product_type_title'] }}</title>
+         {% if doc['product_type_description'] and 
doc['product_type_description'] != 'null' %}
+            <summary type="text">{{ 'summary: ' + 
doc['product_type_description'] }}</summary>
+         {% elif doc['product_type_description'] == 'null' %}
+            <summary type="text">{{ 'summary: product_type_description is set 
to \'null\' in the database for product_type_id:[' + doc['product_type_id'] + 
']' }} </summary>
+         {% else %}
+            <summary type="text">{{ 'summary: product_type_description is not 
in the database for product_type_id:[' + doc['product_type_id'] + ']' }} 
</summary>
+         {% endif %}
+         <updated>{{ doc['product_type_last_updated_string'] }}</updated>
+         {% for i in range(doc['product_type_dataset_id_list']|count)  %}
+             <gibs:cmr>
+               {% if doc['cmr_dataset_id'] %}<echo:datasetId>{{ 
doc['cmr_dataset_id'][i] }}</echo:datasetId>
+               {% else %}<echo:datasetId />{% endif %}
+               {% if doc['cmr_summary'] %}<echo:description>{{ 
doc['cmr_summary'][i] }}</echo:description>
+               {% else %}<echo:description />{% endif %}
+               {% if doc['cmr_short_name'] %}<echo:shortName>{{ 
doc['cmr_short_name'][i] }}</echo:shortName>
+               {% else %}<echo:shortName />{% endif %}
+               {% if doc['cmr_title'] %}<echo:longName>{{ doc['cmr_title'][i] 
}}</echo:longName>
+               {% else %}<echo:longName />{% endif %}
+               {% if doc['cmr_version_id'] %}<echo:versionId>{{ 
doc['cmr_version_id'][i] }}</echo:versionId>
+               {% else %}<echo:versionId />{% endif %}
+               {% if doc['cmr_updated'] %}<echo:lastUpdate>{{ 
doc['cmr_updated'][i] }}</echo:lastUpdate>
+               {% else %}<echo:lastUpdate />{% endif %}
+               {% if doc['cmr_data_center'] %}<echo:dataCenter>{{ 
doc['cmr_data_center'][i] }}</echo:dataCenter>
+               {% else %}<echo:dataCenter />{% endif %}
+               {% if doc['cmr_original_format'] %}<echo:originalFormat>{{ 
doc['cmr_original_format'][i] }}</echo:originalFormat>
+               {% else %}<echo:originalFormat />{% endif %}
+               {% if doc['cmr_orbit_parameters'] %}
+                  {% if doc['cmr_orbit_parameters'][i] != {} 
%}<echo:orbitParameters>{{ doc['cmr_orbit_parameters'][i] 
}}</echo:orbitParameters>
+                  {% else %}<echo:orbitParameters />{% endif %}
+               {% else %}<echo:orbitParameters />{% endif %}
+               {% if doc['cmr_score'] %}<echo:score>{{ doc['cmr_score'][i] 
}}</echo:score>{% else %}<echo:score />{% endif %}
+               {% if doc['cmr_processing_level_id'] 
%}<echo:processingLevelId>{{ doc['cmr_processing_level_id'][i] 
}}</echo:processingLevelId>
+               {% else %}<echo:processingLevelId />{% endif %}
+               {% if doc['cmr_coordinate_system'] %}<echo:coordinateSystem>{{ 
doc['cmr_coordinate_system'][i] }}</echo:coordinateSystem>
+               {% else %}<echo:coordinateSystem />{% endif %}
+               {% if doc['cmr_online_access_flag'] %}<echo:onlineAccessFlag>{{ 
doc['cmr_online_access_flag'][i] }}</echo:onlineAccessFlag>
+               {% else %}<echo:onlineAccessFlag />{% endif %}
+               {% if doc['cmr_browse_flag'] %}<echo:browseFlag>{{ 
doc['cmr_browse_flag'][i] }}</echo:browseFlag>
+               {% else %}<echo:browseFlag />{% endif %}
+               {% if doc['cmr_boxes'] %}
+                  {% for box in doc['cmr_boxes'][i] %}
+                     <georss:box>{{ box }}</georss:box>
+                  {% endfor %}
+               {% else %}<georss:box />{% endif %} 
+               {% if doc['cmr_links'] %}
+                  {% for cmr_link in doc['cmr_links'][i] %}
+                     <link href="{{ cmr_link['href'] }}" hreflang="en-US" 
rel="enclosure" title="{{ cmr_link['title'] }}" />
+                  {% endfor %}
+               {% endif %} 
+             </gibs:cmr>
+         {% endfor %}
+         {% if doc['product_type_metadata_platform'] %}
+            <echo:platform>{{ doc['product_type_metadata_platform'] 
}}</echo:platform>
+         {% else %}
+            <echo:platform>{{ 'platform: product_type_metadata_platform is not 
in the database' }}</echo:platform>
+         {% endif %}
+         {% if doc['product_type_metadata_instrument'] %}
+            <echo:instrument>{{ doc['product_type_metadata_instrument'] 
}}</echo:instrument>
+         {% else %}
+            <echo:instrument>{{ 'instrument: product_type_metadata_instrument 
is not in the database' }}</echo:instrument>
+         {% endif %}
+         {% if doc['product_type_policy_data_format'] %}
+            <echo:dataFormat>{{ doc['product_type_policy_data_format'] 
}}</echo:dataFormat>
+         {% else %}
+            <echo:dataFormat>{{ 'dataFormat: product_type_policy_data_format 
is not in the database' }}</echo:dataFormat>
+         {% endif %}
+         <link href="{{ serviceUrl }}/ws/metadata/product_type?id={{ doc['id'] 
}}&amp;pretty=true"
+               hreflang="en-US" rel="alternate" title="Product Type metadata" 
type="application/xml" />
+         <link href="{{ serviceUrl }}/ws/search/product?product_pt_id={{ 
doc['id'] }}&amp;pretty=true"
+               hreflang="en-US" rel="enclosure" title="Product Search" 
type="application/xml" pretty="true" />
+         <dc:date>{{ doc['product_type_last_updated_string'] }}</dc:date>
+      </entry>
+   {% endfor %}
+</feed>

http://git-wip-us.apache.org/repos/asf/incubator-sdap-edge/blob/53351bf3/src/main/python/plugins/product_type/iso/Writer.py
----------------------------------------------------------------------
diff --git a/src/main/python/plugins/product_type/iso/Writer.py 
b/src/main/python/plugins/product_type/iso/Writer.py
new file mode 100644
index 0000000..84295cf
--- /dev/null
+++ b/src/main/python/plugins/product_type/iso/Writer.py
@@ -0,0 +1,35 @@
+import logging
+import os
+import os.path
+
+from edge.writer.solrtemplateresponsewriter import SolrTemplateResponseWriter
+from edge.opensearch.solrtemplateresponse import SolrTemplateResponse
+
+class Writer(SolrTemplateResponseWriter):
+    def __init__(self, configFilePath):
+        super(Writer, self).__init__(configFilePath)
+
+        templatePath = os.path.dirname(configFilePath) + os.sep
+        templatePath += self._configuration.get('service', 'template')
+        self.template = self._readTemplate(templatePath)
+
+    def _generateOpenSearchResponse(self, solrResponse, searchText, searchUrl, 
searchParams, pretty):
+        response = SolrTemplateResponse(self._configuration, searchUrl, 
searchParams)
+        response.setTemplate(self.template)
+
+        return response.generate(solrResponse, pretty=pretty)
+
+    def _constructSolrQuery(self, startIndex, entriesPerPage, parameters, 
facets):
+        queries = []
+
+        for key, value in parameters.iteritems():
+            if key == 'id':
+                queries.append('id:' + self._urlEncodeSolrQueryValue(value))
+            elif key == 'title':
+                queries.append('product_type_title:' + 
self._urlEncodeSolrQueryValue(value))
+
+        query = 
'q='+'+AND+'.join(queries)+'&version=2.2&indent=on&wt=json'+'&rows='+str(entriesPerPage)
+
+        logging.debug('solr query: '+query)
+
+        return query

http://git-wip-us.apache.org/repos/asf/incubator-sdap-edge/blob/53351bf3/src/main/python/plugins/product_type/iso/__init__.py
----------------------------------------------------------------------
diff --git a/src/main/python/plugins/product_type/iso/__init__.py 
b/src/main/python/plugins/product_type/iso/__init__.py
new file mode 100644
index 0000000..e69de29

http://git-wip-us.apache.org/repos/asf/incubator-sdap-edge/blob/53351bf3/src/main/python/plugins/product_type/iso/plugin.conf
----------------------------------------------------------------------
diff --git a/src/main/python/plugins/product_type/iso/plugin.conf 
b/src/main/python/plugins/product_type/iso/plugin.conf
new file mode 100644
index 0000000..fbe4c31
--- /dev/null
+++ b/src/main/python/plugins/product_type/iso/plugin.conf
@@ -0,0 +1,8 @@
+[solr]
+datasetUrl=http://localhost:8983/solr/product_type
+entriesPerPage=1
+parameters=id,title
+
+[service]
+url=http://localhost:8890
+template=template.xml

Reply via email to