ontologies_controller.rb revision 3c4b1bd39fa36d241f2ef0d6f7ebbf2a9a6f4d36
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen#
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen# Controller for ontologies
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen#
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainenclass OntologiesController < InheritedResources::Base
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen include FilesHelper
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen belongs_to :repository, finder: :find_by_path!
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen respond_to :json, :xml
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen has_pagination
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen has_scope :search, :state
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen actions :index, :show, :edit, :update
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen before_filter :check_write_permission, :except => [:index, :show, :oops_state]
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen before_filter :check_read_permissions
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen def index
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen if in_repository?
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen @count = end_of_association_chain.total_count
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen render :index_repository
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen else
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen @count = resource_class.count
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen render :index_global
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen end
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen end
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen def new
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen @ontology_version = build_resource.versions.build
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen @c_vertices = Category.first.roots.first.children rescue []
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen end
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen def edit
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen @ontology = resource
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen @c_vertices = Category.first.roots.first.children rescue []
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen end
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen def update
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen resource.category_ids = user_selected_categories
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen super
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen end
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen def create
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen @version = build_resource.versions.first
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen @version.user = current_user
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen super
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen resource.category_ids = user_selected_categories
8fcff4c5b52f24d9c681805fdf06b486f1d0fcbeTimo Sirainen end
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen def show
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen @content_object = :ontology
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen if !params[:repository_id]
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen # redirect for legacy routing
8fcff4c5b52f24d9c681805fdf06b486f1d0fcbeTimo Sirainen ontology = Ontology.find params[:id]
8fcff4c5b52f24d9c681805fdf06b486f1d0fcbeTimo Sirainen redirect_to [ontology.repository, ontology]
9aa52288a4b53186d81b0ec9afa7d9e0a8ee8753Timo Sirainen return
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen end
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen
e06c0b65c16ccce69bbee009ead14d7d3d17a256Timo Sirainen respond_to do |format|
8fcff4c5b52f24d9c681805fdf06b486f1d0fcbeTimo Sirainen format.html do
8fcff4c5b52f24d9c681805fdf06b486f1d0fcbeTimo Sirainen if !resource.distributed?
abe8230dd1dd37d7ccf0163100e934bb5e658c20Timo Sirainen redirect_to repository_ontology_entities_path(parent, resource,
abe8230dd1dd37d7ccf0163100e934bb5e658c20Timo Sirainen :kind => resource.entities.groups_by_kind.first.kind)
abe8230dd1dd37d7ccf0163100e934bb5e658c20Timo Sirainen else
abe8230dd1dd37d7ccf0163100e934bb5e658c20Timo Sirainen redirect_to repository_ontology_children_path(parent, resource)
abe8230dd1dd37d7ccf0163100e934bb5e658c20Timo Sirainen end
abe8230dd1dd37d7ccf0163100e934bb5e658c20Timo Sirainen end
abe8230dd1dd37d7ccf0163100e934bb5e658c20Timo Sirainen format.json do
d17a90f5ae38edc8c0e6bf42c2162c9c18edb891Timo Sirainen respond_with resource
abe8230dd1dd37d7ccf0163100e934bb5e658c20Timo Sirainen end
3f190f4cbb9233a3a6830956cb5c7ae56a577b79Timo Sirainen end
3f190f4cbb9233a3a6830956cb5c7ae56a577b79Timo Sirainen end
f3f8d30207fd7d6c430361039dbfa88e6ffce411Timo Sirainen
f3f8d30207fd7d6c430361039dbfa88e6ffce411Timo Sirainen def retry_failed
f3f8d30207fd7d6c430361039dbfa88e6ffce411Timo Sirainen scope = end_of_association_chain
f3f8d30207fd7d6c430361039dbfa88e6ffce411Timo Sirainen
f3f8d30207fd7d6c430361039dbfa88e6ffce411Timo Sirainen if id = params[:id]
f3f8d30207fd7d6c430361039dbfa88e6ffce411Timo Sirainen # retry a specific ontology
f3f8d30207fd7d6c430361039dbfa88e6ffce411Timo Sirainen scope = scope.where(id: id)
abe8230dd1dd37d7ccf0163100e934bb5e658c20Timo Sirainen end
abe8230dd1dd37d7ccf0163100e934bb5e658c20Timo Sirainen
abe8230dd1dd37d7ccf0163100e934bb5e658c20Timo Sirainen scope.retry_failed
abe8230dd1dd37d7ccf0163100e934bb5e658c20Timo Sirainen
abe8230dd1dd37d7ccf0163100e934bb5e658c20Timo Sirainen redirect_to (id ? [parent, scope.first!, :ontology_versions] : [parent, :ontologies])
abe8230dd1dd37d7ccf0163100e934bb5e658c20Timo Sirainen end
abe8230dd1dd37d7ccf0163100e934bb5e658c20Timo Sirainen
abe8230dd1dd37d7ccf0163100e934bb5e658c20Timo Sirainen def oops_state
abe8230dd1dd37d7ccf0163100e934bb5e658c20Timo Sirainen respond_to do |format|
abe8230dd1dd37d7ccf0163100e934bb5e658c20Timo Sirainen format.json do
abe8230dd1dd37d7ccf0163100e934bb5e658c20Timo Sirainen respond_with resource.versions.current.try(:request)
abe8230dd1dd37d7ccf0163100e934bb5e658c20Timo Sirainen end
abe8230dd1dd37d7ccf0163100e934bb5e658c20Timo Sirainen end
abe8230dd1dd37d7ccf0163100e934bb5e658c20Timo Sirainen end
abe8230dd1dd37d7ccf0163100e934bb5e658c20Timo Sirainen
abe8230dd1dd37d7ccf0163100e934bb5e658c20Timo Sirainen
abe8230dd1dd37d7ccf0163100e934bb5e658c20Timo Sirainen protected
abe8230dd1dd37d7ccf0163100e934bb5e658c20Timo Sirainen
abe8230dd1dd37d7ccf0163100e934bb5e658c20Timo Sirainen def check_read_permissions
abe8230dd1dd37d7ccf0163100e934bb5e658c20Timo Sirainen unless params[:action] == 'index'
abe8230dd1dd37d7ccf0163100e934bb5e658c20Timo Sirainen authorize!(:show, Repository.find_by_path(params[:repository_id]))
abe8230dd1dd37d7ccf0163100e934bb5e658c20Timo Sirainen end
abe8230dd1dd37d7ccf0163100e934bb5e658c20Timo Sirainen end
abe8230dd1dd37d7ccf0163100e934bb5e658c20Timo Sirainen
abe8230dd1dd37d7ccf0163100e934bb5e658c20Timo Sirainen def build_resource
abe8230dd1dd37d7ccf0163100e934bb5e658c20Timo Sirainen @ontology ||= begin
abe8230dd1dd37d7ccf0163100e934bb5e658c20Timo Sirainen type = (params[:ontology] || {}).delete(:type)
abe8230dd1dd37d7ccf0163100e934bb5e658c20Timo Sirainen clazz = type=='DistributedOntology' ? DistributedOntology : SingleOntology
abe8230dd1dd37d7ccf0163100e934bb5e658c20Timo Sirainen @ontology = clazz.new params[:ontology]
abe8230dd1dd37d7ccf0163100e934bb5e658c20Timo Sirainen @ontology.repository = parent
abe8230dd1dd37d7ccf0163100e934bb5e658c20Timo Sirainen @ontology
abe8230dd1dd37d7ccf0163100e934bb5e658c20Timo Sirainen end
abe8230dd1dd37d7ccf0163100e934bb5e658c20Timo Sirainen end
abe8230dd1dd37d7ccf0163100e934bb5e658c20Timo Sirainen
abe8230dd1dd37d7ccf0163100e934bb5e658c20Timo Sirainen def check_write_permission
abe8230dd1dd37d7ccf0163100e934bb5e658c20Timo Sirainen authorize! :write, parent
abe8230dd1dd37d7ccf0163100e934bb5e658c20Timo Sirainen end
abe8230dd1dd37d7ccf0163100e934bb5e658c20Timo Sirainen
abe8230dd1dd37d7ccf0163100e934bb5e658c20Timo Sirainen def build_categories_tree(vertex)
abe8230dd1dd37d7ccf0163100e934bb5e658c20Timo Sirainen @a ||= []
7f773564b94e6054a40d3785cb63c29f1e4d4deeTimo Sirainen vertex.children.each { |child| build_categories_tree(child) unless child.children.empty?; @a << child }
7f773564b94e6054a40d3785cb63c29f1e4d4deeTimo Sirainen @a
7f773564b94e6054a40d3785cb63c29f1e4d4deeTimo Sirainen end
7f773564b94e6054a40d3785cb63c29f1e4d4deeTimo Sirainen
7f773564b94e6054a40d3785cb63c29f1e4d4deeTimo Sirainen def user_selected_categories
7f773564b94e6054a40d3785cb63c29f1e4d4deeTimo Sirainen params[:category_ids].keys unless params[:category_ids].nil?
7f773564b94e6054a40d3785cb63c29f1e4d4deeTimo Sirainen end
abe8230dd1dd37d7ccf0163100e934bb5e658c20Timo Sirainen
abe8230dd1dd37d7ccf0163100e934bb5e658c20Timo Sirainenend
abe8230dd1dd37d7ccf0163100e934bb5e658c20Timo Sirainen
abe8230dd1dd37d7ccf0163100e934bb5e658c20Timo Sirainen