You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sdap.apache.org by le...@apache.org on 2017/10/27 22:41:45 UTC

[08/15] incubator-sdap-edge git commit: SDAP-1 Import all code under the SDAP SGA

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>gibs@gibs.jpl.nasa.gov</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>support@echo.nasa.gov</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>support@echo.nasa.gov</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 %}
+]