http://git-wip-us.apache.org/repos/asf/incubator-sdap-edge/blob/53351bf3/src/main/python/plugins/product_type/iso/template.xml
----------------------------------------------------------------------
diff --git a/src/main/python/plugins/product_type/iso/template.xml 
b/src/main/python/plugins/product_type/iso/template.xml
new file mode 100644
index 0000000..bb0d415
--- /dev/null
+++ b/src/main/python/plugins/product_type/iso/template.xml
@@ -0,0 +1,914 @@
+<?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_type_identifier'] 
}}</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_type_provider_contact_role_list') and
+                    
docs[0]['product_type_provider_contact_role_list'].__contains__('POINT_OF_CONTACT')
 %}
+                    <gmd:contact>
+                        {% for i in 
range(docs[0]['product_type_provider_contact_role_list'].__len__()) %}
+                            {% if 
docs[0]['product_type_provider_contact_role_list'][i] == 'POINT_OF_CONTACT' %}
+                                <gmd:CI_ResponsibleParty 
id="seriesMetadataContact">
+                                    <gmd:individualName>                       
                     
+                                        <gco:CharacterString>
+                                            {% if 
docs[0]['product_type_provider_contact_first_name_list'][i] != 'null' %} 
+                                                {{ 
docs[0]['product_type_provider_contact_first_name_list'][i] }}
+                                            {% endif %}
+                                            {% if 
docs[0]['product_type_provider_contact_middle_name_list'][i] != 'null' %} 
+                                                {{ 
docs[0]['product_type_provider_contact_middle_name_list'][i] }}
+                                            {% endif %} 
+                                            {{ 
docs[0]['product_type_provider_contact_last_name_list'][i] }}
+                                        </gco:CharacterString>
+                                    </gmd:individualName>
+                                    <gmd:organisationName>
+                                        <gco:CharacterString>{{ 
docs[0]['product_type_provider_short_name'] }} &gt; {{ 
docs[0]['product_type_provider_long_name'] }}</gco:CharacterString>
+                                    </gmd:organisationName>
+                                    <gmd:positionName>
+                                        <gco:CharacterString>{{ 
docs[0]['product_type_provider_contact_role_list'][i] }}</gco:CharacterString>
+                                    </gmd:positionName>             
+                                    <gmd:contactInfo>
+                                        <gmd:CI_Contact>
+                                            <gmd:phone>
+                                                <gmd:CI_Telephone>
+                                                    {% if 
docs[0]['product_type_provider_contact_phone_list'][i] != 'null' %}
+                                                        <gmd:voice>
+                                                            
<gco:CharacterString>{{ docs[0]['product_type_provider_contact_phone_list'][i] 
}}</gco:CharacterString>
+                                                        </gmd:voice>
+                                                    {% else %}
+                                                        <gmd:voice 
gco:nilReason="missing" />
+                                                    {% endif %}
+                                                    {% if 
docs[0]['product_type_provider_contact_fax_list'][i] != 'null' %}
+                                                        <gmd:facsimile>
+                                                            
<gco:CharacterString>{{ docs[0]['product_type_provider_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_type_provider_contact_address_list'][i] != 'null' %}
+                                                        
<gmd:electronicMailAddress>
+                                                            
<gco:CharacterString>{{ 
docs[0]['product_type_provider_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_type_last_updated_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_type_title') %}
+                                    <gmd:title>
+                                        <gco:CharacterString>{{ 
docs[0]['product_type_title'] }}</gco:CharacterString>
+                                    </gmd:title> 
+                                {% else %} 
+                                    <gmd:title gco:nilReason="missing" />
+                               {% endif %}
+                                {% if 
docs[0].__contains__('product_type_identifier') %}
+                                    <gmd:alternateTitle>
+                                        <gco:CharacterString>{{ 
docs[0]['product_type_identifier'] }}</gco:CharacterString>
+                                    </gmd:alternateTitle> 
+                                {% else %} 
+                                    <gmd:alternateTitle 
gco:nilReason="missing" />
+                               {% endif %}
+                               <gmd:date>
+                                   <gmd:CI_Date>
+                                       <gmd:date>                              
        
+                                           <gco:Date>{{ 
docs[0]['product_type_last_updated_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_type_version') %}
+                                    <gmd:edition>
+                                        <gco:CharacterString>{{ 
docs[0]['product_type_version'] }}</gco:CharacterString>
+                                    </gmd:edition> 
+                                {% else %} 
+                                    <gmd:edition gco:nilReason="missing" />
+                               {% endif %}           
+                                {% if 
docs[0].__contains__('product_type_provider_resource_type_list') and
+                                    
docs[0]['product_type_provider_resource_type_list'].__contains__('ORIGINATOR') 
%}
+                                    <gmd:citedResponsibleParty>
+                                        {% for i in 
range(docs[0]['product_type_provider_resource_type_list'].__len__()) %}
+                                            {% if 
docs[0]['product_type_provider_resource_type_list'][i] == 'ORIGINATOR' %}
+                                                <gmd:CI_ResponsibleParty 
id="seriesMetadataContact">
+                                                    <gmd:individualName>       
                                     
+                                                        
<gco:CharacterString>{{ docs[0]['product_type_provider_resource_name_list'][i] 
}}</gco:CharacterString>
+                                                    </gmd:individualName>
+                                                    <gmd:contactInfo>
+                                                        <gmd:CI_Contact>
+                                                            {% if 
docs[0]['product_type_provider_resource_path_list'][i] != 'null' %}
+                                                                
<gmd:onlineResource>
+                                                                    
<gmd:CI_OnlineResource>
+                                                                        
<gmd:linkage>
+                                                                            
<gmd:URL>{{ docs[0]['product_type_provider_resource_path_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="originator">originator
+                                                        </gmd:CI_RoleCode>
+                                                    </gmd:role>
+                                                </gmd:CI_ResponsibleParty>
+                                            {% endif %}
+                                        {% endfor %}                           
             
+                                    </gmd:citedResponsibleParty>
+                                {% else %}
+                                    <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>
+                                {% endif %}        
+                                {% if 
docs[0].__contains__('product_type_provider_resource_type_list') and
+                                    
docs[0]['product_type_provider_resource_type_list'].__contains__('PUBLISHER') %}
+                                    <gmd:citedResponsibleParty>
+                                        {% for i in 
range(docs[0]['product_type_provider_resource_type_list'].__len__()) %}
+                                            {% if 
docs[0]['product_type_provider_resource_type_list'][i] == 'PUBLISHER' %}
+                                                <gmd:CI_ResponsibleParty 
id="seriesMetadataContact">
+                                                    <gmd:individualName>       
                                     
+                                                        
<gco:CharacterString>{{ docs[0]['product_type_provider_resource_name_list'][i] 
}}</gco:CharacterString>
+                                                    </gmd:individualName>
+                                                    <gmd:organisationName>
+                                                        
<gco:CharacterString>{{ docs[0]['product_type_provider_short_name'] }} &gt; {{ 
docs[0]['product_type_provider_long_name'] }}</gco:CharacterString>
+                                                    </gmd:organisationName>
+                                                    <gmd:contactInfo>          
                          
+                                                        <gmd:CI_Contact>
+                                                            <gmd:address>
+                                                                
<gmd:CI_Address>
+                                                                    <gmd:city 
gco:nilReason="missing" />
+                                                                
</gmd:CI_Address>
+                                                            </gmd:address>
+                                                        </gmd:CI_Contact>
+                                                    </gmd:contactInfo>
+                                                    <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>
+                                            {% endif %}
+                                        {% endfor %}
+                                    </gmd:citedResponsibleParty>    
+                                {% else %}
+                                    <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>
+                                {% endif %}   
+                            </gmd:CI_Citation>
+                        </gmd:citation>
+                        {% if docs[0].__contains__('product_type_description') 
%}
+                            <gmd:abstract>
+                                <gco:CharacterString>{{ 
docs[0]['product_type_description'] }}</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_type_provider_contact_role_list') and
+                            
docs[0]['product_type_provider_contact_role_list'].__contains__('POINT_OF_CONTACT')
 %}
+                            <gmd:pointOfContact>
+                                {% for i in 
range(docs[0]['product_type_provider_contact_role_list'].__len__()) %}
+                                    {% if 
docs[0]['product_type_provider_contact_role_list'][i] == 'POINT_OF_CONTACT' %}
+                                        <gmd:CI_ResponsibleParty 
id="seriesMetadataContact">
+                                            <gmd:individualName>               
                             
+                                                <gco:CharacterString>
+                                                    {% if 
docs[0]['product_type_provider_contact_first_name_list'][i] != 'null' %} 
+                                                        {{ 
docs[0]['product_type_provider_contact_first_name_list'][i] }}
+                                                    {% endif %}
+                                                    {% if 
docs[0]['product_type_provider_contact_middle_name_list'][i] != 'null' %} 
+                                                        {{ 
docs[0]['product_type_provider_contact_middle_name_list'][i] }}
+                                                    {% endif %} 
+                                                    {{ 
docs[0]['product_type_provider_contact_last_name_list'][i] }}
+                                                </gco:CharacterString>
+                                            </gmd:individualName>
+                                            <gmd:organisationName>
+                                                <gco:CharacterString>{{ 
docs[0]['product_type_provider_short_name'] }} &gt; {{ 
docs[0]['product_type_provider_long_name'] }}</gco:CharacterString>
+                                            </gmd:organisationName>     
+                                            <gmd:contactInfo>
+                                                <gmd:CI_Contact>
+                                                    <gmd:phone>
+                                                        <gmd:CI_Telephone>
+                                                            <gmd:voice>
+                                                                {% if 
docs[0]['product_type_provider_contact_phone_list'][i] != 'null' %}
+                                                                    
<gco:CharacterString>{{ docs[0]['product_type_provider_contact_phone_list'][i] 
}}</gco:CharacterString>
+                                                                {% else %} 
+                                                                    
<gco:CharacterString>GIBS: status-pointOfContact-contactInfo-phone-voice not 
provided</gco:CharacterString>
+                                                                {% endif %} 
+                                                            </gmd:voice>
+                                                            <gmd:facsimile>
+                                                                {% if 
docs[0]['product_type_provider_contact_fax_list'][i] != 'null' %}
+                                                                    
<gco:CharacterString>{{ docs[0]['product_type_provider_contact_fax_list'][i] 
}}</gco:CharacterString>
+                                                                {% else %} 
+                                                                    
<gco:CharacterString>GIBS: status-pointOfContact-contactInfo-phone-facsimile 
not provided</gco:CharacterString>
+                                                                {% endif %} 
+                                                            </gmd:facsimile>
+                                                        </gmd:CI_Telephone>
+                                                    </gmd:phone>
+                                                    <gmd:address>
+                                                        <gmd:CI_Address>
+                                                            
<gmd:electronicMailAddress>
+                                                                {% if 
docs[0]['product_type_provider_contact_address_list'][i] != 'null' %}
+                                                                    
<gco:CharacterString>{{ 
docs[0]['product_type_provider_contact_address_list'][i] 
}}</gco:CharacterString>
+                                                                {% else %} 
+                                                                    
<gco:CharacterString>GIBS: 
status-pointOfContact-contactInfo-address-electronicMailAddress not 
provided</gco:CharacterString>
+                                                                {% endif %}
+                                                            
</gmd:electronicMailAddress>
+                                                        </gmd:CI_Address>
+                                                    </gmd:address>
+                                                    <gmd:contactInstructions>
+                                                        
<gco:CharacterString>Phone/FAX/E-mail</gco:CharacterString>
+                                                    </gmd:contactInstructions>
+                                                    {% if 
docs[0]['product_type_provider_resource_path_list'][i] != 'null' %}
+                                                        <gmd:onlineResource>
+                                                            
<gmd:CI_OnlineResource>
+                                                                <gmd:linkage>
+                                                                    
<gmd:URL>{{ docs[0]['product_type_provider_resource_path_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_type_resource_name_list') %}    
+                            <gmd:resourceFormat>
+                                {% for i in 
range(docs[0]['product_type_resource_name_list'].__len__()) %}
+                                    <gmd:MD_Format id="resourceFormat">
+                                        {% if 
docs[0].__contains__('product_type_resource_name_list') %}
+                                            <gmd:name>
+                                                <gco:CharacterString>{{ 
docs[0]['product_type_resource_name_list'][i] }}</gco:CharacterString>
+                                            </gmd:name>
+                                        {% else %}
+                                            <gmd:name gco:nilReason="missing" 
/>
+                                        {% endif %}
+                                       {% if 
docs[0].__contains__('product_type_policy_version_list') %}
+                                            <gmd:version>
+                                                <gco:CharacterString>{{ 
docs[0]['product_type_policy_version_list'][i] }}</gco:CharacterString>
+                                            </gmd:version>
+                                        {% else %}
+                                            <gmd:version 
gco:nilReason="missing" />
+                                        {% endif %}
+                                        {% if 
docs[0].__contains__('product_type_policy_compress_type_list') %}
+                                            <gmd:fileDecompressionTechnique>
+                                                <gco:CharacterString>{{ 
docs[0]['product_type_policy_compress_type_list'][i] }}</gco:CharacterString>
+                                            </gmd:fileDecompressionTechnique>
+                                        {% else %}
+                                            <gmd:fileDecompressionTechnique 
gco:nilReason="missing" />
+                                        {% endif %}
+                                    </gmd:MD_Format>
+                                {% endfor %}
+                            </gmd:resourceFormat>
+                        {% else %}
+                            <gmd:resourceFormat gco:nilReason="missing" /> 
+                        {% endif %}                                     
+                       {% if 
docs[0].__contains__('product_type_resource_name_list') %}
+                            {% for i in 
range(docs[0]['product_type_resource_name_list'].__len__()) %}
+                                <gmd:descriptiveKeywords>
+                                    <gmd:MD_Keywords>
+                                        <gmd:keyword>   
+                                            <gco:CharacterString>
+                                                {{ 
docs[0]['product_type_resource_name_list'][i] }} &gt;
+                                                {{ 
docs[0]['product_type_resource_description_list'][i] }} &gt;
+                                                {{ 
docs[0]['product_type_resource_path_list'][i] }} &gt;
+                                                Type: {{ 
docs[0]['product_type_resource_type_list'][i] }}
+                                            </gco:CharacterString>
+                                        </gmd:keyword>
+                                        <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>
+                            {% 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="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>
+                        {% endif %}                                     
+                        {% if 
docs[0].__contains__('product_type_metadata_region_coverage') %}
+                            <gmd:descriptiveKeywords>
+                                <gmd:MD_Keywords>
+                                    <gmd:keyword>
+                                        
<gco:CharacterString>{{docs[0]['product_type_metadata_region_coverage'] 
}}</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>
+                        {% 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 %}                                      
+                        {% if 
docs[0].__contains__('product_type_policy_use_constraint_list') %}
+                            {% for i in 
range(docs[0]['product_type_policy_use_constraint_list'].__len__()) %}
+                                <gmd:resourceConstraints>
+                                    <gmd:MD_LegalConstraints>
+                                        <gmd:useLimitation>
+                                            
<gco:CharacterString>{{docs[0]['product_type_policy_use_constraint_list'][i] 
}}</gco:CharacterString>
+                                        </gmd:useLimitation>                   
                                     
+                                        {% if 
docs[0]['product_type_policy_use_constraint_list'][i] != 'null' %}
+                                            <gmd:otherConstraints>
+                                                
<gco:CharacterString>{{docs[0]['product_type_policy_use_constraint_list'][i] 
}}</gco:CharacterString>
+                                            </gmd:otherConstraints>
+                                        {% endif %}
+                                    </gmd:MD_LegalConstraints>
+                                </gmd:resourceConstraints>
+                            {% endfor %}
+                        {% else %}
+                            <gmd:resourceConstraints gco:nilReason="unknown" />
+                        {% endif %}                                      
+                       <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>
+                               
+                        {% if 
docs[0].__contains__('product_type_coverage_west_longitude_list') %}
+                            <gmd:extent>
+                                {% for i in 
range(docs[0]['product_type_coverage_west_longitude_list'].__len__()) %}
+                                    <gmd:EX_Extent id="boundingExtent">
+                                        <gmd:geographicElement>
+                                            <gmd:EX_GeographicBoundingBox 
id="boundingBox">
+                                                <gmd:extentTypeCode>
+                                                    
<gco:Boolean>true</gco:Boolean>
+                                                </gmd:extentTypeCode>
+                                                {% if 
docs[0].__contains__('product_type_coverage_west_longitude_list') %}
+                                                    <gmd:westBoundLongitude>
+                                                        <gco:Decimal>{{ 
docs[0]['product_type_coverage_west_longitude_list'][i] }}</gco:Decimal>
+                                                    </gmd:westBoundLongitude>
+                                                {% else %}
+                                                    <gmd:westBoundLongitude 
gco:nilReason="missing" />
+                                                {% endif %}
+                                               {% if 
docs[0].__contains__('product_type_coverage_east_longitude_list') %}
+                                                    <gmd:eastBoundLongitude>
+                                                        <gco:Decimal>{{ 
docs[0]['product_type_coverage_east_longitude_list'][i] }}</gco:Decimal>
+                                                    </gmd:eastBoundLongitude>
+                                                {% else %}
+                                                    <gmd:eastBoundLongitude 
gco:nilReason="missing" />
+                                                {% endif %}   
+                                                {% if 
docs[0].__contains__('product_type_coverage_south_latitude_list') %}
+                                                    <gmd:southBoundLongitude>
+                                                        <gco:Decimal>{{ 
docs[0]['product_type_coverage_south_latitude_list'][i] }}</gco:Decimal>
+                                                    </gmd:southBoundLongitude>
+                                                {% else %}
+                                                    <gmd:southBoundLongitude 
gco:nilReason="missing" />
+                                                {% endif %} 
+                                                {% if 
docs[0].__contains__('product_type_coverage_north_latitude_list') %}
+                                                    <gmd:northBoundLongitude>
+                                                        <gco:Decimal>{{ 
docs[0]['product_type_coverage_north_latitude_list'][i] }}</gco:Decimal>
+                                                    </gmd:northBoundLongitude>
+                                                {% else %}
+                                                    <gmd:northBoundLongitude 
gco:nilReason="missing" />
+                                                {% endif %} 
+                                            </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">
+                                                        {% if 
docs[0].__contains__('product_type_coverage_start_time_list') %}
+                                                            <beginPosition>{{ 
docs[0]['product_type_coverage_start_time_list'][i] }}</beginPosition>
+                                                        {% else %}
+                                                            <beginPosition 
gco:nilReason="missing" />
+                                                        {% endif %}
+                                                         {% if 
docs[0].__contains__('product_type_coverage_stop_time_list') %}
+                                                            <endPosition>{{ 
docs[0]['product_type_coverage_stop_time_list'][i] }}</endPosition>
+                                                        {% else %}
+                                                            <endPosition 
gco:nilReason="missing" />
+                                                        {% endif %}
+                                                    </TimePeriod>
+                                               </gmd:extent>
+                                           </gmd:EX_TemporalExtent>
+                                       </gmd:temporalElement>
+                                        <gmd:verticalElement 
gco:nilReason="inapplicable" />
+                                   </gmd:EX_Extent>
+                                {% endfor %}
+                            </gmd:extent>      
+                        {% else %}
+                            <gmd:extent gco:nilReason="missing" />        
+                        {% endif %}
+                    </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_type_resource_type_list') and 
docs[0]['product_type_resource_type_list'][i] != 'Thumbnail' %} 
+                           {% for i in 
range(docs[0]['product_type_resource_type_list'].__len__()) %}
+                                {% if 
docs[0]['product_type_resource_type_list'][i] != 'Thumbnail' %}
+                                    <gmd:transferOptions>
+                                        <gmd:MD_DigitalTransferOptions>
+                                            <gmd:onLine>
+                                                <gmd:CI_OnlineResource>
+                                                    {% if 
docs[0].__contains__('product_type_resource_path_list') %}
+                                                        <gmd:linkage>          
+                                                            <gmd:URL>{{ 
docs[0]['product_type_resource_path_list'][i] }}</gmd:URL>
+                                                        </gmd:linkage>
+                                                    {% else %}
+                                                        <gmd:linkage 
gco:nilReason="missing" />
+                                                    {% endif %}
+                                                    {% if 
docs[0].__contains__('product_type_resource_name_list') %}
+                                                        <gmd:name>             
+                                                            
<gmd:CharacterString>{{ docs[0]['product_type_resource_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>
+                                {% endif %}
+                           {% 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>
+                                {% if 
docs[0].__contains__('product_type_identifier') %}
+                                    <gmi:identifier>
+                                        <gmd:MD_Identifier>
+                                            <gmd:code>
+                                                <gco:CharacterString>{{ 
docs[0]['product_type_identifier'] }}</gco:CharacterString>
+                                            </gmd:code>
+                                        </gmd:MD_Identifier>
+                                    </gmi:identifier>
+                                {% else %} 
+                                    <gmi:identifier gco:nilReason="missing" />
+                                {% endif %}    
+                                {% if 
docs[0].__contains__('product_type_metadata_instrument') %}
+                                    <gmi:description>
+                                        <gco:CharacterString>{{ 
docs[0]['product_type_metadata_instrument'] }}</gco:CharacterString>            
                                               
+                                    </gmi:description>
+                                {% else %} 
+                                    <gmd:description gco:nilReason="missing" />
+                                {% endif %}
+                           </gmi:MI_Instrument>
+                       </gmi:instrument>
+                       <gmi:platform>
+                           <gmi:MI_Platform>
+                               {% if 
docs[0].__contains__('product_type_identifier') %}
+                                    <gmi:identifier>
+                                        <gmd:MD_Identifier>
+                                            <gmd:code>
+                                                <gco:CharacterString>{{ 
docs[0]['product_type_identifier'] }}</gco:CharacterString>
+                                            </gmd:code>
+                                        </gmd:MD_Identifier>
+                                    </gmi:identifier>
+                                {% else %} 
+                                    <gmi:identifier gco:nilReason="missing" />
+                                {% endif %}                    
+                               {% if 
docs[0].__contains__('product_type_metadata_platform') %}
+                                    <gmi:description>
+                                        <gco:CharacterString>{{ 
docs[0]['product_type_metadata_platform'] }}</gco:CharacterString>              
                                               
+                                    </gmi:description>
+                                {% else %} 
+                                    <gmd:description gco:nilReason="missing" />
+                                {% endif %}
+                               <gmi:sponsor>
+                                   <gmd:CI_ResponsibleParty>
+                                        {% if 
docs[0].__contains__('product_type_metadata_project') %}
+                                            <gmd:organisationName>
+                                                <gco:CharacterString>{{ 
docs[0]['product_type_metadata_project'] }}</gco:CharacterString>
+                                            </gmd:organisationName>
+                                        {% else %} 
+                                            <gmd:organisationName 
gco:nilReason="missing" />
+                                        {% endif %}
+                                       <gmd:contactInfo>
+                                           <gmd:CI_Contact>
+                                                {% if 
docs[0]['product_type_provider_resource_path_list'][i] != 'null' %}
+                                                    <gmd:onlineResource>
+                                                        <gmd:CI_OnlineResource>
+                                                            <gmd:linkage>
+                                                                <gmd:URL>{{ 
docs[0]['product_type_provider_resource_path_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="sponsor" />
+                                       </gmd:role>
+                                   </gmd:CI_ResponsibleParty>
+                               </gmi:sponsor>
+                               <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:instrument xlink:href="{{ 
docs[0]['product_type_title'] }}" />
+                           </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/samos/__init__.py
----------------------------------------------------------------------
diff --git a/src/main/python/plugins/samos/__init__.py 
b/src/main/python/plugins/samos/__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/samos/json/Writer.py
----------------------------------------------------------------------
diff --git a/src/main/python/plugins/samos/json/Writer.py 
b/src/main/python/plugins/samos/json/Writer.py
new file mode 100644
index 0000000..3b2ac7d
--- /dev/null
+++ b/src/main/python/plugins/samos/json/Writer.py
@@ -0,0 +1,89 @@
+import logging
+import os
+import os.path
+import urllib
+
+from edge.writer.solrtemplateresponsewriter import SolrTemplateResponseWriter
+from edge.response.solrjsontemplateresponse import SolrJsonTemplateResponse
+
+class Writer(SolrTemplateResponseWriter):
+    def __init__(self, configFilePath):
+        super(Writer, self).__init__(configFilePath)
+        
+        self.contentType = 'application/json'
+
+        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 = SolrJsonTemplateResponse(searchUrl, searchParams)
+        response.setTemplate(self.template)
+
+        return response.generate(solrResponse, pretty=pretty)
+
+    def _constructSolrQuery(self, startIndex, entriesPerPage, parameters, 
facets):
+        queries = []
+        filterQueries = []
+        sort = None
+
+        for key, value in parameters.iteritems():
+            if value != "":
+                if key == 'keyword':
+                    queries.append(urllib.quote(value))
+                elif key == 'startTime':
+                    filterQueries.append('time:['+value+'%20TO%20*]')
+                elif key == 'endTime':
+                    filterQueries.append('time:[*%20TO%20'+value+']')
+                elif key == 'bbox':
+                    coordinates = value.split(",")
+                    filterQueries.append('loc:[' + coordinates[1] + ',' + 
coordinates[0] + '%20TO%20' + coordinates[3] + ',' + coordinates[2] + ']')
+                elif key == 'variable':
+                    if value.lower() == 'sss':
+                        filterQueries.append('SSS:[*%20TO%20*]')
+                    elif value.lower() == 'sst':
+                        filterQueries.append('SST:[*%20TO%20*]')
+                    elif value.lower() == 'wind':
+                        filterQueries.append('wind_speed:[*%20TO%20*]')
+                elif key == "minDepth":
+                    if 'variable' in parameters:
+                        if parameters['variable'].lower() == 'sss':
+                            
filterQueries.append('(SSS_depth:['+value+'%20TO%20*]+OR+(*:*%20NOT%20SSS_depth:*))')
+                        elif parameters['variable'].lower() == 'sst':
+                            
filterQueries.append('(SST_depth:['+value+'%20TO%20*]+OR+(*:*%20NOT%20SST_depth:*))')
+                        elif parameters['variable'].lower() == 'wind':
+                            
filterQueries.append('(wind_depth:['+value+'%20TO%20*]+OR+(*:*%20NOT%20wind_depth:*))')
+                elif key == "maxDepth":
+                    if 'variable' in parameters:
+                        if parameters['variable'].lower() == 'sss':
+                            
filterQueries.append('(SSS_depth:[*%20TO%20'+value+']+OR+(*:*%20NOT%20SSS_depth:*))')
+                        elif parameters['variable'].lower() == 'sst':
+                            
filterQueries.append('(SST_depth:[*%20TO%20'+value+']+OR+(*:*%20NOT%20SST_depth:*))')
+                        elif parameters['variable'].lower() == 'wind':
+                            
filterQueries.append('(wind_depth:[*%20TO%20'+value+']+OR+(*:*%20NOT%20wind_depth:*))')
+                elif key == 'platform':
+                    if type(value) is list:
+                        filterQueries.append('platform:(' + '+OR+'.join(value) 
+ ')')
+                    else:
+                        filterQueries.append('platform:'+value)
+
+        if len(queries) == 0:
+            queries.append('*:*')
+
+        query = 
'q='+'+AND+'.join(queries)+'&wt=json&start='+str(startIndex)+'&rows='+str(entriesPerPage)
+
+        if len(filterQueries) > 0:
+            query += '&fq='+'+AND+'.join(filterQueries)
+
+        if sort is not None:
+            query += '&sort=' + sort
+
+        if 'stats' in parameters and parameters['stats'].lower() == 'true':
+            query += 
'&stats=true&stats.field={!min=true%20max=true}SSS_depth&stats.field={!min=true%20max=true}SST_depth&stats.field={!min=true%20max=true}wind_depth'
+
+        if 'facet' in parameters and parameters['facet'].lower() == 'true':
+            query += 
'&facet=true&facet.field=platform&facet.field=device&facet.limit=-1&facet.mincount=1'
+
+        logging.debug('solr query: '+query)
+
+        return query

http://git-wip-us.apache.org/repos/asf/incubator-sdap-edge/blob/53351bf3/src/main/python/plugins/samos/json/__init__.py
----------------------------------------------------------------------
diff --git a/src/main/python/plugins/samos/json/__init__.py 
b/src/main/python/plugins/samos/json/__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/samos/json/plugin.conf
----------------------------------------------------------------------
diff --git a/src/main/python/plugins/samos/json/plugin.conf 
b/src/main/python/plugins/samos/json/plugin.conf
new file mode 100644
index 0000000..2df9aa0
--- /dev/null
+++ b/src/main/python/plugins/samos/json/plugin.conf
@@ -0,0 +1,11 @@
+[solr]
+datasetUrl=http://localhost:8983/solr/samos
+entriesPerPage=10
+maxEntriesPerPage=100000
+defaultSearchParam=keyword
+parameters=keyword,startTime,endTime,bbox,minDepth,maxDepth,variable,stats,platform,facet
+facets={}
+
+[service]
+url=http://doms.coaps.fsu.edu
+template=template.json

http://git-wip-us.apache.org/repos/asf/incubator-sdap-edge/blob/53351bf3/src/main/python/plugins/samos/json/template.json
----------------------------------------------------------------------
diff --git a/src/main/python/plugins/samos/json/template.json 
b/src/main/python/plugins/samos/json/template.json
new file mode 100755
index 0000000..e3071b5
--- /dev/null
+++ b/src/main/python/plugins/samos/json/template.json
@@ -0,0 +1,63 @@
+{
+{% if last %}"last": "{{ last }}",{% endif %}
+{% if prev %}"prev": "{{ prev }}",{% endif %}
+{% if next %}"next": "{{ next }}",{% endif %}
+{% if first %}"first": "{{ first }}",{% endif %}
+"results":[
+{% for doc in docs %}
+{
+"time": "{{ doc['time'] }}",
+"point": "Point({{ doc['loc'].split(',')[1] }} {{ doc['loc'].split(',')[0] 
}})",
+"sea_water_temperature": {{ doc['SST'] | jsonify }},
+"sea_water_temperature_depth": {{ doc['SST_depth'] | jsonify }},
+"sea_water_temperature_quality": {% if doc['SST_quality'] == False %}0{% elif 
doc['SST_quality'] == True %}1{% else %}null{% endif %},
+"wind_speed": {{ doc['wind_speed'] | jsonify }},
+"eastward_wind": {{ doc['wind_u'] | jsonify }},
+"northward_wind": {{ doc['wind_v'] | jsonify }},
+"wind_depth": {{ doc['wind_depth'] | jsonify }},
+"wind_quality": {% if doc['wind_quality'] == False %}0{% elif 
doc['wind_quality'] == True %}1{% else %}null{% endif %},
+"sea_water_salinity": {{ doc['SSS'] | jsonify }},
+"sea_water_salinity_depth": {{ doc['SSS_depth'] | jsonify }},
+"sea_water_salinity_quality": {% if doc['SSS_quality'] == False %}0{% elif 
doc['SSS_quality'] == True %}1{% else %}null{% endif %},
+"platform": {{ doc['platform'] | jsonify }},
+"device": {{ doc['device'] | jsonify }},
+"mission": {{ doc['mission'] | jsonify }},
+"metadata": "{{ doc['meta'] }}"
+}
+{% if not loop.last %}
+,
+{% endif %}
+{% endfor %}
+]
+,"totalResults":{{ numFound }}
+,"startIndex":{{ startIndex  }}
+,"itemsPerPage":{{ itemsPerPage }}
+{% if stats %}
+,
+"stats_fields": {{ stats['stats_fields'] | jsonify }}
+{% endif %}
+{% if facets %}
+,
+"facets":[
+{% for key, facet in facets['facet_fields'].iteritems() %}
+{
+"field": "{{ key }}",
+"values":[
+{% for i in range(0, facet|count, 2) %}
+{
+"count":{{facet[i+1] }},
+"value": "{{ facet[i] }}"
+}
+{% if not loop.last %}
+,
+{% endif %}
+{% endfor %}
+]
+}
+{% if not loop.last %}
+,
+{% endif %}
+{% endfor %}
+]
+{% endif %}
+}

http://git-wip-us.apache.org/repos/asf/incubator-sdap-edge/blob/53351bf3/src/main/python/plugins/slcp/__init__.py
----------------------------------------------------------------------
diff --git a/src/main/python/plugins/slcp/__init__.py 
b/src/main/python/plugins/slcp/__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/slcp/atom/Writer.py
----------------------------------------------------------------------
diff --git a/src/main/python/plugins/slcp/atom/Writer.py 
b/src/main/python/plugins/slcp/atom/Writer.py
new file mode 100644
index 0000000..7bdae8c
--- /dev/null
+++ b/src/main/python/plugins/slcp/atom/Writer.py
@@ -0,0 +1,86 @@
+import logging
+import os
+import os.path
+import urllib
+import json
+
+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)
+        response.variables['serviceUrl'] = self._configuration.get('service', 
'url')
+
+        return response.generate(solrResponse, pretty=pretty)
+
+    def _constructSolrQuery(self, startIndex, entriesPerPage, parameters, 
facets):
+        sortKeys = json.loads(self._configuration.get('solr', 'sortKeys'))
+
+        queries = []
+        filterQueries = []
+        sort = None
+        sortDir = 'asc'
+        start = '*'
+        end = '*'
+
+        for key, value in parameters.iteritems():
+            if value != "":
+                if key == 'keyword':
+                    queries.append(urllib.quote(value))
+                elif key == 'startTime':
+                    start = value
+                elif key == 'endTime':
+                    end = value
+                elif key == 'bbox':
+                    coordinates = value.split(",")
+                    filterQueries.append('Spatial-Geometry:[' + coordinates[1] 
+ ',' + coordinates[0] + '%20TO%20' + coordinates[3] + ',' + coordinates[2] + 
']')
+                elif key == 'concept_id':
+                    queries.append('concept-id:' + 
self._urlEncodeSolrQueryValue(value))
+                elif key == 'sortKey':
+                    if value in sortKeys.keys():
+                        sort = sortKeys[value]
+                elif key == 'sortDir':
+                    sortDir = value
+                elif key == 'inDAT':
+                    filterQueries.append('InDAT:%s' % value)
+        queries.append('(BeginningEndingDateTime:['+start+'%20TO%20' + end + 
']+OR+(*:*%20NOT%20BeginningEndingDateTime:*))')
+
+        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.facetDefs.values()])
+        else:
+            query += '&start='+str(startIndex)+'&rows='+str(entriesPerPage)
+            if sort is not None:
+                query += '&sort=' + urllib.quote(sort + ' ' + sortDir + 
",InternalVersion desc")
+            else:
+                query += '&sort=' + urllib.quote("score desc,InternalVersion 
desc")
+
+        logging.debug('solr query: '+query)
+
+        return query

http://git-wip-us.apache.org/repos/asf/incubator-sdap-edge/blob/53351bf3/src/main/python/plugins/slcp/atom/__init__.py
----------------------------------------------------------------------
diff --git a/src/main/python/plugins/slcp/atom/__init__.py 
b/src/main/python/plugins/slcp/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/slcp/atom/plugin.conf
----------------------------------------------------------------------
diff --git a/src/main/python/plugins/slcp/atom/plugin.conf 
b/src/main/python/plugins/slcp/atom/plugin.conf
new file mode 100644
index 0000000..428406f
--- /dev/null
+++ b/src/main/python/plugins/slcp/atom/plugin.conf
@@ -0,0 +1,12 @@
+[solr]
+datasetUrl=http://localhost:8983/solr/dataset
+entriesPerPage=10
+maxEntriesPerPage=2000
+defaultSearchParam=keyword
+parameters=keyword,startTime,endTime,bbox,concept_id,sortKey,sortDir,inDAT
+facets={"Collection": "Collection", "Processing_Level": "ProcessingLevelBin", 
"Swath_Spatial_Resolution": "SwathSpatialResolution", 
"Grid_Spatial_Resolution": "GridSpatialResolution", "Temporal_Resolution": 
"TemporalResolution", "Parameter": "TermKeyword"}
+sortKeys={"Relevance": "score", "Long_Name": "LongName", "Short_Name": 
"ShortName", "Processing_Level": "ProcessingLevelId", "Start_Date": 
"BeginningDateTime", "Stop_Date": "EndingDateTime", "Last_Updated": 
"LastUpdate"}
+
+[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/slcp/atom/template.xml
----------------------------------------------------------------------
diff --git a/src/main/python/plugins/slcp/atom/template.xml 
b/src/main/python/plugins/slcp/atom/template.xml
new file mode 100755
index 0000000..3b7fdce
--- /dev/null
+++ b/src/main/python/plugins/slcp/atom/template.xml
@@ -0,0 +1,148 @@
+<?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: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>ECHO</name>
+<email>[email protected]</email>
+</author>
+<title type="text">ECHO dataset 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="https://api.echo.nasa.gov:443/opensearch/granules/descriptor_document.xml";
 hreflang="en-US" rel="search" type="application/opensearchdescription+xml" />
+<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 }}?concept_id={{ doc['concept-id'] }}</id>
+<dc:identifier>{{ doc['SlcpShortName'] }}</dc:identifier>
+<author>
+<name>ECHO</name>
+<email>[email protected]</email>
+</author>
+<title type="text">{{ doc['LongName'] }}</title>
+<summary type="text">{{ doc['Description'] }}</summary>
+<updated>{{ doc['LastUpdate'] }}</updated>
+<echo:datasetId>{{ doc['DataSetId'] }}</echo:datasetId>
+<echo:shortName>{{ doc['ShortName'] }}</echo:shortName>
+<echo:longName>{{ doc['LongName'] }}</echo:longName>
+<echo:versionId>{{ doc['VersionId'] }}</echo:versionId>
+<echo:dataCenter>{{ doc['ArchiveCenter'] }}</echo:dataCenter>
+{% if doc['ProcessingLevelId'] %}
+<echo:processingLevelId>{{ doc['ProcessingLevelId'] }}</echo:processingLevelId>
+{% endif %}
+{% if doc['DataFormat'] %}
+<echo:dataFormat>{{ doc['DataFormat'] }}</echo:dataFormat>
+{% endif %}
+{% if doc['CategoryKeyword'] %}
+<echo:scienceKeywords>
+{% for i in range(doc['CategoryKeyword']|count)  %}
+<echo:scienceKeyword>
+<echo:categoryKeyword>{{ doc['CategoryKeyword'][i] }}</echo:categoryKeyword>
+<echo:topicKeyword>{{ doc['TopicKeyword'][i] }}</echo:topicKeyword>
+<echo:termKeyword>{{ doc['TermKeyword'][i] }}</echo:termKeyword>
+<echo:variableLevel1Keyword>
+<echo:value>{{ doc['VariableLevel1Keyword'][i] }}</echo:value>
+</echo:variableLevel1Keyword>
+{% if doc['DetailedVariableKeyword'] %}
+<echo:detailedVariableKeyword>{{ doc['DetailedVariableKeyword'][i] 
}}</echo:detailedVariableKeyword>
+{% endif %}
+</echo:scienceKeyword>
+{% endfor %}
+</echo:scienceKeywords>
+{% endif %}
+<echo:platforms>
+{% for i in range(doc['Platform-ShortName']|count)  %}
+<echo:platform>
+<echo:shortName>{{ doc['Platform-ShortName'][i] }}</echo:shortName>
+<echo:longName>{{ doc['Platform-LongName'][i] }}</echo:longName>
+{% if doc['Instrument-ShortName_' + i|string] %}
+<echo:instruments>
+{% for j in range(doc['Instrument-ShortName_' + i|string]|count)  %}
+<echo:instrument>
+<echo:shortName>{{ doc['Instrument-ShortName_' + i|string][j] 
}}</echo:shortName>
+<echo:longName>{{ doc['Instrument-LongName_' + i|string][j] }}</echo:longName>
+{% if doc['Sensor-ShortName_' + i|string + '_' + j|string] %}
+<echo:sensors>
+{% for k in range(doc['Sensor-ShortName_' + i|string + '_' + j|string]|count)  
%}
+<echo:sensor>
+<echo:shortName>{{ doc['Sensor-ShortName_' + i|string + '_' + j|string][k] 
}}</echo:shortName>
+<echo:longName>{{ doc['Sensor-LongName_' + i|string + '_' + j|string][k] 
}}</echo:longName>
+</echo:sensor>
+{% endfor %}
+</echo:sensors>
+{% endif %}
+</echo:instrument>
+{% endfor %}
+</echo:instruments>
+{% endif %}
+</echo:platform>
+{% endfor %}
+</echo:platforms>
+<echo:additionalAttributes>
+{% for key in ['GlobalAttrTitle', 'GlobalAttrDescription', 'GlobalAttrSource', 
'GlobalAttrContact', 'GlobalAttrUnits'] %}
+{% if doc[key] %}
+<echo:additionalAttribute>
+<echo:name>{{ key }}</echo:name>
+<echo:value>{{ doc[key] }}</echo:value>
+</echo:additionalAttribute>
+{% endif %}
+{% endfor %}
+</echo:additionalAttributes>
+{% for i in range(doc['OnlineAccessURL-URL']|count)  %}
+{% if doc['OnlineAccessURL-URLDescription'][i].endswith('PO.DAAC') %}
+{% elif doc['OnlineAccessURL-URLDescription'][i].endswith('NODC') %}
+<link href="{{ doc['OnlineAccessURL-URL'][i] }}" hreflang="en-US" 
rel="enclosure" {% if doc['OnlineAccessURL-URLDescription'] and 
doc['OnlineAccessURL-URLDescription'][i] != ''  %} title="Data Access {{ 
doc['OnlineAccessURL-URLDescription'][i][:-5] }}" {% endif %} />
+{% else %}
+<link href="{{ doc['OnlineAccessURL-URL'][i] }}" hreflang="en-US" 
rel="enclosure" {% if doc['OnlineAccessURL-URLDescription'] and 
doc['OnlineAccessURL-URLDescription'][i] != ''  %} title="Data Access {{ 
doc['OnlineAccessURL-URLDescription'][i] }}" {% endif %} />
+{% endif %}
+{% endfor %}
+{% for i in range(doc['OnlineResource-URL']|count)  %}
+<link href="{{ doc['OnlineResource-URL'][i] }}" hreflang="en-US" 
rel="describedBy" {% if doc['OnlineResource-Description'] and 
doc['OnlineResource-Description'][i] != ''  %} title="{{ 
doc['OnlineResource-Description'][i] }}" {% endif %} />
+{% endfor %}
+{% if doc['CoordinateSystem'] %}
+<echo:coordinateSystem>{{ doc['CoordinateSystem'] }}</echo:coordinateSystem>
+{% endif %}
+{% if 0 == 1 %}
+<echo:orbitParameters />
+<relevance:score>0.5</relevance:score>
+{% endif %}
+{% for point in doc['Spatial-Point']  %}
+<georss:point>{{ point }}</georss:point>
+{% endfor %}
+{% for line in doc['Spatial-Line']  %}
+<georss:line>{{ line }}</georss:line>
+{% endfor %}
+{% for box in doc['Spatial-Box']  %}
+<georss:box>{{ box }}</georss:box>
+{% endfor %}
+{% for polygon in doc['Spatial-Polygon']  %}
+<georss:polygon>{{ polygon }}</georss:polygon>
+{% endfor %}
+{% if 0 == 1 %}
+<link href="http://gcmd.nasa.gov/getdif.htm?FIFE_STRM_15M"; hreflang="en-US" 
rel="enclosure" title="doi:10.3334/ORNLDAAC/1" type="text/html" />
+{% endif %}
+{% if doc['has-granules'] == 'true'  %}
+<link 
href="https://api.echo.nasa.gov:443/opensearch/granules.atom?clientId=&amp;shortName={{
 doc['ShortName'] }}&amp;versionId={{ doc['VersionId'] }}&amp;dataCenter={{ 
doc['ArchiveCenter'] }}" hreflang="en-US" rel="search" title="Search for 
granules" type="application/atom+xml" />
+{% endif %}
+{% if 0 == 1 %}
+<link 
href="https://api.echo.nasa.gov:443/opensearch/granules/descriptor_document.xml?clientId=&amp;shortName=doi:10.3334/ORNLDAAC/1&amp;versionId=1&amp;dataCenter=ORNL_DAAC";
 hreflang="en-US" rel="search" title="Custom ECHO Granule Open Search 
Descriptor Document" type="application/opensearchdescription+xml" />
+{% endif %}
+<link href="{{ serviceUrl }}/ws/metadata/dataset?slcpShortName={{ 
doc['SlcpShortName'] }}" hreflang="en-US" rel="alternate" title="Product 
metadata" type="application/xml" />
+{% for dt in doc['BeginningEndingDateTime']  %}
+{% if ' ' not in dt %}
+<dc:date>{{ dt }}/{{ dt }}</dc:date>
+{% else %}
+<dc:date>{{ dt[1:dt.index(' ')] }}/{% if '*' not in dt %}{{ dt[dt.rindex(' 
')+1:-1] }}{% endif %}</dc:date>
+{% endif %}
+{% endfor %}
+</entry>
+{% endfor %}
+</feed>

http://git-wip-us.apache.org/repos/asf/incubator-sdap-edge/blob/53351bf3/src/main/python/plugins/slcp/basin/Writer.py
----------------------------------------------------------------------
diff --git a/src/main/python/plugins/slcp/basin/Writer.py 
b/src/main/python/plugins/slcp/basin/Writer.py
new file mode 100644
index 0000000..77bfc9a
--- /dev/null
+++ b/src/main/python/plugins/slcp/basin/Writer.py
@@ -0,0 +1,35 @@
+import logging
+import os
+import os.path
+import urllib
+
+from edge.writer.solrtemplateresponsewriter import SolrTemplateResponseWriter
+from edge.response.solrjsontemplateresponse import SolrJsonTemplateResponse
+
+class Writer(SolrTemplateResponseWriter):
+    def __init__(self, configFilePath):
+        super(Writer, self).__init__(configFilePath)
+        
+        self.contentType = 'application/json'
+
+        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 = SolrJsonTemplateResponse()
+        response.setTemplate(self.template)
+
+        return response.generate(solrResponse, pretty=pretty)
+
+    def _constructSolrQuery(self, startIndex, entriesPerPage, parameters, 
facets):
+        queries = []
+
+        if len(queries) == 0:
+            queries.append('*:*')
+
+        query = 
'q='+'+AND+'.join(queries)+'&version=2.2&indent=on&wt=json&start='+str(startIndex)+'&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/slcp/basin/__init__.py
----------------------------------------------------------------------
diff --git a/src/main/python/plugins/slcp/basin/__init__.py 
b/src/main/python/plugins/slcp/basin/__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/slcp/basin/plugin.conf
----------------------------------------------------------------------
diff --git a/src/main/python/plugins/slcp/basin/plugin.conf 
b/src/main/python/plugins/slcp/basin/plugin.conf
new file mode 100644
index 0000000..ea5d9e3
--- /dev/null
+++ b/src/main/python/plugins/slcp/basin/plugin.conf
@@ -0,0 +1,11 @@
+[solr]
+datasetUrl=http://localhost:8983/solr/basin
+entriesPerPage=201
+maxEntriesPerPage=201
+defaultSearchParam=keyword
+parameters=keyword
+facets={}
+
+[service]
+url=http://localhost:8890
+template=template.json

http://git-wip-us.apache.org/repos/asf/incubator-sdap-edge/blob/53351bf3/src/main/python/plugins/slcp/basin/template.json
----------------------------------------------------------------------
diff --git a/src/main/python/plugins/slcp/basin/template.json 
b/src/main/python/plugins/slcp/basin/template.json
new file mode 100755
index 0000000..8947699
--- /dev/null
+++ b/src/main/python/plugins/slcp/basin/template.json
@@ -0,0 +1,68 @@
+[
+{% for doc in docs %}
+{
+"name": {{ doc['name'] | jsonify }},
+{% set bbox = doc['bbox'][9:-1].split(',') %}
+"bbox": {
+"maxx": {{ bbox[1] }},
+"maxy": {{ bbox[2] }},
+"minx": {{ bbox[0] }},
+"miny": {{ bbox[3] }}
+},
+"polygon": [
+{% if doc['polygon'].startswith('POLYGON') %}
+[
+{% set points = doc['polygon'][9:-2].split(',') %}
+{% for pt in points %}
+[
+{{ pt.replace(' ', ',') }}
+]
+{% if not loop.last %}
+,
+{% endif %}
+{% endfor %}
+]
+{% else %}
+{% set polygons = doc['polygon'][16:-3].split(')), ((') %}
+{% for polygon in polygons %}
+[
+{% set points = polygon.split(', ') %}
+{% for pt in points %}
+[
+{{ pt.replace(' ', ',') }}
+]
+{% if not loop.last %}
+,
+{% endif %}
+{% endfor %}
+]
+{% if not loop.last %}
+,
+{% endif %}
+{% endfor %}
+{% endif %}
+],
+"esri": {{ doc['esri'] | jsonify }},
+"articCode": {{ doc['articCode'] }},
+"subContinentName": {{ doc['subContinentName'] | jsonify }},
+"color": {{ doc['color'] }},
+"seaName": {{ doc['seaName'] | jsonify }},
+"seaBasinCode": {{ doc['seaBasinCode'] }},
+"basinArea": {{ doc['basinArea'] }},
+"basinOrder": {{ doc['basinOrder'] }},
+"oceanCode": {{ doc['oceanCode'] }},
+"symbolFLD": {{ doc['symbolFLD'] | jsonify }},
+"basinLength": {{ doc['basinLength'] }},
+"seaCode": {{ doc['seaCode'] }},
+"oceanName": {{ doc['oceanName'] | jsonify }},
+"up6": {{ doc['up6'] | jsonify }},
+"subContinentCode": {{ doc['subContinentCode'] }},
+"hydro": {{ doc['hydro'] | jsonify }},
+"seaBasinName": {{ doc['seaBasinName'] | jsonify }},
+"id": {{ doc['id'] }}
+}
+{% if not loop.last %}
+,
+{% endif %}
+{% endfor %}
+]


Reply via email to