--- a
+++ b/OSSEval/OSProject/views.py
@@ -0,0 +1,109 @@
+from pprint import pformat
+
+from django.contrib import messages
+from django.core.urlresolvers import reverse
+from django.http import HttpResponseRedirect
+from django.shortcuts import render, get_object_or_404
+
+from analysis.models import Analysis, Instance
+from forms import SearchForm
+from flossmole import FSF, FC, GC, GH
+from OSProject.models import OSProjectForge, OSProject, Forge
+from ohloh import OhlohProxy
+from utils import Forges
+
+def instance_list_html(request, analysis_id):
+ '''
+ Part of the required interface
+ '''
+ analysis = Analysis.objects.get(pk=analysis_id)
+ context = {'analysis': analysis}
+ return render(request, 'OSProject/detail.html', context)
+
+def search_html_form(request, analysis_id):
+ '''
+ Part of the required interface
+ '''
+ form = SearchForm(initial={'analysis_id': analysis_id}) # An unbound form
+ return render(request, 'OSProject/search.html', {'form': form})
+
+def search_html(request):
+ '''
+ Part of the required interface
+ '''
+ form = SearchForm(request.POST)
+ if form.is_valid(): # All validation rules pass
+ target = int(str(form.cleaned_data['target']))
+ name = str(form.cleaned_data['name'])
+ analysis_id = str(form.cleaned_data['analysis_id'])
+ projects = []
+ if target == Forges.FC or target == Forges.ALL:
+ projects += FC.search(name)
+ if target == Forges.FSF or target == Forges.ALL:
+ projects += FSF.search(name)
+ if target == Forges.GC or target == Forges.ALL:
+ projects += GC.search(name)
+ if target == Forges.GH or target == Forges.ALL:
+ projects += GH.search(name)
+ if target == Forges.OHLOH or target == Forges.ALL:
+ projects += OhlohProxy.search(name)
+
+ return render(request, 'OSProject/search_results.html', {'projects': projects, 'analysis_id': analysis_id})
+
+def OSProjectForge_delete(request, osprojectforge_id, analysis_id):
+ pf = get_object_or_404(OSProjectForge, pk=osprojectforge_id)
+ osp = pf.os_project
+ i = osp.instance
+ pf.delete()
+ if len(osp.osprojectforge_set.all()) == 0:
+ osp.delete()
+ i.delete()
+
+ return HttpResponseRedirect(reverse('analysis_detail', args=(analysis_id,)))
+
+def OSProjectForge_add(request):
+ #TODO: check there's just one per forge
+ analysis_id = int(request.POST.get("analysis_id", ""))
+ id_forge = int(request.POST.get("id_forge", ""))
+ datasource_id = request.POST.get("datasource_id", "")
+ project_name = request.POST.get("project_name", "")
+ identifier_in_forge = request.POST.get("identifier_in_forge", "")
+ id_selected_instance = int(request.POST.get("id_selected_instance", ""))
+ #id_selected_instance is -1 if I have to create a new instance; otherwise it tells to which instance I should add it
+ if id_selected_instance > 0:
+ instance = Instance.objects.get(pk=id_selected_instance)
+ osp=OSProject.objects.get(instance = instance)
+ for ospf in osp.osprojectforge_set.all():
+ if ospf.forge.id == id_forge:
+ messages.add_message(request, messages.INFO, 'Hello world.')
+ print ('Hello world.')
+ return HttpResponseRedirect(reverse('analysis_detail', args=(analysis_id,)))
+ else:
+ analysis = get_object_or_404(Analysis, pk=analysis_id)
+ instance=Instance.objects.create(name=project_name, name_for_search="", analysis=analysis)
+ osp=OSProject.objects.create(name=project_name, instance=instance)
+ forge=Forge.objects.get(pk=id_forge)
+ pf=OSProjectForge(name=project_name, os_project=osp, forge=forge, identifier_in_forge=identifier_in_forge, datasource_id=datasource_id)
+ pf.save()
+ return HttpResponseRedirect(reverse('analysis_detail', args=(analysis_id,)))
+
+
+def OSProjectForgeFromResultList_detail(request):
+ identifier_in_forge = request.POST.get("identifier_in_forge", "")
+ id_forge = int(request.POST.get("id_forge", ""))
+ pf = OSProjectForge(identifier_in_forge=identifier_in_forge, forge_id=id_forge)
+ osprojectforge_info = pf.getProjectInfo()
+ osprojectforge_info_nice_print = pformat(osprojectforge_info)
+ return render(request, 'OSProject/osprojectforge_detail.html', {'osprojectforge_info': osprojectforge_info, 'osprojectforge_info_nice_print': osprojectforge_info_nice_print})
+
+def OSProjectForge_detail(request, osprojectforge_id):
+ pf = get_object_or_404(OSProjectForge, pk=osprojectforge_id)
+ osprojectforge_info = pf.getProjectInfo()
+ osprojectforge_info_nice_print = pformat(osprojectforge_info)
+ return render(request, 'OSProject/osprojectforge_detail.html', {'osprojectforge_info': osprojectforge_info, 'osprojectforge_info_nice_print': osprojectforge_info_nice_print})
+
+def OSProject_detail(request, osproject_id):
+ osp = get_object_or_404(OSProject, pk=osproject_id)
+ osproject_info = osp.getProjectInfo()
+ osproject_info_nice_print = pformat(osproject_info)
+ return render(request, 'OSProject/osproject_detail.html', {'osprojectforge_info': osproject_info, 'osprojectforge_info_nice_print': osproject_info_nice_print})