ontologies_controller.rb revision c39fda5715a22fd5aca1f8aa0daa508c25a229c2
a8c5a86d183db25a57bf193c06b41e092ec2e151Timo Sirainen#
2670cd577aa57eb9f915a4f4220ae48c9b4fc5fbTimo Sirainen# Controller for ontologies
2670cd577aa57eb9f915a4f4220ae48c9b4fc5fbTimo Sirainen#
2670cd577aa57eb9f915a4f4220ae48c9b4fc5fbTimo Sirainenclass OntologiesController < InheritedResources::Base
bdd36cfdba3ff66d25570a9ff568d69e1eb543cfTimo Sirainen
2670cd577aa57eb9f915a4f4220ae48c9b4fc5fbTimo Sirainen include RepositoryHelper
2670cd577aa57eb9f915a4f4220ae48c9b4fc5fbTimo Sirainen
2670cd577aa57eb9f915a4f4220ae48c9b4fc5fbTimo Sirainen belongs_to :repository, finder: :find_by_path!
2670cd577aa57eb9f915a4f4220ae48c9b4fc5fbTimo Sirainen respond_to :json, :xml
2670cd577aa57eb9f915a4f4220ae48c9b4fc5fbTimo Sirainen has_pagination
9522aa5f33cc37fe8ccd0d647cc51dd3ba6a9b55Timo Sirainen has_scope :search
2670cd577aa57eb9f915a4f4220ae48c9b4fc5fbTimo Sirainen actions :index, :show, :edit, :update
2670cd577aa57eb9f915a4f4220ae48c9b4fc5fbTimo Sirainen
2670cd577aa57eb9f915a4f4220ae48c9b4fc5fbTimo Sirainen before_filter :check_write_permission, :except => [:index, :show, :oops_state]
2670cd577aa57eb9f915a4f4220ae48c9b4fc5fbTimo Sirainen
2670cd577aa57eb9f915a4f4220ae48c9b4fc5fbTimo Sirainen def index
4fda77c9e9fc68feb292c4dacae1fac49dd08165Timo Sirainen if in_repository?
2670cd577aa57eb9f915a4f4220ae48c9b4fc5fbTimo Sirainen @count = end_of_association_chain.total_count
2670cd577aa57eb9f915a4f4220ae48c9b4fc5fbTimo Sirainen render :index_ontology
2670cd577aa57eb9f915a4f4220ae48c9b4fc5fbTimo Sirainen else
2670cd577aa57eb9f915a4f4220ae48c9b4fc5fbTimo Sirainen @count = resource_class.count
f158d9a303bb15a6848ca276c9391c7ca52e452bTimo Sirainen render :index_global
f158d9a303bb15a6848ca276c9391c7ca52e452bTimo Sirainen end
2670cd577aa57eb9f915a4f4220ae48c9b4fc5fbTimo Sirainen end
2670cd577aa57eb9f915a4f4220ae48c9b4fc5fbTimo Sirainen
2670cd577aa57eb9f915a4f4220ae48c9b4fc5fbTimo Sirainen
2670cd577aa57eb9f915a4f4220ae48c9b4fc5fbTimo Sirainen def new
2670cd577aa57eb9f915a4f4220ae48c9b4fc5fbTimo Sirainen @ontology_version = build_resource.versions.build
2670cd577aa57eb9f915a4f4220ae48c9b4fc5fbTimo Sirainen @c_vertices = []
2670cd577aa57eb9f915a4f4220ae48c9b4fc5fbTimo Sirainen vert = Category.first
2670cd577aa57eb9f915a4f4220ae48c9b4fc5fbTimo Sirainen if vert
2670cd577aa57eb9f915a4f4220ae48c9b4fc5fbTimo Sirainen @c_vertices = vert.roots.first.children
2670cd577aa57eb9f915a4f4220ae48c9b4fc5fbTimo Sirainen end
2670cd577aa57eb9f915a4f4220ae48c9b4fc5fbTimo Sirainen end
2670cd577aa57eb9f915a4f4220ae48c9b4fc5fbTimo Sirainen
2670cd577aa57eb9f915a4f4220ae48c9b4fc5fbTimo Sirainen def edit
2670cd577aa57eb9f915a4f4220ae48c9b4fc5fbTimo Sirainen @ontology = resource
2670cd577aa57eb9f915a4f4220ae48c9b4fc5fbTimo Sirainen @c_vertices = []
2670cd577aa57eb9f915a4f4220ae48c9b4fc5fbTimo Sirainen vert = Category.first
2670cd577aa57eb9f915a4f4220ae48c9b4fc5fbTimo Sirainen if vert
2670cd577aa57eb9f915a4f4220ae48c9b4fc5fbTimo Sirainen @c_vertices = vert.roots.first.children
2670cd577aa57eb9f915a4f4220ae48c9b4fc5fbTimo Sirainen end
2670cd577aa57eb9f915a4f4220ae48c9b4fc5fbTimo Sirainen end
2670cd577aa57eb9f915a4f4220ae48c9b4fc5fbTimo Sirainen
2670cd577aa57eb9f915a4f4220ae48c9b4fc5fbTimo Sirainen def update
2670cd577aa57eb9f915a4f4220ae48c9b4fc5fbTimo Sirainen resource.category_ids = user_selected_categories
2670cd577aa57eb9f915a4f4220ae48c9b4fc5fbTimo Sirainen super
cf9d67e4a9bfee31cf3be05244555d51a3d1b9feTimo Sirainen end
2670cd577aa57eb9f915a4f4220ae48c9b4fc5fbTimo Sirainen
2670cd577aa57eb9f915a4f4220ae48c9b4fc5fbTimo Sirainen def create
2670cd577aa57eb9f915a4f4220ae48c9b4fc5fbTimo Sirainen @version = build_resource.versions.first
2670cd577aa57eb9f915a4f4220ae48c9b4fc5fbTimo Sirainen @version.user = current_user
2670cd577aa57eb9f915a4f4220ae48c9b4fc5fbTimo Sirainen super
e2a88d59c0d47d63ce1ad5b1fd95e487124a3fd4Timo Sirainen resource.category_ids = user_selected_categories
2670cd577aa57eb9f915a4f4220ae48c9b4fc5fbTimo Sirainen end
2670cd577aa57eb9f915a4f4220ae48c9b4fc5fbTimo Sirainen
8b16d3b00f051401c97568697ccdbba48663759aTimo Sirainen def show
8b16d3b00f051401c97568697ccdbba48663759aTimo Sirainen @content_object = :ontology
8b16d3b00f051401c97568697ccdbba48663759aTimo Sirainen
8b16d3b00f051401c97568697ccdbba48663759aTimo Sirainen if !params[:repository_id]
8b16d3b00f051401c97568697ccdbba48663759aTimo Sirainen # redirect for legacy routing
8b16d3b00f051401c97568697ccdbba48663759aTimo Sirainen ontology = Ontology.find params[:id]
8b16d3b00f051401c97568697ccdbba48663759aTimo Sirainen redirect_to [ontology.repository, ontology]
8b16d3b00f051401c97568697ccdbba48663759aTimo Sirainen return
8b16d3b00f051401c97568697ccdbba48663759aTimo Sirainen end
8b16d3b00f051401c97568697ccdbba48663759aTimo Sirainen
8b16d3b00f051401c97568697ccdbba48663759aTimo Sirainen respond_to do |format|
8b16d3b00f051401c97568697ccdbba48663759aTimo Sirainen format.html do
8b16d3b00f051401c97568697ccdbba48663759aTimo Sirainen if !resource.distributed?
8b16d3b00f051401c97568697ccdbba48663759aTimo Sirainen redirect_to repository_ontology_entities_path(parent, resource,
8b16d3b00f051401c97568697ccdbba48663759aTimo Sirainen :kind => resource.entities.groups_by_kind.first.kind)
8b16d3b00f051401c97568697ccdbba48663759aTimo Sirainen else
8b16d3b00f051401c97568697ccdbba48663759aTimo Sirainen redirect_to repository_ontology_children_path(parent, resource)
8b16d3b00f051401c97568697ccdbba48663759aTimo Sirainen end
8b16d3b00f051401c97568697ccdbba48663759aTimo Sirainen end
8b16d3b00f051401c97568697ccdbba48663759aTimo Sirainen format.json do
8b16d3b00f051401c97568697ccdbba48663759aTimo Sirainen respond_with resource
8b16d3b00f051401c97568697ccdbba48663759aTimo Sirainen end
8b16d3b00f051401c97568697ccdbba48663759aTimo Sirainen end
8b16d3b00f051401c97568697ccdbba48663759aTimo Sirainen end
8b16d3b00f051401c97568697ccdbba48663759aTimo Sirainen
8b16d3b00f051401c97568697ccdbba48663759aTimo Sirainen def retry_failed
8b16d3b00f051401c97568697ccdbba48663759aTimo Sirainen end_of_association_chain.retry_failed
8b16d3b00f051401c97568697ccdbba48663759aTimo Sirainen redirect_to [parent, :ontologies]
8b16d3b00f051401c97568697ccdbba48663759aTimo Sirainen end
8b16d3b00f051401c97568697ccdbba48663759aTimo Sirainen
8b16d3b00f051401c97568697ccdbba48663759aTimo Sirainen def oops_state
8b16d3b00f051401c97568697ccdbba48663759aTimo Sirainen respond_to do |format|
8b16d3b00f051401c97568697ccdbba48663759aTimo Sirainen format.json do
e2a88d59c0d47d63ce1ad5b1fd95e487124a3fd4Timo Sirainen respond_with resource.versions.current.try(:request)
8b16d3b00f051401c97568697ccdbba48663759aTimo Sirainen end
8b16d3b00f051401c97568697ccdbba48663759aTimo Sirainen end
8b16d3b00f051401c97568697ccdbba48663759aTimo Sirainen end
8b16d3b00f051401c97568697ccdbba48663759aTimo Sirainen
ad404d294fedf792619aed432ed8de5174e9ce7cTimo Sirainen
ad404d294fedf792619aed432ed8de5174e9ce7cTimo Sirainen protected
ad404d294fedf792619aed432ed8de5174e9ce7cTimo Sirainen
ad404d294fedf792619aed432ed8de5174e9ce7cTimo Sirainen def build_resource
ad404d294fedf792619aed432ed8de5174e9ce7cTimo Sirainen @ontology ||= begin
ad404d294fedf792619aed432ed8de5174e9ce7cTimo Sirainen type = (params[:ontology] || {}).delete(:type)
ad404d294fedf792619aed432ed8de5174e9ce7cTimo Sirainen clazz = type=='DistributedOntology' ? DistributedOntology : SingleOntology
ad404d294fedf792619aed432ed8de5174e9ce7cTimo Sirainen @ontology = clazz.new params[:ontology]
ad404d294fedf792619aed432ed8de5174e9ce7cTimo Sirainen @ontology.repository = parent
ad404d294fedf792619aed432ed8de5174e9ce7cTimo Sirainen @ontology
ad404d294fedf792619aed432ed8de5174e9ce7cTimo Sirainen end
ad404d294fedf792619aed432ed8de5174e9ce7cTimo Sirainen end
ad404d294fedf792619aed432ed8de5174e9ce7cTimo Sirainen
ad404d294fedf792619aed432ed8de5174e9ce7cTimo Sirainen def check_write_permission
ad404d294fedf792619aed432ed8de5174e9ce7cTimo Sirainen authorize! :write, parent
ad404d294fedf792619aed432ed8de5174e9ce7cTimo Sirainen end
ad404d294fedf792619aed432ed8de5174e9ce7cTimo Sirainen
ad404d294fedf792619aed432ed8de5174e9ce7cTimo Sirainen def build_categories_tree(vertex)
ad404d294fedf792619aed432ed8de5174e9ce7cTimo Sirainen @a ||= []
ad404d294fedf792619aed432ed8de5174e9ce7cTimo Sirainen vertex.children.each { |child| build_categories_tree(child) unless child.children.empty?; @a << child }
ad404d294fedf792619aed432ed8de5174e9ce7cTimo Sirainen @a
ad404d294fedf792619aed432ed8de5174e9ce7cTimo Sirainen end
ad404d294fedf792619aed432ed8de5174e9ce7cTimo Sirainen
ad404d294fedf792619aed432ed8de5174e9ce7cTimo Sirainen def user_selected_categories
ad404d294fedf792619aed432ed8de5174e9ce7cTimo Sirainen params[:category_ids].keys unless params[:category_ids].nil?
ad404d294fedf792619aed432ed8de5174e9ce7cTimo Sirainen end
ad404d294fedf792619aed432ed8de5174e9ce7cTimo Sirainen
ad404d294fedf792619aed432ed8de5174e9ce7cTimo Sirainenend
ad404d294fedf792619aed432ed8de5174e9ce7cTimo Sirainen
ad404d294fedf792619aed432ed8de5174e9ce7cTimo Sirainen