def export_antibody_items(file_path) :
    antibodies = Antibody.objects.all() # get all objects
    
    if antibodies: # check if empty
        outfile = open(file_path+'/antibody-items.xml', 'w') # open and write to *-items.xml

        for antibody in antibodies:
            submission_data_list = SubmissionData.objects.all().filter(object_id=antibody.id)

            submission_list = [] # submissions
            for submission_data in submission_data_list:
                applied_protocol_list = []
                if submission_data.applied_protocol_input:
                    applied_protocol_list.append(submission_data.applied_protocol_input)
                if submission_data.applied_protocol_output:
                    applied_protocol_list.append(submission_data.applied_protocol_output)                
                
                for applied_protocol in applied_protocol_list:
                    if applied_protocol.submission.publishable == True:
                        submission_list.append(applied_protocol.submission)
            submission_list = list(set(submission_list)) # Get rid of duplicates

            experiment_list = [] # experiment
            for submission in submission_list:
                experiment_list.extend(submission.experiments.all().filter(publishable=True)) # experiments
            experiment_list = list(set(experiment_list)) # Get rid of duplicates

            project_list = [] # projects
            for experiment in experiment_list:
                project_list.extend(experiment.projects.all().filter(publishable=True))
            project_list = list(set(project_list)) # Get rid of duplicates

            # Only export if there is a related objects
            if submission_data_list or project_list or experiment_list or submission_list: 
                outfile.write('<item id="Antibody_' + str(antibody.id) + '" class="Antibody">\n')
                outfile.write('\t<attribute name="name" value="' + antibody.name + '" />\n')
                outfile.write('\t<attribute name="targetName" value="' + antibody.target_name + '" />\n')
                outfile.write('\t<attribute name="source" value="' + antibody.source + '" />\n')
                outfile.write('\t<attribute name="epitope" value="' + antibody.epitope + '" />\n')
                if antibody.animal_host:
                    outfile.write('\t<attribute name="hostOrganism" value="' + antibody.animal_host.name + '" />\n')
                else:
                    outfile.write('\t<attribute name="hostOrganism" value="" />\n')

                if antibody.target_gene:
                    exporter_utility.write_reference_item(outfile, antibody.target_gene, 'Gene', 'targetGene')
                if project_list:
                    exporter_utility.write_collection_items(outfile, project_list, 'Project', 'projects')
                if experiment_list:
                    exporter_utility.write_collection_items(outfile, experiment_list, 'Experiment', 'experiments')
                if submission_list:
                    exporter_utility.write_collection_items(outfile, submission_list, 'Submission', 'submissions')
                outfile.write('</item>\n')

        outfile.close() # close file
def export_applied_protocol_items(file_path) :
    applied_protocols = AppliedProtocol.objects.all() # get all objects
    
    if applied_protocols: # check if empty
        outfile = open(file_path+'/applied-protocol-items.xml', 'w') # open and write to *-items.xml

        for applied_protocol in applied_protocols:

            input_list = SubmissionData.objects.all().filter(applied_protocol_input=applied_protocol) # submission data
            output_list = SubmissionData.objects.all().filter(applied_protocol_output=applied_protocol) # submission data
            input_list = list(set(input_list)) # Get rid of duplicates
            output_list = list(set(output_list)) # Get rid of duplicates

            outfile.write('<item id="AppliedProtocol_' + str(applied_protocol.id) + '" class="AppliedProtocol">\n')
            outfile.write('\t<attribute name="step" value="' + str(applied_protocol.step) + '" />\n')
            exporter_utility.write_reference_item(outfile, applied_protocol.protocol, 'Protocol', 'protocol')
            exporter_utility.write_reference_item(outfile, applied_protocol.submission, 'Submission', 'submission')
            if input_list:
                exporter_utility.write_collection_items(outfile, input_list, 'SubmissionData', 'inputs')
            if output_list:
                exporter_utility.write_collection_items(outfile, output_list, 'SubmissionData', 'outputs')
            outfile.write('</item>\n')

        outfile.close() # close file
def export_toxoplasma_mutant_items(file_path) :
    toxoplasma_mutants = ToxoplasmaMutant.objects.all() # get all objects
    
    if toxoplasma_mutants: # check if empty
        outfile = open(file_path+'/toxoplasma-mutant-items.xml', 'w') # open and write to *-items.xml

        for toxoplasma_mutant in toxoplasma_mutants:
            submission_data_list = SubmissionData.objects.all().filter(object_id=toxoplasma_mutant.id)

            submission_list = [] # submissions
            for submission_data in submission_data_list:
                applied_protocol_list = []
                if submission_data.applied_protocol_input:
                    applied_protocol_list.append(submission_data.applied_protocol_input)
                if submission_data.applied_protocol_output:
                    applied_protocol_list.append(submission_data.applied_protocol_output)                
                
                for applied_protocol in applied_protocol_list:
                    if applied_protocol.submission.publishable == True:
                        submission_list.append(applied_protocol.submission)
            submission_list = list(set(submission_list)) # Get rid of duplicates

            experiment_list = [] # experiment
            for submission in submission_list:
                experiment_list.extend(submission.experiments.all().filter(publishable=True)) # experiments
            experiment_list = list(set(experiment_list)) # Get rid of duplicates

            project_list = [] # projects
            for experiment in experiment_list:
                project_list.extend(experiment.projects.all().filter(publishable=True))
            project_list = list(set(project_list)) # Get rid of duplicates

            # Only export if there is a related objects
            if submission_data_list or project_list or experiment_list or submission_list: 
                outfile.write('<item id="ToxoplasmaMutant_' + str(toxoplasma_mutant.id) + '" class="ToxoplasmaMutant">\n')
                outfile.write('\t<attribute name="name" value="' + toxoplasma_mutant.name + '" />\n')
                outfile.write('\t<attribute name="targetName" value="' + toxoplasma_mutant.target_name + '" />\n')
                outfile.write('\t<attribute name="mutantSelection" value="' + toxoplasma_mutant.selection.name + '" />\n')
                outfile.write('\t<attribute name="mutantType" value="' + toxoplasma_mutant.mutation_type.name + '" />\n')
                outfile.write('\t<attribute name="mutantBackground" value="' + toxoplasma_mutant.background.name + '" />\n')

                strain = ''
                background = ''

                organism_property_list = OrganismProperty.objects.all().filter(organism=toxoplasma_mutant.organism) # organism property
                for organism_property in organism_property_list:
                    if organism_property.organism_property_type.name == 'organism strain':
                        strain = organism_property.organism_property_value.name
                    if organism_property.organism_property_type.name == 'organism type':
                        background = organism_property.organism_property_value.name

                outfile.write('\t<attribute name="strain" value="' + strain + '" />\n')
                outfile.write('\t<attribute name="background" value="' + background + '" />\n')
    
                if toxoplasma_mutant.target_gene:
                    exporter_utility.write_reference_item(outfile, toxoplasma_mutant.target_gene, 'Gene', 'targetGene')
                if toxoplasma_mutant.organism:
                    exporter_utility.write_reference_item(outfile, toxoplasma_mutant.organism, 'Organism', 'organism')
                if project_list:
                    exporter_utility.write_collection_items(outfile, project_list, 'Project', 'projects')
                if experiment_list:
                    exporter_utility.write_collection_items(outfile, experiment_list, 'Experiment', 'experiments')
                if submission_list:
                    exporter_utility.write_collection_items(outfile, submission_list, 'Submission', 'submissions')
                outfile.write('</item>\n')

        outfile.close() # close file
def export_submission_data_items(file_path) :
    submission_data = SubmissionData.objects.all() # get all objects
    
    if submission_data: # check if empty
        outfile = open(file_path+'/submissiondata-items.xml', 'w') # open and write to *-items.xml

        for submission_data_singleton in submission_data:
            outfile.write('<item id="SubmissionData_' + str(submission_data_singleton.id) + '" class="SubmissionData">\n')
            outfile.write('\t<attribute name="series" value="' + str(submission_data_singleton.series) + '" />\n')
            outfile.write('\t<attribute name="partOf" value="na" />\n')
            if submission_data_singleton.applied_protocol_input:
                exporter_utility.write_reference_item(outfile, submission_data_singleton.applied_protocol_input, 'AppliedProtocol', 'inputAppliedProtocol')
            if submission_data_singleton.applied_protocol_output:
                exporter_utility.write_reference_item(outfile, submission_data_singleton.applied_protocol_output, 'AppliedProtocol', 'outputAppliedProtocol')

            if submission_data_singleton.content_type==ContentType.objects.get_for_model(ToxoplasmaMutant):
                exporter_utility.write_reference_item(outfile, submission_data_singleton.content_object, 'ToxoplasmaMutant', 'toxoplasmaMutant')
            if submission_data_singleton.content_type==ContentType.objects.get_for_model(Antibody):
                exporter_utility.write_reference_item(outfile, submission_data_singleton.content_object, 'Antibody', 'antibody')
            if submission_data_singleton.content_type==ContentType.objects.get_for_model(ExperimentalFactor):
                exporter_utility.write_reference_item(outfile, submission_data_singleton.content_object, 'ExperimentalFactor', 'experimentalFactor')
            if submission_data_singleton.content_type==ContentType.objects.get_for_model(MicroArray):
                exporter_utility.write_reference_item(outfile, submission_data_singleton.content_object, 'MicroArray', 'microArray')
            if submission_data_singleton.content_type==ContentType.objects.get_for_model(Sequencing):
                exporter_utility.write_reference_item(outfile, submission_data_singleton.content_object, 'Sequencing', 'sequencing')
            if submission_data_singleton.content_type==ContentType.objects.get_for_model(DataAnalysis):
                exporter_utility.write_reference_item(outfile, submission_data_singleton.content_object, 'DataAnalysis', 'dataAnalysis')
            if submission_data_singleton.content_type==ContentType.objects.get_for_model(PersistentDataFile):
                exporter_utility.write_reference_item(outfile, submission_data_singleton.content_object, 'PersistentDataFile', 'persistentDataFile')
            if submission_data_singleton.content_type==ContentType.objects.get_for_model(SubmissionDataFile):
                exporter_utility.write_reference_item(outfile, submission_data_singleton.content_object, 'SubmissionDataFile', 'submissionDataFile')

            outfile.write('</item>\n')

        outfile.close() # close file