You are viewing a plain text version of this content. The canonical link for it is here.
Posted to alois-commits@incubator.apache.org by fl...@apache.org on 2010/11/04 18:27:42 UTC

svn commit: r1031127 [7/22] - in /incubator/alois/trunk: ./ bin/ debian/ doc/ etc/ etc/alois/ etc/alois/apache2/ etc/alois/environments/ etc/alois/prisma/ etc/cron.d/ etc/default/ etc/logrotate.d/ prisma/ prisma/bin/ prisma/conf/ prisma/conf/prisma/ pr...

Added: incubator/alois/trunk/rails/README
URL: http://svn.apache.org/viewvc/incubator/alois/trunk/rails/README?rev=1031127&view=auto
==============================================================================
--- incubator/alois/trunk/rails/README (added)
+++ incubator/alois/trunk/rails/README Thu Nov  4 18:27:22 2010
@@ -0,0 +1,180 @@
+== Welcome to Rails
+
+Rails is a web-application and persistence framework that includes everything
+needed to create database-backed web-applications according to the
+Model-View-Control pattern of separation. This pattern splits the view (also
+called the presentation) into "dumb" templates that are primarily responsible
+for inserting pre-built data in between HTML tags. The model contains the
+"smart" domain objects (such as Account, Product, Person, Post) that holds all
+the business logic and knows how to persist themselves to a database. The
+controller handles the incoming requests (such as Save New Account, Update
+Product, Show Post) by manipulating the model and directing data to the view.
+
+In Rails, the model is handled by what's called an object-relational mapping
+layer entitled Active Record. This layer allows you to present the data from
+database rows as objects and embellish these data objects with business logic
+methods. You can read more about Active Record in 
+link:files/vendor/rails/activerecord/README.html.
+
+The controller and view are handled by the Action Pack, which handles both
+layers by its two parts: Action View and Action Controller. These two layers
+are bundled in a single package due to their heavy interdependence. This is
+unlike the relationship between the Active Record and Action Pack that is much
+more separate. Each of these packages can be used independently outside of
+Rails.  You can read more about Action Pack in 
+link:files/vendor/rails/actionpack/README.html.
+
+
+== Getting started
+
+1. Start the web server: <tt>ruby script/server</tt> (run with --help for options)
+2. Go to http://localhost:3000/ and get "Welcome aboard: You’re riding the Rails!"
+3. Follow the guidelines to start developing your application
+
+
+== Web servers
+
+Rails uses the built-in web server in Ruby called WEBrick by default, so you don't
+have to install or configure anything to play around. 
+
+If you have lighttpd installed, though, it'll be used instead when running script/server.
+It's considerably faster than WEBrick and suited for production use, but requires additional
+installation and currently only works well on OS X/Unix (Windows users are encouraged
+to start with WEBrick). We recommend version 1.4.11 and higher. You can download it from
+http://www.lighttpd.net.
+
+If you want something that's halfway between WEBrick and lighttpd, we heartily recommend
+Mongrel. It's a Ruby-based web server with a C-component (so it requires compilation) that
+also works very well with Windows. See more at http://mongrel.rubyforge.org/.
+
+But of course its also possible to run Rails with the premiere open source web server Apache.
+To get decent performance, though, you'll need to install FastCGI. For Apache 1.3, you want
+to use mod_fastcgi. For Apache 2.0+, you want to use mod_fcgid.
+
+See http://wiki.rubyonrails.com/rails/pages/FastCGI for more information on FastCGI.
+
+== Example for Apache conf
+
+  <VirtualHost *:80>
+    ServerName rails
+    DocumentRoot /path/application/public/
+    ErrorLog /path/application/log/server.log
+  
+    <Directory /path/application/public/>
+      Options ExecCGI FollowSymLinks
+      AllowOverride all
+      Allow from all
+      Order allow,deny
+    </Directory>
+  </VirtualHost>
+
+NOTE: Be sure that CGIs can be executed in that directory as well. So ExecCGI
+should be on and ".cgi" should respond. All requests from 127.0.0.1 go
+through CGI, so no Apache restart is necessary for changes. All other requests
+go through FCGI (or mod_ruby), which requires a restart to show changes.
+
+
+== Debugging Rails
+
+Have "tail -f" commands running on both the server.log, production.log, and
+test.log files. Rails will automatically display debugging and runtime
+information to these files. Debugging info will also be shown in the browser
+on requests from 127.0.0.1.
+
+
+== Breakpoints
+
+Breakpoint support is available through the script/breakpointer client. This
+means that you can break out of execution at any point in the code, investigate
+and change the model, AND then resume execution! Example:
+
+  class WeblogController < ActionController::Base
+    def index
+      @posts = Post.find_all
+      breakpoint "Breaking out from the list"
+    end
+  end
+  
+So the controller will accept the action, run the first line, then present you
+with a IRB prompt in the breakpointer window. Here you can do things like:
+
+Executing breakpoint "Breaking out from the list" at .../webrick_server.rb:16 in 'breakpoint'
+
+  >> @posts.inspect
+  => "[#<Post:0x14a6be8 @attributes={\"title\"=>nil, \"body\"=>nil, \"id\"=>\"1\"}>, 
+       #<Post:0x14a6620 @attributes={\"title\"=>\"Rails you know!\", \"body\"=>\"Only ten..\", \"id\"=>\"2\"}>]"
+  >> @posts.first.title = "hello from a breakpoint"
+  => "hello from a breakpoint"
+
+...and even better is that you can examine how your runtime objects actually work:
+
+  >> f = @posts.first 
+  => #<Post:0x13630c4 @attributes={"title"=>nil, "body"=>nil, "id"=>"1"}>
+  >> f.
+  Display all 152 possibilities? (y or n)
+
+Finally, when you're ready to resume execution, you press CTRL-D
+
+
+== Console
+
+You can interact with the domain model by starting the console through script/console. 
+Here you'll have all parts of the application configured, just like it is when the
+application is running. You can inspect domain models, change values, and save to the
+database. Starting the script without arguments will launch it in the development environment.
+Passing an argument will specify a different environment, like <tt>script/console production</tt>.
+
+
+== Description of contents
+
+app
+  Holds all the code that's specific to this particular application.
+
+app/controllers
+  Holds controllers that should be named like weblog_controller.rb for
+  automated URL mapping. All controllers should descend from
+  ActionController::Base.
+
+app/models
+  Holds models that should be named like post.rb.
+  Most models will descend from ActiveRecord::Base.
+  
+app/views
+  Holds the template files for the view that should be named like
+  weblog/index.rhtml for the WeblogController#index action. All views use eRuby
+  syntax. This directory can also be used to keep stylesheets, images, and so on
+  that can be symlinked to public.
+  
+app/helpers
+  Holds view helpers that should be named like weblog_helper.rb.
+
+app/apis
+  Holds API classes for web services.
+
+config
+  Configuration files for the Rails environment, the routing map, the database, and other dependencies.
+
+components
+  Self-contained mini-applications that can bundle together controllers, models, and views.
+
+db
+  Contains the database schema in schema.rb.  db/migrate contains all
+  the sequence of Migrations for your schema.
+
+lib
+  Application specific libraries. Basically, any kind of custom code that doesn't
+  belong under controllers, models, or helpers. This directory is in the load path.
+    
+public
+  The directory available for the web server. Contains subdirectories for images, stylesheets,
+  and javascripts. Also contains the dispatchers and the default HTML files.
+
+script
+  Helper scripts for automation and generation.
+
+test
+  Unit and functional tests along with fixtures.
+
+vendor
+  External libraries that the application depends on. Also includes the plugins subdirectory.
+  This directory is in the load path.

Added: incubator/alois/trunk/rails/Rakefile
URL: http://svn.apache.org/viewvc/incubator/alois/trunk/rails/Rakefile?rev=1031127&view=auto
==============================================================================
--- incubator/alois/trunk/rails/Rakefile (added)
+++ incubator/alois/trunk/rails/Rakefile Thu Nov  4 18:27:22 2010
@@ -0,0 +1,12 @@
+# Add your own tasks in files placed in lib/tasks ending in .rake,
+# for example lib/tasks/capistrano.rake, and they will automatically be available to Rake.
+require "libisi"
+init_libisi(:ui => "console")
+
+require(File.join(File.dirname(__FILE__), 'config', 'boot'))
+
+require 'rake'
+require 'rake/testtask'
+require 'rake/rdoctask'
+
+require 'tasks/rails'

Added: incubator/alois/trunk/rails/app/controllers/alarms_controller.rb
URL: http://svn.apache.org/viewvc/incubator/alois/trunk/rails/app/controllers/alarms_controller.rb?rev=1031127&view=auto
==============================================================================
--- incubator/alois/trunk/rails/app/controllers/alarms_controller.rb (added)
+++ incubator/alois/trunk/rails/app/controllers/alarms_controller.rb Thu Nov  4 18:27:22 2010
@@ -0,0 +1,98 @@
+# Copyright 2010 The Apache Software Foundation.
+# 
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+# 
+# http://www.apache.org/licenses/LICENSE-2.0
+# 
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+class AlarmsController < ApplicationController
+  include ApplicationHelper
+  
+  def index
+    status
+    render :action => 'status'
+  end
+
+  # GETs should be safe (see http://www.w3.org/2001/tag/doc/whenToUseGet.html)
+  verify :method => :post, :only => [ :destroy, :create, :update ],
+         :redirect_to => { :action => :list }
+
+  def status
+    @alarms = Alarm.paginate :page => params[:page], :order => "alarm_level, created_at DESC", :per_page => 10,
+      :conditions => Alarm::ACTIVE_YELLOW_RED_CONDITION
+    @infos = Alarm.paginate :page => params[:page_info], :per_page => 10, :order => "id DESC",
+      :conditions => Alarm::ACTIVE_WHITE_CONDITION
+    @ack_alarms = Alarm.paginate :page => params[:page_ack], :limit => 10, :per_page => 10, :order => "id DESC",
+      :conditions => Alarm::ACKNOWLEDGE_CONDITION
+  end
+
+  def list
+    status
+    render :action => 'status'
+  end
+
+  def listing    
+    @alarms = Alarm.paginate :page => params[:page], :order => "id DESC"
+    render :action => 'list'
+  end
+
+  def show
+    @alarm = Alarm.find(params[:id])
+  end
+
+  def new
+    @alarm = Alarm.new
+  end
+
+  def create
+    @alarm = Alarm.new(params[:alarm])
+    if @alarm.save
+      flash[:notice] = 'Alarm was successfully created.'
+      redirect_to :action => 'list'
+    else
+      render :action => 'new'
+    end
+  end
+
+  def edit
+    @alarm = Alarm.find(params[:id])
+  end
+
+  def update
+    @alarm = Alarm.find(params[:id])
+    params[:alarm] = {} unless params[:alarm]
+    params[:alarm][:updated_by] = user
+    if @alarm.update_attributes(params[:alarm])
+      flash[:notice] = 'Alarm was successfully updated.'
+      redirect_to :action => 'show', :id => @alarm
+    else
+      render :action => 'edit'
+    end
+  end
+
+  def destroy
+    raise "Not supported"
+    Alarm.find(params[:id]).destroy
+    redirect_to :action => 'list'
+  end
+
+  def survey_component
+    @alarm_pages, @alarms = paginate :alarms, :per_page => 10, :order => "id DESC"    
+    render :partial => "survey_component"
+  end
+
+  # ACL: admin
+  def send_to_email
+    raise "No address given." unless params[:addresses]
+    @alarm = Alarm.find(params[:id])
+    AlarmMailer.deliver_simple(params[:addresses], @alarm)
+  end
+
+end

Added: incubator/alois/trunk/rails/app/controllers/alois_controller.rb
URL: http://svn.apache.org/viewvc/incubator/alois/trunk/rails/app/controllers/alois_controller.rb?rev=1031127&view=auto
==============================================================================
--- incubator/alois/trunk/rails/app/controllers/alois_controller.rb (added)
+++ incubator/alois/trunk/rails/app/controllers/alois_controller.rb Thu Nov  4 18:27:22 2010
@@ -0,0 +1,21 @@
+# Copyright 2010 The Apache Software Foundation.
+# 
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+# 
+# http://www.apache.org/licenses/LICENSE-2.0
+# 
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+class AloisController < ActionController::Base
+
+  def index
+    redirect_to :controller => 'prisma', :action => 'overview'
+  end
+
+end

Added: incubator/alois/trunk/rails/app/controllers/application_controller.rb
URL: http://svn.apache.org/viewvc/incubator/alois/trunk/rails/app/controllers/application_controller.rb?rev=1031127&view=auto
==============================================================================
--- incubator/alois/trunk/rails/app/controllers/application_controller.rb (added)
+++ incubator/alois/trunk/rails/app/controllers/application_controller.rb Thu Nov  4 18:27:22 2010
@@ -0,0 +1,76 @@
+# Copyright 2010 The Apache Software Foundation.
+# 
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+# 
+# http://www.apache.org/licenses/LICENSE-2.0
+# 
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Filters added to this controller will be run for all controllers in the application.
+# Likewise, all the methods added will be available for all controllers.
+class ApplicationController < ActionController::Base
+  include ApplicationHelper
+  helper :alarms
+#  around_filter :catch_exceptions
+    
+  private
+  def catch_exceptions
+    yield
+  rescue => exception
+    render_text "<pre>#{$!}</pre>",:layout => true  
+  end
+
+  public  
+
+  def local_request?
+    false
+  end
+
+  def rescue_action_in_public(exception)
+    @exception = exception
+    @exception_name = exception.class.to_s.underscore
+    if (@template.pick_template_extension("exception/#{@exception_name}") rescue nil)
+      render :partial => "exception/#{@exception_name}", :layout => true
+    else
+      render :partial => "exception/generic", :layout => true
+    end
+  end
+
+
+  if $selected_theme.respond_to?(:helper) then 
+    helper :application, $selected_theme.helper 
+  end
+  
+  if $selected_theme and $selected_theme.respond_to?(:layout) and $selected_theme.layout
+    layout  $selected_theme.layout
+  end
+
+  def render(options = nil, &block)
+    if params[:layout] == "false"
+      options ||= {}
+      options[:layout] ||= false
+    end
+    super
+  end
+  
+  def auto_complete_for_condition_value    
+    render :inline => "<%= content_tag(:ul, Time.suggest(params[:condition][:value]).map { |org| content_tag(:li, h(org)) }) %>"
+  end
+
+  FLASH_COLORS = {:info => "green",
+    :warning => "orange",
+    :error => "red"}
+
+  def flash_text
+    (flash || {}).map {|key,val|
+      "<p style='color: #{FLASH_COLORS[key] || "orange"}'>#{val}</p>"
+    }.join
+  end
+
+end

Added: incubator/alois/trunk/rails/app/controllers/bookmarks_controller.rb
URL: http://svn.apache.org/viewvc/incubator/alois/trunk/rails/app/controllers/bookmarks_controller.rb?rev=1031127&view=auto
==============================================================================
--- incubator/alois/trunk/rails/app/controllers/bookmarks_controller.rb (added)
+++ incubator/alois/trunk/rails/app/controllers/bookmarks_controller.rb Thu Nov  4 18:27:22 2010
@@ -0,0 +1,74 @@
+# Copyright 2010 The Apache Software Foundation.
+# 
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+# 
+# http://www.apache.org/licenses/LICENSE-2.0
+# 
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+class BookmarksController < ApplicationController
+  def index
+    list
+    render :action => 'list'
+  end
+
+  # GETs should be safe (see http://www.w3.org/2001/tag/doc/whenToUseGet.html)
+  verify :method => :post, :only => [ :destroy, :create, :update ],
+         :redirect_to => { :action => :list }
+
+  def list
+    @bookmarks = Bookmark.paginate :page => params[:page]
+  end
+
+  def show
+    @bookmark = Bookmark.find(params[:id])
+  end
+
+  def go
+    @bookmark = Bookmark.find(params[:id])
+    redirect_to @bookmark.url
+  end
+
+  def new    
+    unless params[:bookmark]
+      @bookmark = Bookmark.new
+    else
+      @bookmark = Bookmark.new(params[:bookmark])
+    end
+  end
+
+  def create
+    @bookmark = Bookmark.new(params[:bookmark])
+    if @bookmark.save
+      flash[:notice] = 'Bookmark was successfully created.'
+      redirect_to :action => 'list'
+    else
+      render :action => 'new'
+    end
+  end
+
+  def edit
+    @bookmark = Bookmark.find(params[:id])
+  end
+
+  def update
+    @bookmark = Bookmark.find(params[:id])
+    if @bookmark.update_attributes(params[:bookmark])
+      flash[:notice] = 'Bookmark was successfully updated.'
+      redirect_to :action => 'show', :id => @bookmark
+    else
+      render :action => 'edit'
+    end
+  end
+
+  def destroy
+    Bookmark.find(params[:id]).destroy
+    redirect_to :action => 'list'
+  end
+end

Added: incubator/alois/trunk/rails/app/controllers/charts_controller.rb
URL: http://svn.apache.org/viewvc/incubator/alois/trunk/rails/app/controllers/charts_controller.rb?rev=1031127&view=auto
==============================================================================
--- incubator/alois/trunk/rails/app/controllers/charts_controller.rb (added)
+++ incubator/alois/trunk/rails/app/controllers/charts_controller.rb Thu Nov  4 18:27:22 2010
@@ -0,0 +1,141 @@
+# Copyright 2010 The Apache Software Foundation.
+# 
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+# 
+# http://www.apache.org/licenses/LICENSE-2.0
+# 
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+class ChartsController < ApplicationController
+  include ApplicationHelper
+  include SurveyHelper
+  before_filter :handle_cancel, :only => [ :new, :create, :update ]
+  before_filter :init
+  
+  private
+  def init
+    initialize_parameters
+  end
+
+  def handle_cancel
+    if params[:commit] == "Cancel"
+      redirect_to :action => :list
+    end
+  end
+  
+  public
+  def index
+    list
+    render :action => 'list'
+  end
+
+  # GETs should be safe (see http://www.w3.org/2001/tag/doc/whenToUseGet.html)
+#  verify :method => :post, :only => [ :destroy, :create, :update, :render_chart ],
+#         :redirect_to => { :action => :list }
+
+  def list
+    @charts = Chart.find :all
+  end
+
+  def show
+    @chart = Chart.find(params[:id])
+  end
+
+  def render_chart
+    @chart = Chart.find(params[:id])
+    redirect_to :controller => "survey", :action => "chart", 
+      :chart_id => @chart.id, :state_id => @state_id, :table => current_datasource.table.table_name
+#    @chart.datasource = current_datasource
+#    if @chart.datasource
+#      @chart.render
+#    end
+  end
+
+  def render_chart_inline
+    render_chart
+    render :partial => "render_chart_inline"
+  end
+
+  def chart_image
+    @chart = Chart.find(params[:id]) if params[:id]
+
+    if @chart.mode == :view_only
+      raise "Preview not allowed for view_only chart" if params[:preview]
+      raise "Recreate data not allowed for view_only chart" if params[:recreate_data]
+    else
+      @chart.mode = :preview if params[:preview]
+      @chart.datasource = current_datasource
+      @chart.render(:recreate_data => params[:recreate_data]) if @chart.datasource
+    end
+
+    headers['Cache-Control'] = 'no-cache, must-revalidate'
+    send_file( @chart.png_file_name,
+	      :disposition => 'inline',
+	      :type => 'image/png', 
+	      :filename => @chart.image_name)
+  end
+
+
+  def show_inline
+    render :layout => false
+  end
+
+  def new
+    initialize_parameters
+    if @chart
+      @chart = @chart.full_clone
+      @chart.mode = nil
+      @chart.datasource = current_datasource
+    else
+      @chart = Chart.new
+    end
+    
+    @chart.attributes = params[:chart] if params[:chart]
+    save_session
+  end
+
+  def edit_inline
+    render :partial => "form"
+  end
+
+  def edit
+    @chart = Chart.find(params[:id])    
+  end
+
+  def create
+    @chart = Chart.new(params[:chart])
+    @chart.datasource = current_datasource
+    
+    if @chart.save
+      flash[:notice] = 'Chart was successfully created.'
+      redirect_to :action => 'list'
+    else
+      render :action => 'new'
+    end
+  end
+
+  def update
+    @chart = Chart.find(params[:id])    
+    if @chart.update_attributes(params[:chart])
+      flash[:notice] = 'Chart was successfully updated.'
+      redirect_to :action => 'list'
+    else
+      render :action => 'edit'
+    end
+  end
+
+  def destroy
+    Chart.find(params[:id]).destroy
+    redirect_to :action => 'list'
+  end
+  def auto_complete_for_chart_time_range
+    render :inline => "<%= content_tag(:ul, Time.suggest(params[:chart][:time_range]).map { |org| content_tag(:li, h(org)) }) %>"
+  end
+
+end

Added: incubator/alois/trunk/rails/app/controllers/exception_controller.rb
URL: http://svn.apache.org/viewvc/incubator/alois/trunk/rails/app/controllers/exception_controller.rb?rev=1031127&view=auto
==============================================================================
--- incubator/alois/trunk/rails/app/controllers/exception_controller.rb (added)
+++ incubator/alois/trunk/rails/app/controllers/exception_controller.rb Thu Nov  4 18:27:22 2010
@@ -0,0 +1,21 @@
+# Copyright 2010 The Apache Software Foundation.
+# 
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+# 
+# http://www.apache.org/licenses/LICENSE-2.0
+# 
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+class ExceptionController < ApplicationController
+
+  def record_not_found
+
+  end
+
+end

Added: incubator/alois/trunk/rails/app/controllers/filters_controller.rb
URL: http://svn.apache.org/viewvc/incubator/alois/trunk/rails/app/controllers/filters_controller.rb?rev=1031127&view=auto
==============================================================================
--- incubator/alois/trunk/rails/app/controllers/filters_controller.rb (added)
+++ incubator/alois/trunk/rails/app/controllers/filters_controller.rb Thu Nov  4 18:27:22 2010
@@ -0,0 +1,190 @@
+# Copyright 2010 The Apache Software Foundation.
+# 
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+# 
+# http://www.apache.org/licenses/LICENSE-2.0
+# 
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+class FiltersController < ApplicationController
+  include ApplicationHelper
+  before_filter :handle_cancel, :only => [ :new, :create, :update ]
+  
+  private
+  def filter_class
+    # otherwise rails filter class would be returned
+    View.instance_eval("Filter")
+  end
+
+  def init
+    initialize_parameters
+    
+    @table_class = Prisma::Database.get_class_from_tablename(@table_name) if defined?(Prisma::Database)
+    @table_class = View.get_class_from_tablename(@table_name) unless @table_class
+    @conditions = @current_filter.conditions if @current_filter
+
+    if params[:id] and params[:id].to_s != @current_filter.id.to_s
+      @current_filter = filter_class.find(params[:id])
+    end
+  end
+
+  def handle_cancel
+    if params[:commit] == "Cancel"
+      redirect_to :action => :list
+    end
+  end
+  
+  public
+  def index
+    list
+    render :action => 'list'
+  end
+
+  # GETs should be safe (see http://www.w3.org/2001/tag/doc/whenToUseGet.html)
+#  verify :method => :post, :only => [ :destroy, :create, :update, :update_condition ],
+#         :redirect_to => { :action => :list }
+
+  def list
+    init
+    @filters = filter_class.find(:all,:order => "name")
+  end
+
+  def show
+    init
+  end
+
+  def show_inline
+    init
+    render :layout => false
+  end
+
+  def new
+    init
+    @current_filter = filter_class.new(:name => "new") if (@current_filter.nil? or !params[:use_current])
+    @current_filter = filter_class.from_zip(params[:filter_zip]) if params[:filter_zip]
+    save_session
+  end
+
+  def edit_inline
+    init
+    render :partial => "form"
+  end
+
+  def edit
+    init
+    @conditions = @current_filter.conditions()
+    save_session
+  end
+
+  def create
+    init
+    if @current_filter
+      @current_filter.update_attributes(params[:current_filter])
+    else
+      @current_filter = filter_class.new(params[:current_filter])
+    end
+    
+    if @current_filter.save
+#redo      flash[:notice] = 'filter_class was successfully created.'
+      redirect_to :action => 'list'
+    else
+      render :action => 'new'
+    end
+  end
+
+  def add_condition
+    init
+    @current_filter = filter_class.new unless @current_filter
+    @current_filter.conditions = @current_filter.conditions << 
+      Condition.create(params[:column], params[:operator], params[:value])
+
+    if @current_filter.valid?      
+      reset_paging
+      save_session
+    else
+      @current_filter.conditions = @current_filter.conditions[0..-2]
+      flash[:warning] = "Session not saved. New filter not valid."
+    end
+    render :partial => "form"
+  end
+  
+  def remove_condition
+    init
+    @conditions[params[:condition_id].to_i..params[:condition_id].to_i] = []
+    @current_filter.conditions = @conditions
+    reset_paging
+    save_session
+    render :partial => "form"
+  end
+
+  def update_condition
+    init
+    c = @conditions[params[:condition_id].to_i]
+    c.update_from_params(params[:condition])
+    @conditions[params[:condition_id].to_i] = c
+    @current_filter.conditions = @conditions
+
+    if @current_filter.valid?
+      reset_paging
+      save_session
+    else
+      flash[:warning] = "Session not saved. New filter not valid."
+    end
+
+    render :partial => "form"    
+  end
+
+  def clear_current_filter
+    init
+    @current_filter = filter_class.new
+    reset_paging
+    save_session
+    render :partial => "form_with_functions"
+  end
+
+  def update
+    init
+    if @current_filter.update_attributes(params[:current_filter])
+      flash[:notice] = 'filter_class was successfully updated.'
+      redirect_to :action => 'list'
+    else
+      render :action => 'edit'
+    end
+  end
+
+  def destroy
+    init
+    filter_class.find(params[:id]).destroy
+    redirect_to :action => 'list'
+  end
+
+  def add_inline
+    init
+    @current_filter = filter_class.create_from_params(params)
+    @current_filter.save
+    redirect_to :action => 'list_inline'
+  end
+
+  def destroy_inline
+    init
+    filter_class.find(params[:id]).destroy
+    redirect_to :action => 'list_inline'
+  end
+
+  def list_possible_filters    
+    initialize_parameters
+    @filters = filter_class.find(:all,:order => "name").select {|f|
+      f.valid_for_table?(current_datasource)
+    }
+    render :partial => "possible_filters"
+  rescue
+    render :text => $!.to_s
+  end
+
+end

Added: incubator/alois/trunk/rails/app/controllers/help_controller.rb
URL: http://svn.apache.org/viewvc/incubator/alois/trunk/rails/app/controllers/help_controller.rb?rev=1031127&view=auto
==============================================================================
--- incubator/alois/trunk/rails/app/controllers/help_controller.rb (added)
+++ incubator/alois/trunk/rails/app/controllers/help_controller.rb Thu Nov  4 18:27:22 2010
@@ -0,0 +1,28 @@
+# Copyright 2010 The Apache Software Foundation.
+# 
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+# 
+# http://www.apache.org/licenses/LICENSE-2.0
+# 
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+class HelpController < ApplicationController
+
+  def index
+  end
+
+  def inline 
+      render :layout => false
+  end
+
+  def hidden
+    render :layout => false
+  end
+
+end

Added: incubator/alois/trunk/rails/app/controllers/ip_ranges_controller.rb
URL: http://svn.apache.org/viewvc/incubator/alois/trunk/rails/app/controllers/ip_ranges_controller.rb?rev=1031127&view=auto
==============================================================================
--- incubator/alois/trunk/rails/app/controllers/ip_ranges_controller.rb (added)
+++ incubator/alois/trunk/rails/app/controllers/ip_ranges_controller.rb Thu Nov  4 18:27:22 2010
@@ -0,0 +1,101 @@
+# Copyright 2010 The Apache Software Foundation.
+# 
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+# 
+# http://www.apache.org/licenses/LICENSE-2.0
+# 
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+class IpRangesController < ApplicationController
+
+  # GET /ip_ranges
+  # GET /ip_ranges.xml
+  def index
+    @ip_ranges = IpRange.find(:all)
+
+    respond_to do |format|
+      format.html # index.html.erb
+      format.xml  { render :xml => @ip_ranges }
+    end
+  end
+
+  # GET /ip_ranges/1
+  # GET /ip_ranges/1.xml
+  def show
+    @ip_range = IpRange.find(params[:id])
+
+    respond_to do |format|
+      format.html # show.html.erb
+      format.xml  { render :xml => @ip_range }
+    end
+  end
+
+  # GET /ip_ranges/new
+  # GET /ip_ranges/new.xml
+  def new
+    @ip_range = IpRange.new
+
+    respond_to do |format|
+      format.html # new.html.erb
+      format.xml  { render :xml => @ip_range }
+    end
+  end
+
+  # GET /ip_ranges/1/edit
+  # POST /ip_ranges/1/edit
+  def edit
+    @ip_range = IpRange.find(params[:id])
+  end
+
+  # POST /ip_ranges
+  # POST /ip_ranges.xml
+  def create
+    @ip_range = IpRange.new(params[:ip_range])
+
+    respond_to do |format|
+      if @ip_range.save
+        flash[:notice] = 'IpRange was successfully created.'
+        format.html { redirect_to(@ip_range) }
+        format.xml  { render :xml => @ip_range, :status => :created, :location => @ip_range }
+      else
+        format.html { render :action => "new" }
+        format.xml  { render :xml => @ip_range.errors, :status => :unprocessable_entity }
+      end
+    end
+  end
+
+  # PUT /ip_ranges/1
+  # PUT /ip_ranges/1.xml
+  def update
+    @ip_range = IpRange.find(params[:id])
+
+    respond_to do |format|
+      if @ip_range.update_attributes(params[:ip_range])
+        flash[:notice] = 'IpRange was successfully updated.'
+        format.html { redirect_to(@ip_range) }
+        format.xml  { head :ok }
+      else
+        format.html { render :action => "edit" }
+        format.xml  { render :xml => @ip_range.errors, :status => :unprocessable_entity }
+      end
+    end
+  end
+
+  # DELETE /ip_ranges/1
+  # DELETE /ip_ranges/1.xml
+  def destroy
+    @ip_range = IpRange.find(params[:id])
+    @ip_range.destroy
+
+    respond_to do |format|
+      format.html { redirect_to(ip_ranges_url) }
+      format.xml  { head :ok }
+    end
+  end
+end

Added: incubator/alois/trunk/rails/app/controllers/prisma_controller.rb
URL: http://svn.apache.org/viewvc/incubator/alois/trunk/rails/app/controllers/prisma_controller.rb?rev=1031127&view=auto
==============================================================================
--- incubator/alois/trunk/rails/app/controllers/prisma_controller.rb (added)
+++ incubator/alois/trunk/rails/app/controllers/prisma_controller.rb Thu Nov  4 18:27:22 2010
@@ -0,0 +1,255 @@
+# Copyright 2010 The Apache Software Foundation.
+# 
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+# 
+# http://www.apache.org/licenses/LICENSE-2.0
+# 
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+class PrismaController < ApplicationController
+  
+  MUNIN_DB_PATH = "/var/lib/munin/localdomain" unless defined?(MUNIN_DB_PATH)
+  STAT_NAMES = ['pumpy_count','pumpy_out','pumpy_queue','pumpy_in','alois_in','alarms_today', 'reports_today'] unless defined?(STAT_NAMES)
+
+  def PrismaController.init
+    alois_connection = Connection.from_name("alois")
+    prisma_connection = Connection.from_name("prisma")
+    pumpy_connection = Connection.from_name("pumpy")
+
+    dobby = (prisma_connection and prisma_connection.spec[:host]) or "localhost"
+    dobby = "localhost.localdomain" if dobby == "localhost"
+
+    reporter = (alois_connection and alois_connection.spec[:host]) or "localhost"
+    reporter = "localhost.localdomain" if reporter == "localhost"
+
+    sink = (pumpy_connection and pumpy_connection.spec[:host]) or "localhost"
+    sink = "localhost.localdomain" if sink == "localhost"
+=begin
+    config = read_config
+    dobby = config["alois"]["host"]
+    dobby = "localhost.localdomain" if dobby == "localhost"
+    reporter = config["reporter"]["host"]
+    reporter = "localhost.localdomain" if reporter == "localhost"
+    raise "Please define attribute 'host' for the reporter host in alois.conf." if reporter.nil? or reporter.strip == ""
+    sink = config["pumpy"]["host"]
+    sink = "localhost.localdomain" if sink == "localhost"
+=end
+    
+    if RAILS_ENV != "production"
+      pref = "http://localhost/"
+    else
+      pref = "/"
+    end
+    
+    statistic_items = [
+      {:name => "sink_flows", :link_prefix => "#{pref}munin/localdomain/#{reporter}-alois_sinkflows", :desc => "Sink Flows"},
+      {:name => "sink_queues", :link_prefix => "#{pref}munin/localdomain/#{reporter}-alois_sinkdb", :desc => "Sink Queues"},
+      {:name => "prismas", :link_prefix => "#{pref}munin/localdomain/#{reporter}-alois_aloisdb", :desc => "Prismas"}    ]
+    return [dobby,reporter,sink,statistic_items]
+  end
+
+  def init
+    @dobby,@reporter,@sink,@statistic_items = PrismaController.init
+  end
+
+  def PrismaController.statistic_image(name,interval)
+    dobby,reporter,sink,statistic_items = init
+    statistic = statistic_items.select{|s| s[:name] == name}[0]
+    throw "Statistic with name '#{name}' not found." unless statistic
+    interval = interval
+    throw "No interval defined." unless interval
+    return "<a href=\"#{statistic[:link_prefix]}.html\"><img src=\"#{statistic[:link_prefix]}-#{interval}.png\" alt=\"#{statistic[:desc]} #{interval}\" />"
+  end
+
+  def index
+    redirect_to :action => "overview"
+  end
+
+  def statistics
+    init
+  end
+  
+  def statistic
+    init
+  end
+
+  def overview
+    init()
+    render :template => "prisma/overview-#{params[:installation_schema] or $installation_schema}"
+  end
+
+  def databases
+    @connections = Connection.connections.values
+  end
+
+  def kill_query
+    @connection = Connection.connections[params[:connection_name]]
+    throw "Connection with name #{params[:connection_name]} not found." unless @connection
+    @connection.kill(params[:id].to_i)
+    sleep 1
+    flash[:info] = "Killed query '#{params[:id]}'"    
+    redirect_to :action => "databases"
+  rescue
+    flash[:error] = "Query with id '#{params[:id]}' not killed: #{$!}"
+    redirect_to :action => "databases"
+  end
+
+#  def guess_host(host)
+#    files = Pathname.glob("#{MUNIN_DB_PATH}/#{host}*.rrd")
+#    files = files.sort { |x,y| -(File.new(x).mtime <=> File.new(y).mtime)}
+#    for file in files
+#      if Pathname.new(file).split()[1].to_s =~ /^([^\-]*)\-.*$/
+#        return $1
+#      end
+#    end
+#    return nil
+#  end
+#require 'pathname'
+#  MUNIN_DB_PATH = "/var/lib/munin/localdomain"
+
+  def read_rrd(host, stat, value, last = false)
+    return 0 if RAILS_ENV != "production"
+    host = "*" unless host
+    files = Pathname.glob("#{MUNIN_DB_PATH}/#{host}-#{stat}-#{value}*.rrd")
+    files = files.sort { |x,y| -(File.new(x).mtime <=> File.new(y).mtime)}
+    
+    for file in files
+      begin
+        if last then
+	  open("|rrdtool last #{file}"){|f|
+	    for line in f
+	      return line.strip.to_f
+	    end
+	  }
+        else
+	  open("|rrdtool fetch #{file} AVERAGE -s -300 -e -300") {|f|
+	    for line in f
+	      if line =~ /^(\d*): (.*)$/
+		return $2.to_f
+	      end
+	    end
+	  }
+        end
+      rescue
+      end
+    end
+
+    throw "Could not read rrd #{host}/#{stat}/#{value}."
+  end 
+
+  def measure(type)
+    begin
+      title = "Msg/s"
+      result = "??"
+      case type
+      when "pumpy_in"
+        link = "/munin/localdomain/#{@sink}-alois_sink.html"
+        result = read_rrd(@sink, "alois_sink", "log_input_count")
+      
+      when "alois_in"
+        link = "/munin/localdomain/#{@reporter}-alois_aloisdb.html"
+        result = 0
+        for klass in Prisma::Database.get_classes(:meta) << Message
+          result = result + read_rrd(@reporter, "alois_aloisdb", "#{klass.table_name}")
+        end
+      
+      when "pumpy_queue"
+        link = "/munin/localdomain/#{@reporter}-alois_sinkdb.html"
+        title = "% Full"
+        result = RawsState.get_percentage()
+        
+      when "pumpy_count"
+        link = "/munin/localdomain/#{@reporter}-alois_sinkflows.html"
+
+        title = "Count"
+        result = 0
+        for klass in Prisma::Database.get_classes(:raw) 
+          result = result + read_rrd(@reporter, 'alois_sinkflows', "#{klass.table_name}_incoming")
+        end
+
+      when "pumpy_out"
+        link = "/munin/localdomain/#{@reporter}-alois_sinkflows.html"
+        
+        result = 0
+        for klass in Prisma::Database.get_classes(:raw) 
+          result = result + read_rrd(@reporter, "alois_sinkflows", "#{klass.table_name}_outgoing")
+        end
+
+      when "reports_today"
+	link = url_for(:controller => "reports")
+	result = Report.count(:conditions => ["date = ?", "today".to_time])
+	title = "Reports today"
+	
+      when "alarms_today"
+	link = url_for(:controller => "alarms", :action => 'status')
+	result = Alarm.count(:conditions => ["created_at >= ?", "today".to_time.strftime("%F")])
+	title = "Alarms today"
+	
+      when "yellow_alarms"
+	link = url_for(:controller => "alarms", :action => 'status')
+	result = Alarm.count(:conditions => Alarm::ACTIVE_YELLOW_CONDITION)
+	result = "<span style='background-color:yellow'>#{result}</span>" if result > 0
+	title = "Alarms of level: #{Alarm::YELLOW_LEVELS.join(",")}"
+
+      when "red_alarms"
+	link = url_for(:controller => "alarms", :action => 'status')
+	result = Alarm.count(:conditions => Alarm::ACTIVE_RED_CONDITION)
+	result = "<span style='background-color:red'>#{result}</span>" if result > 0
+	title = "Alarms of level: #{Alarm::RED_LEVELS.join(",")}"
+
+
+#      when "prisma_archiv"
+#        link = "/munin/localdomain/#{@reporter}-df.html"
+#	result = read_rrd(@reporter, "df", "/var/")
+
+        
+      else
+        throw "unknown type"
+      end
+      
+      result = (result.to_f * 100).round.to_f / 100 if result.class.name == "Float"
+    rescue
+      result = "EE"
+      if RAILS_ENV == "development"
+	result += $!.message
+      end
+    end
+
+    if link
+      return "<a class='paint_link' href='#{link}' title='#{title}'>#{result}</a>" 
+    else
+      return "#{result}"
+    end
+  end
+  
+  def measure_inline
+    init
+    val = measure(params[:type])
+    render :text => val, :layout => false
+  end
+
+  def status
+  end
+
+  def load_default_working_items
+    @text = Prisma.load_default_working_items.map {|item|
+      if item.class.name == "String"
+	item
+      else
+	if item.respond_to?(:name)
+	  "#{item.class.name} '#{item.name}' imported"
+	else
+	  "#{item} imported"
+	end
+      end
+    }.join("\n") 
+    @text = "No items to import." if @text == ""
+  end
+
+end

Added: incubator/alois/trunk/rails/app/controllers/report_templates_controller.rb
URL: http://svn.apache.org/viewvc/incubator/alois/trunk/rails/app/controllers/report_templates_controller.rb?rev=1031127&view=auto
==============================================================================
--- incubator/alois/trunk/rails/app/controllers/report_templates_controller.rb (added)
+++ incubator/alois/trunk/rails/app/controllers/report_templates_controller.rb Thu Nov  4 18:27:22 2010
@@ -0,0 +1,146 @@
+# Copyright 2010 The Apache Software Foundation.
+# 
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+# 
+# http://www.apache.org/licenses/LICENSE-2.0
+# 
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+class ReportTemplatesController < ApplicationController
+  include ApplicationHelper
+  before_filter :handle_cancel, :only => [ :new, :create, :update ]
+  before_filter :initialize_parameters
+
+  private
+  def handle_cancel
+    if params[:commit] == "Cancel"
+      redirect_to :action => :list
+    end
+  end
+
+  public
+  def index
+    list
+    render :action => 'list'
+  end
+
+  # GETs should be safe (see http://www.w3.org/2001/tag/doc/whenToUseGet.html)
+  verify :method => :post, :only => [ :destroy, :create, :update ],
+         :redirect_to => { :action => :list }
+
+  def list
+    @report_templates = ReportTemplate.paginate :page => params[:page]
+  end
+
+  def show
+    @report_template = ReportTemplate.find(params[:id])
+    @report_template.delete_cache if params[:delete_cache]
+
+    if params[:render] or @report_template.cache_exist?
+      @preview = true
+
+      @datasource, @conditions = parse_datasource_parameters
+
+      @options = {
+	:url => url_for(:controller => "charts", 
+			:action => "chart_image") + "?"      }      
+      
+      @options[:datasource] = @datasource
+      @options[:conditions] = @conditions
+
+      case params[:commit]
+      when "Save as Report"
+	@report_template.delete_cache
+	@report = Report.generate(@report_template,user, @options)
+	redirect_to :controller => "reports", :action => "show", :id => @report
+      when "Preview with real data"
+#	@report_template.mode = :real
+	@report_template.delete_cache
+	@report_template.render(@options)
+      when "Preview with fake data"
+	@report_template.delete_cache
+	@report_template.mode = :preview
+	cols = @datasource.table.columns.map{|c| c.name}
+	cols += ["data"] # for chart preview always a data col is needed
+	raise "No cols in view." if cols.length == 0
+	@datasource = RandomDatasource.new(cols)
+	@options[:datasource] = @datasource
+
+	@report_template.render(@options)
+      when nil
+	@report_template.mode = :preview	
+      else
+	raise "Unknown preview mode '#{params[:preview]}'."
+      end
+      
+    end
+    @report_template.mode = :preview if @preview
+  end
+
+  def new
+    @report_template = (load_current_object or ReportTemplate.new)
+  end
+
+  def create
+    @report_template = ReportTemplate.new(params[:report_template])
+    if @report_template.save
+      flash[:notice] = 'ReportTemplate was successfully created.'
+      redirect_to :action => 'list'
+    else
+      render :action => 'new'
+    end
+  end
+
+  def edit
+    @report_template = ReportTemplate.find(params[:id])
+  end
+
+  def update
+    @report_template = ReportTemplate.find(params[:id])
+    if @report_template.update_attributes(params[:report_template])
+      flash[:notice] = 'ReportTemplate was successfully updated.'
+      redirect_to :action => 'show', :id => @report_template
+    else
+      render :action => 'edit'
+    end
+  end
+
+  def add_chart
+    @report_template = ReportTemplate.find(params[:id])
+    @chart = Chart.find(params[:chart])
+    @report_template.charts << @chart
+    redirect_to :action => "show", :id => @report_template
+  end
+  
+  def remove_chart
+    @report_template = ReportTemplate.find(params[:id])
+    @chart = Chart.find(params[:chart])
+    @report_template.charts.delete(@chart)
+    redirect_to :action => "show", :id => @report_template
+  end
+
+  def add_table
+    @report_template = ReportTemplate.find(params[:id])
+    @table = Table.find(params[:table])
+    @report_template.tables << @table
+    redirect_to :action => "show", :id => @report_template
+  end
+  
+  def remove_table
+    @report_template = ReportTemplate.find(params[:id])
+    @table = Table.find(params[:table])
+    @report_template.tables.delete(@table)
+    redirect_to :action => "show", :id => @report_template
+  end
+
+  def destroy
+    ReportTemplate.find(params[:id]).destroy
+    redirect_to :action => 'list'
+  end
+end

Added: incubator/alois/trunk/rails/app/controllers/reports_controller.rb
URL: http://svn.apache.org/viewvc/incubator/alois/trunk/rails/app/controllers/reports_controller.rb?rev=1031127&view=auto
==============================================================================
--- incubator/alois/trunk/rails/app/controllers/reports_controller.rb (added)
+++ incubator/alois/trunk/rails/app/controllers/reports_controller.rb Thu Nov  4 18:27:22 2010
@@ -0,0 +1,117 @@
+# Copyright 2010 The Apache Software Foundation.
+# 
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+# 
+# http://www.apache.org/licenses/LICENSE-2.0
+# 
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+class ReportsController < ApplicationController
+  def index
+    list
+    render :action => 'list'
+  end
+
+  # GETs should be safe (see http://www.w3.org/2001/tag/doc/whenToUseGet.html)
+  verify :method => :post, :only => [ :destroy, :create, :update ],
+         :redirect_to => { :action => :list }
+
+  def list
+    @reports = Report.paginate :page => params[:page], :order => "id DESC"
+  end
+
+  def show
+    @image_url = url_for(:controller => "charts", 
+	:action => "chart_image") + "?"
+    @report = Report.find(params[:id])
+    @chart_options = {
+	:url => url_for(:controller => "charts", 
+			:action => "chart_image") + "?"}
+#    begin
+#      raise "View not found." unless @report.original_report_template.view
+#      table = @report.original_report_template.view.table.table_name
+#      @chart_options[:link] = url_for(:controller => "survey",
+#				      :action => "chart_click",
+#				      :table => table) + "?"
+#    rescue
+#      flash[:warning] = "Could not create chart link: '#{$!}'"
+#    end
+    
+    begin
+      @report_text = @report.text(@chart_options) 
+    rescue
+      @report_text = "<span class='error'>'#{$!}'</span>"
+    end
+  end
+
+  def send_to_email
+    @report = Report.find(params[:id])
+    @email_types = ["normal","simple"]
+  end
+
+  def deliver_to_email
+    raise "No address given." unless params[:addresses]
+    raise "No type given" unless params[:type]
+    @report = Report.find(params[:id])
+    ReportMailer.send("deliver_#{params[:type]}", params[:addresses], @report)
+  end
+
+
+  def email_preview
+    @report = Report.find(params[:id])
+    m = ReportMailer.send("create_#{params[:type]}",nil,@report, {:preview => true})
+    render :text => "<html><body>#{BaseMailer.preview_html(m)}</body></html>"
+  end
+
+  def new
+    raise "not implemented"
+    @report = Report.new
+  end
+
+  def create
+    raise "not implemented"
+    @report = Report.new(params[:report])
+    if @report.save
+      flash[:notice] = 'Report was successfully created.'
+      redirect_to :action => 'list'
+    else
+      render :action => 'new'
+    end
+  end
+
+  def edit
+    raise "Cannot edit a report."
+    @report = Report.find(params[:id])
+  end
+
+  def update
+    raise "not implemented"
+    @report = Report.find(params[:id])
+    if @report.update_attributes(params[:report])
+      flash[:notice] = 'Report was successfully updated.'
+      redirect_to :action => 'show', :id => @report
+    else
+      render :action => 'edit'
+    end
+  end
+
+  def destroy
+    Report.find(params[:id]).destroy
+    redirect_to :action => 'list'
+  end
+
+  def get_data
+    @report = Report.find(params[:id])
+    obj = @report.objects[params[:number].to_i]
+    send_data(obj.to_csv,
+	      :type => 'text/csv; charset=iso-8859-1; header=present',
+	      :filename => safe_filename("#{@report.name}_#{@report.id}_#{obj.class.name}_#{obj.name}","csv",@report.date))
+
+  end
+end

Added: incubator/alois/trunk/rails/app/controllers/sentinels_controller.rb
URL: http://svn.apache.org/viewvc/incubator/alois/trunk/rails/app/controllers/sentinels_controller.rb?rev=1031127&view=auto
==============================================================================
--- incubator/alois/trunk/rails/app/controllers/sentinels_controller.rb (added)
+++ incubator/alois/trunk/rails/app/controllers/sentinels_controller.rb Thu Nov  4 18:27:22 2010
@@ -0,0 +1,104 @@
+# Copyright 2010 The Apache Software Foundation.
+# 
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+# 
+# http://www.apache.org/licenses/LICENSE-2.0
+# 
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+class SentinelsController < ApplicationController
+  before_filter :handle_cancel, :only => [ :create, :update ]
+
+  private
+  def handle_cancel
+    if params[:commit] == "Cancel"
+      redirect_to :action => :list
+    end
+  end
+
+  public
+  def index
+    list
+    render :action => 'list'
+  end
+
+  # GETs should be safe (see http://www.w3.org/2001/tag/doc/whenToUseGet.html)
+  verify :method => :post, :only => [ :destroy, :create, :update ],
+         :redirect_to => { :action => :list }
+
+  def list
+    @sentinels = Sentinel.find(:all, :order => "action desc,alarm_level,name")
+  end
+
+  def show
+    @sentinel = Sentinel.find(params[:id])
+  end
+
+  def new
+    @sentinel = (load_current_object or Sentinel.new)
+  end
+
+  def create
+    @sentinel = Sentinel.new(params[:sentinel])
+    begin
+      if @sentinel.save
+        flash[:notice] = 'Sentinel was successfully created.'
+	@sentinel.errors.each {|attribute,text|
+	  flash[:warning] = text
+	}
+        redirect_to :action => 'list'
+      else
+        render :action => 'new'
+      end
+    end
+  end
+
+  def manually_execute
+    @sentinel = Sentinel.find(params[:id])
+    alarm,report = @sentinel.process
+    if alarm
+      flash[:notice] = 'Sentinel produced this alarm.'
+      redirect_to :controller => "alarms", :action => "show", :id => alarm
+    else
+      if report
+	flash[:notice] = 'Sentinel produced this report.'
+	redirect_to :controller => "reports", :action => "show", :id => report
+      else
+	flash[:notice] = 'Sentinel did not produce an alarm or a report.'
+	redirect_to :action => "show", :id => @sentinel
+      end
+    end    
+  end
+
+  def edit
+    @sentinel = Sentinel.find(params[:id])
+  end
+
+  def update
+    @sentinel = Sentinel.find(params[:id])
+    if @sentinel.update_attributes(params[:sentinel])
+      flash[:notice] = 'Sentinel was successfully updated.'
+      @sentinel.errors.each {|attribute,text|
+	flash[:warning] = text
+      }
+      redirect_to :action => 'show', :id => @sentinel
+    else
+      render :action => 'edit'
+    end
+  end
+
+  def destroy
+    Sentinel.find(params[:id]).destroy
+    redirect_to :action => 'list'
+  end
+
+  def auto_complete_for_sentinel_time_range
+    render :inline => "<%= content_tag(:ul, Time.suggest(params[:sentinel][:time_range]).map { |org| content_tag(:li, h(org)) }) %>"
+  end
+end

Added: incubator/alois/trunk/rails/app/controllers/surveillance_controller.rb
URL: http://svn.apache.org/viewvc/incubator/alois/trunk/rails/app/controllers/surveillance_controller.rb?rev=1031127&view=auto
==============================================================================
--- incubator/alois/trunk/rails/app/controllers/surveillance_controller.rb (added)
+++ incubator/alois/trunk/rails/app/controllers/surveillance_controller.rb Thu Nov  4 18:27:22 2010
@@ -0,0 +1,22 @@
+# Copyright 2010 The Apache Software Foundation.
+# 
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+# 
+# http://www.apache.org/licenses/LICENSE-2.0
+# 
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+class SurveillanceController < ApplicationController
+
+  def index
+  end
+  
+end
+  
+  

Added: incubator/alois/trunk/rails/app/controllers/survey_controller.rb
URL: http://svn.apache.org/viewvc/incubator/alois/trunk/rails/app/controllers/survey_controller.rb?rev=1031127&view=auto
==============================================================================
--- incubator/alois/trunk/rails/app/controllers/survey_controller.rb (added)
+++ incubator/alois/trunk/rails/app/controllers/survey_controller.rb Thu Nov  4 18:27:22 2010
@@ -0,0 +1,501 @@
+# Copyright 2010 The Apache Software Foundation.
+# 
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+# 
+# http://www.apache.org/licenses/LICENSE-2.0
+# 
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+class SurveyController < ApplicationController
+  include ApplicationHelper
+  include SurveyHelper
+  before_filter :handle_cancel, :only => [ :create, :update ]
+  before_filter :init
+
+  def init
+    initialize_parameters
+  end
+  
+  private
+
+  def handle_cancel
+    if params[:commit] == "Cancel"
+      redirect_to :action => :list
+    end
+  end
+
+  public
+  def index
+    redirect_to :action => 'list', :transport => params[:transport], :msg_type => params[:msg_type], :application => params[:application], :table_postfix => params[:table_postfix]
+  end
+
+  # GETs should be safe (see http://www.w3.org/2001/tag/doc/whenToUseGet.html)
+  verify :method => :post, :only => [ :destroy, :create, :update ],
+    :redirect_to => { :action => :list }
+
+  def get_desc(i)
+    return nil
+    conditions = @conditions
+    conditions = [[nil,nil,nil,nil]] if @conditions.length ==0
+    value = conditions[i][2]
+    value = YAML.dump(value) unless value.class.name == "String"
+    ret = [
+      ["Column name or name of the rule.","Column/Name",
+        nil,nil,nil,conditions[i][0],nil],
+      ["Operator for the rule.","Operator",
+        nil,nil,nil,conditions[i][1],nil],
+      ["Value to compare for the rule.","Value",
+        nil,nil,nil,value,nil],
+      ["Percentage of items matched this rule.","%",
+        get_condition(i), nil, "ALL", nil, "del_condition","d"],
+      ["All values matched by that rule, and are in this sample.","In %",
+        get_condition_string(true), nil, get_condition(i), nil,nil,nil],
+      ["All values matched by that rule, that are not in this sample.","Not In %",
+        get_condition(i), get_condition_string(true) , get_condition(i), nil,'negate_all_but','>'],
+      ["How many records more would be in the sample if this rule where deleted.","Banish",
+        get_condition_string(true,i),get_condition_string(true), nil, nil,'banished', '>'],
+      ["Disable/Enable the rule.","",
+        nil, nil, nil, if conditions[i][3] then "on" else "off" end, 'toggle', '>']
+    ]
+  end
+
+  def report
+    conditions = get_condition_string
+    #flash[:notice] = "conditions: #{conditions}"
+    #    @pages, @records = paginate current_table_class,
+    #      :per_page => 100,
+    #      :conditions => conditions,
+    #      :joins => @join,
+    #      :select => params[:select],
+    #      :count => params[:count],
+    #      :order => params[:order]
+
+    #    @pages = Paginator.new self, params[:count].to_i, params[:page]
+    #    sql = @current_filter.get_sql
+    #    # this should be done by activerecord
+    #    sql = "SELECT * FROM (#{sql}) AS survey_table " +
+    #      " LIMIT #{@pages.current.offset},#{@pages.items_per_page}"
+    #    @records = current_table_class.find_by_sql(sql)
+  end
+
+  def list_inline
+    begin
+      do_list
+      render :partial => 'table'
+    rescue
+      render :text => "Message:<br><pre>#{$!.message}\n</pre>Trace:<br><pre>#{$!.backtrace.join("\n")}</pre>", :layout => false
+    end
+  end
+
+  private
+
+  def report_table_methods
+    return nil unless params[:show_originals]
+    ["original_text"]
+  end
+  def report_table(options = {})
+    if params[:type] == "chart"
+      data = @chart.get_data
+      table = Ruport::Data::Table.new(:column_names => data[0].keys.map {|k| k == "data" ? @chart.data_column : k})
+      data.each {|row|
+	table << data[0].keys.map {|k| row[k]}
+      }
+      @data = table
+    else
+      conditions = get_condition_string()
+      @data = current_table.report_table(:all,
+					 :conditions => get_condition_string,
+					 :methods => report_table_methods,
+					 :order => @order)
+    end
+  end
+
+  public
+
+  def text
+    #:max_col_width: Ordinal array of column widths. Set automatically but can be overridden. 
+    #:alignment: Defaults to left justify text and right justify numbers. Centers all fields when set to :center. 
+    #:table_width: Will truncate rows at this limit. 
+    #:show_table_headers: Defaults to true 
+    #:show_group_headers: Defaults to true 
+    #:ignore_table_width: When set to true, outputs full table without truncating it. Useful for file output.     
+    txt = report_table.as(:text, :ignore_table_width => true)
+    send_data(txt,
+	      :type => 'text/plain; charset=iso-8859-1; header=present',
+	      :filename => safe_filename(current_datasource.name,"txt"))
+  end
+
+  def csv
+    #:style Used for grouping (:inline,:justified,:raw) 
+    #:format_options A hash of FasterCSV options 
+    #:show_table_headers True by default 
+    #:show_group_headers True by default
+    csv = report_table.as(:csv)   
+    send_data(csv,
+	      :type => 'text/csv; charset=iso-8859-1; header=present',
+	      :filename => safe_filename(current_datasource.name,"csv"))
+  end
+
+  def pdf
+    # General:
+    #  * paper_size  #=> "LETTER"
+    #  * paper_orientation #=> :portrait
+    #
+    # Text:
+    #  * text_format (sets options to be passed to add_text by default)
+    #
+    # Table:
+    #  * table_format (a hash that can take any of the options available
+    #      to PDF::SimpleTable)
+    #  * table_format[:maximum_width] #=> 500
+    #
+    # Grouping:
+    #  * style (:inline,:justified,:separated,:offset)
+    pdf = report_table.as(:pdf)
+    send_data(pdf,
+	      :type => 'application/pdf',
+	      :filename => safe_filename(current_datasource.name,"pdf"))
+  end
+
+
+  def list
+    return redirect_to( :action => "list", :state_id => @state_id) unless params[:state_id]
+    do_list
+  end
+  
+  def add_condition
+   # leave this for backwards compatibility
+    @current_filter.conditions = @current_filter.conditions << 
+      Condition.create(params[:column], params[:operator], params[:value]) if
+      params[:column]
+    @current_filter.conditions = @current_filter.conditions << 
+      Condition.create(params[:column2], params[:operator2], params[:value2]) if 
+      params[:column2]
+
+    params[:columns].each_with_index {|col, i|
+      @current_filter.conditions = @current_filter.conditions << 
+	Condition.create(params[:columns][i], params[:operators][i], params[:values][i])
+    } if params[:columns] and params[:operators] and params[:values]
+    
+    reset_paging
+    save_session
+    redirect_to :action => 'list', :state_id => @state_id # unless params[:state_id]
+  end
+
+  def create_view
+    conditions = get_condition_string() ? " WHERE " + get_condition_string : ""
+    sql = "SELECT * FROM #{current_table.table_name} #{conditions}"
+    view = View.create(:sql_declaration => sql, :id_source_table => current_table.table_name)
+    view.save
+
+    redirect_to :controller => "views", :action => "edit", :id => view
+  end
+
+  def create_view_from_query
+    @record = current_table.find(params[:id])
+    names = []
+    cols =  params[:select_columns].map { |c|
+      c =~ /(.*)\.\`(.*)\`/
+      if names.index($2) == nil
+	ret = "#{c}"     
+      else
+	ret = "#{c} AS #{$1}_#{$2}"     
+      end
+      names.push($2)      
+      ret
+    }.join(", ")
+    view = View.create(:sql_declaration => "SELECT #{cols} FROM #{@record.join_query}", :id_source_table => current_table.table_name)
+    view.save
+
+    redirect_to :controller => "views", :action => "edit", :id => view
+  end
+  
+  def do_list    
+    throw "Table not found." unless current_table
+    conditions = get_condition_string
+
+    @raw_descriptions = get_desc(-1)
+    @descriptions = []
+
+    origin = current_table.table_name
+    origin = "( #{current_table.sql_declaration} ) AS #{origin}" if current_table.respond_to?(:sql_declaration)
+
+    @query_string = "SELECT * FROM #{origin}"
+    @query_string = @query_string + " WHERE #{get_condition_string}" if conditions
+
+    begin
+      @records = current_table.paginate(:page => @page_number.to_i,
+					:per_page => @paging_size.to_i,
+					:total_entries => if count_fast then count_fast else 100000 end,
+					:conditions => conditions,
+					:order => @order,
+					:limit  =>  @paging_size.to_i,
+					:offset =>  @page_offset)
+      @query_string = (current_table.last_executed_find or @query_string) if current_table.respond_to?(:last_executed_find)
+    rescue
+      @records = nil
+      flash[:error] = "Error executing query: #{$!}"
+    end
+				    
+
+#    @pages = Paginator.new self, 
+#      if count_fast then count_fast else 100000 end,
+#      @paging_size.to_i,
+#      @page_number.to_i
+#    @records = current_table.find :all, 
+
+  end
+
+  def count_text
+    render :partial => 'count_text'
+  end
+
+  def show
+    if params[:id]
+      @record = current_table.find(params[:id])
+    else
+      # show table or view description
+      if @table_class.class == View
+	redirect_to :controller => "views", :action => "show", :id => @table_class.id
+      else
+	redirect_to :controller => "tablelist"
+      end
+    end
+  end
+
+  def original_inline
+    @record = current_table.find(params[:id])
+    render :partial => "original"
+  end
+
+  def add_filter
+    if params[:survey] and params[:survey][:filter_id] 
+      @filters << Filter.find(params[:survey][:filter_id])
+      @filters = @filters.uniq
+      save_session
+    end
+    render :partial => "edit_named_filters"
+  end
+
+  def remove_filter
+    @filters.delete(Filter.find(params[:filter_id].to_i))
+    @filters = @filters.uniq
+    save_session
+    render :partial => "edit_named_filters"
+  end
+
+  def chart
+    return redirect_to( :action => "chart", :state_id => @state_id) unless params[:state_id]
+    save_session
+    @query_string = @chart.query
+    @chart.delete_data if params[:recreate_data]
+    render :action => "list"
+  end
+
+  def chart_inline
+    begin
+      @chart.delete_data if params[:recreate_data]
+      render :partial => 'chart'
+    rescue
+      render :text => "Message:<br><pre>#{$!.message}\n</pre>Trace:<br><pre>#{$!.backtrace.join("\n")}</pre>", :layout => false
+    end
+  end
+
+#  def chart_image    
+#    @chart.render(params[:recreate_data])
+#    headers['Cache-Control'] = 'no-cache, must-revalidate'
+#    send_file( @chart.png_file_name,
+#	      :disposition => 'inline', 
+#	      :type => 'image/png', 
+#	      :filename => @chart.image_id + ".png")
+#  end
+
+  def chart_map
+    @chart.render(:recreate_data => params[:recreate_data])   
+    @chart_image_tag = @chart.image_tag({:url => url_for(:controller => "charts", :action => "chart_image") + "?"})
+    @chart_image_map = @chart.image_map({:link => url_for(:action => "chart_click", :state_id => state_id) + "&"})
+    
+    render :partial => "chart_map"
+  end
+
+  def chart_data
+    data = @chart.get_data
+    table = Ruport::Data::Table.new(:column_names => data[0].keys.map {|k| k == "data" ? @chart.data_column : k})
+    data.each {|row|
+      table << data[0].keys.map {|k| row[k]}
+    }
+    if params[:type] == "csv"
+      render :text => "<pre>#{table.to_csv}</pre>"
+    else
+      render :text => "<pre>#{table}</pre>"
+    end
+  end
+
+  def normalize_parameter(column_param, value_param, remove_value_if_not_found = false)
+    column = params.delete(column_param)
+    if column.nil? or column == ""
+      params.delete(value_param) if remove_value_if_not_found
+      return nil 
+    end
+
+    value = params.delete(value_param)    
+    if value =~ Regexp.new("^" + Regexp.quote("#{column}=") + "(.*)")
+      value = $1
+    end
+
+    if value == Chart::NIL_VALUE then
+      value = nil
+    end
+    
+    if value.nil?
+      operator = "IS NULL"
+    else
+      if value.length > 0 and value[-1,1] == "%" 
+	operator = "LIKE"
+      else
+	operator = "="
+      end
+    end
+
+    if current_table and current_table.columns_hash[column] and 
+	current_table.columns_hash[column].type == :date and
+	value =~ /^\d+\.?\d*$/
+      value = Chart.map_to_date(value)
+    end
+
+    if current_table and current_table.columns_hash[column] and 
+	current_table.columns_hash[column].type == :time and
+	value =~ /^\d+\.?\d*$/
+      value = Chart.map_to_time(value)
+    end
+
+    params[:columns] ||= []
+    params[:operators] ||= []
+    params[:values] ||= []
+
+    params[:columns].push(column)
+    params[:operators].push(operator)
+    params[:values].push(value)
+  end
+
+  def chart_click
+    normalize_parameter(:column, :category)
+    normalize_parameter(:column1, :category)
+    normalize_parameter(:category_column, :category, true)
+    normalize_parameter(:column2, :series)
+    normalize_parameter(:serie_column, :series, true)
+    normalize_parameter(:range_column, :range)
+    
+    params[:action] = "add_condition"   
+
+    clone_session
+    params[:state_id] = state_id    
+    redirect_to params.update(:action => "add_condition")
+  end
+
+  def auto_refresh_inline
+    begin
+      if params[:auto_refresh]
+	if params[:auto_refresh].to_i < 1
+	  params[:auto_refresh] = nil 
+	  flash[:error] = "Auto refresh value must be an integer above 1."
+	end
+      end
+      render :partial => 'auto_refresh'
+    rescue
+      render :text => "Message:<br><pre>#{$!.message}\n</pre>Trace:<br><pre>#{$!.backtrace.join("\n")}</pre>", :layout => false
+    end   
+  end
+  def auto_refresh_info
+    @chart.delete_data if @chart
+    render :partial => "auto_refresh_info"
+  end
+
+  def create_date(param)
+    param[:year] = Time.now.year if param[:year] == ""
+    if param[:month] == "" and  param[:day] != "" then
+      param[:month] = Time.now.month
+    end
+    if param[:month] != "" and param[:day] == "" then
+      param[:day] = 1
+    end
+    return Date.civil(param[:year].to_i,param[:month].to_i,param[:day].to_i) if
+      param[:year] != "" and param[:month] != "" and param[:day] != ""
+  end
+
+  def del_condition
+    @conditions[params[:id].to_i..params[:id].to_i] = []
+    @current_filter.set_conditions(@conditions)
+    reset_paging
+    save_session
+    list
+    render :action => 'list'
+  end
+
+  def toggle
+    @conditions[params[:id].to_i][3] = !(@conditions[params[:id].to_i][3])
+    @current_filter.set_conditions(@conditions)
+    list
+    render :action => 'list'
+  end
+
+  def only_condition
+    @conditions = [@conditions[params[:id].to_i]]
+    @current_filter.set_conditions(@conditions)
+    list
+    render :action => 'list'
+  end
+
+  def negative_set
+    @negative_set = true
+    list
+    render :action => 'list'
+  end
+
+  def banished
+    @banished_set = true
+    @negative_set = true
+    @global_rule_number = number = params[:id].to_i
+    list
+    render :action => 'list'
+  end
+
+  def negate_all_but
+    @negative_set = true
+    @global_rule_number = number = params[:id].to_i
+    list
+    render :action => 'list'
+
+#    @conditions = Marshal.load(params[:conditions]) unless @conditions
+#    number = params[:id].to_i
+#    for i in 0...@conditions.length
+#      if i!=number then
+#        case @conditions[i][1]
+#        when "IS NULL"
+#          @conditions[i][1] = "NOT IS NULL"
+#        when "NOT IS NULL"
+#          @conditions[i][1] = "IS NULL"
+#        when "LIKE"
+#          @conditions[i][1] = "NOT LIKE"
+#        when "NOT LIKE"
+#          @conditions[i][1] = "LIKE"
+#        when "="
+#          @conditions[i][1] = "!="
+#        when "!="
+#          @conditions[i][1] = "="
+#        else
+#          throw "Unknown operator #{@conditions[i][1]}"
+#        end
+#      end
+#    end
+#    list
+#    render :action => 'list'
+  end
+
+end

Added: incubator/alois/trunk/rails/app/controllers/tablelist_controller.rb
URL: http://svn.apache.org/viewvc/incubator/alois/trunk/rails/app/controllers/tablelist_controller.rb?rev=1031127&view=auto
==============================================================================
--- incubator/alois/trunk/rails/app/controllers/tablelist_controller.rb (added)
+++ incubator/alois/trunk/rails/app/controllers/tablelist_controller.rb Thu Nov  4 18:27:22 2010
@@ -0,0 +1,61 @@
+# Copyright 2010 The Apache Software Foundation.
+# 
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+# 
+# http://www.apache.org/licenses/LICENSE-2.0
+# 
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+class TablelistController < ApplicationController
+  include ApplicationHelper
+
+  def index
+  end
+
+  # Return the record count for a table
+  def count
+    begin
+      klass = Prisma::Database.get_class_from_tablename(params[:table_name])
+      throw "Class for table #{params[:table]} not found." unless klass
+      @count = klass.approx_count
+    rescue
+      @count = "N/A <!-- #{$!.message} -->"
+    end
+
+    # Render without layout as it is used inline
+    render(:layout => false)
+  end
+
+  def schema
+    initialize_parameters
+    @global_source_class = LogMeta #SourceDbMeta
+    @record = current_table.find(params[:id]) if params[:id]
+
+    p = @record
+    @child_path = [p]
+    while !p.nil? and (p.class.name != @global_source_class.name)
+      (p = p.parent)
+      @child_path.push(p)
+    end
+#    throw @child_path.map{|n| n.class.name}
+
+    @parent_path = []
+    while !p.nil?
+      @parent_path.push(p)
+      p = p.parent
+    end
+
+    if @parent_path.length == 0
+      @parent_path = @child_path
+      @child_path = []
+    else
+      @child_path.reverse!
+    end
+  end
+end

Added: incubator/alois/trunk/rails/app/controllers/tables_controller.rb
URL: http://svn.apache.org/viewvc/incubator/alois/trunk/rails/app/controllers/tables_controller.rb?rev=1031127&view=auto
==============================================================================
--- incubator/alois/trunk/rails/app/controllers/tables_controller.rb (added)
+++ incubator/alois/trunk/rails/app/controllers/tables_controller.rb Thu Nov  4 18:27:22 2010
@@ -0,0 +1,103 @@
+# Copyright 2010 The Apache Software Foundation.
+# 
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+# 
+# http://www.apache.org/licenses/LICENSE-2.0
+# 
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+class TablesController < ApplicationController
+  before_filter :initialize_parameters
+
+  # GET /tables
+  # GET /tables.xml
+  def index
+    @tables = Table.find(:all)
+
+    respond_to do |format|
+      format.html # index.html.erb
+      format.xml  { render :xml => @tables }
+    end
+  end
+
+  def list
+    redirect_to :action => :index
+  end
+
+  # GET /tables/1
+  # GET /tables/1.xml
+  def show
+    @table = Table.find(params[:id])
+
+    respond_to do |format|
+      format.html # show.html.erb
+      format.xml  { render :xml => @table }
+    end
+  end
+
+  # GET /tables/new
+  # GET /tables/new.xml
+  def new
+    @table = Table.new
+  end
+
+  # GET /tables/1/edit
+  def edit
+    @table = Table.find(params[:id])
+  end
+
+  # POST /tables
+  # POST /tables.xml
+  def create
+    @table = Table.new(params[:table])
+    
+    if @table.save
+      flash[:notice] = 'Table was successfully created.'
+      redirect_to :action => 'list'
+    else
+      render :action => 'new'
+    end
+  end
+
+  # PUT /tables/1
+  # PUT /tables/1.xml
+  def update
+    @table = Table.find(params[:id])    
+    if @table.update_attributes(params[:table])
+      flash[:notice] = 'Table was successfully updated.'
+      redirect_to :action => 'show', :id => @table
+    else
+      render :action => 'edit'
+    end
+  end
+
+  # DELETE /tables/1
+  # DELETE /tables/1.xml
+  def destroy
+    @table = Table.find(params[:id])
+    @table.destroy
+
+    respond_to do |format|
+      format.html { redirect_to :action => "list" }
+      format.xml  { head :ok }
+    end
+  end
+
+  def render_table
+    @table = Table.find(params[:id])
+    @datasource, @conditions = parse_datasource_parameters
+    @table.datasource = @datasource
+    @table.conditions = @conditions
+        
+    @table.remove_cache
+    @count = @table.count
+    @data =(@table.as(params[:type].to_sym, :ignore_table_width => true) or "NO DATA")
+  end
+
+end

Added: incubator/alois/trunk/rails/app/controllers/views_controller.rb
URL: http://svn.apache.org/viewvc/incubator/alois/trunk/rails/app/controllers/views_controller.rb?rev=1031127&view=auto
==============================================================================
--- incubator/alois/trunk/rails/app/controllers/views_controller.rb (added)
+++ incubator/alois/trunk/rails/app/controllers/views_controller.rb Thu Nov  4 18:27:22 2010
@@ -0,0 +1,94 @@
+# Copyright 2010 The Apache Software Foundation.
+# 
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+# 
+# http://www.apache.org/licenses/LICENSE-2.0
+# 
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+class ViewsController < ApplicationController
+  include ApplicationHelper
+  before_filter :handle_cancel, :only => [ :new, :create, :update ]
+
+  private
+  def handle_cancel
+    if params[:commit] == "Cancel"
+      redirect_to :action => :list
+    end
+  end
+
+  public
+  def index
+    redirect_to :action => :list
+  end
+
+  # GETs should be safe (see http://www.w3.org/2001/tag/doc/whenToUseGet.html)
+  verify :method => :post, :only => [ :destroy, :create, :update ],
+         :redirect_to => { :action => :list }
+
+  def list
+    @views = View.find(:all).select {|view| view.exclusive_for_group.nil? or view.exclusive_for_group == "" or view.exclusive_for_group == group}
+  end
+
+  def show
+    @view = View.find(params[:id])
+  end
+
+  def show_inline
+    @view = View.find(params[:id])
+    render :layout => false
+  end
+
+  def new
+    @view = View.new
+    @view = View.from_zip(params[:view_zip]) if params[:view_zip]
+  end
+
+  def create
+    begin
+      @view = View.new(params[:view])
+      if @view.save
+	flash[:notice] = 'View was successfully created.'
+	redirect_to :action => 'list'
+      else
+	p @view.errors
+	render :action => 'new'
+      end
+    rescue
+      p $!.message
+      flash[:error] = $!.message
+      render :action => 'new'
+    end
+  end
+
+  def edit
+    @view = View.find(params[:id])
+  end
+
+  def update
+    begin
+      @view = View.find(params[:id])
+      if @view.update_attributes(params[:view])
+	flash[:notice] = 'View was successfully updated.'
+	redirect_to :action => 'list', :id => @view
+      else
+	render :action => 'edit'
+      end
+    rescue
+      flash[:error] = $!.message
+      render :action => 'edit'
+    end
+  end
+
+  def destroy
+    View.find(params[:id]).destroy
+    redirect_to :action => 'list'
+  end
+
+end

Added: incubator/alois/trunk/rails/app/helpers/alarms_helper.rb
URL: http://svn.apache.org/viewvc/incubator/alois/trunk/rails/app/helpers/alarms_helper.rb?rev=1031127&view=auto
==============================================================================
--- incubator/alois/trunk/rails/app/helpers/alarms_helper.rb (added)
+++ incubator/alois/trunk/rails/app/helpers/alarms_helper.rb Thu Nov  4 18:27:22 2010
@@ -0,0 +1,33 @@
+# Copyright 2010 The Apache Software Foundation.
+# 
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+# 
+# http://www.apache.org/licenses/LICENSE-2.0
+# 
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+module AlarmsHelper
+
+  def status_traffic_light(options = {})
+    color = Alarm.status_color
+    img = case color
+	  when "red"
+	    "traffic_light_red_dan_ge_01.png"
+	  when "orange","yellow"
+	    "traffic_light_yellow_dan_01.png"
+	  when "green"
+	    "traffic_light_green_dan__01.png"
+	  else
+	    "traffic_light_dan_gerhar_01.png"
+	  end
+    
+    return "<a href='#{url_for(:controller => "alarms", :action => 'status')}' title='Current alarm level is: #{color}'>#{image_tag img, options}</a>" 
+
+  end
+end

Added: incubator/alois/trunk/rails/app/helpers/alois_helper.rb
URL: http://svn.apache.org/viewvc/incubator/alois/trunk/rails/app/helpers/alois_helper.rb?rev=1031127&view=auto
==============================================================================
--- incubator/alois/trunk/rails/app/helpers/alois_helper.rb (added)
+++ incubator/alois/trunk/rails/app/helpers/alois_helper.rb Thu Nov  4 18:27:22 2010
@@ -0,0 +1,63 @@
+# Copyright 2010 The Apache Software Foundation.
+# 
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+# 
+# http://www.apache.org/licenses/LICENSE-2.0
+# 
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+module AloisHelper
+
+  def alois_menu
+    common_menu
+  end
+
+  def navigation_bar
+    
+
+    @navigation=[]
+
+    @navigation.push({ :title => 'Home', :url => url_for( :controller => 'prisma', :action => 'overview')})
+
+    @navigation.push({ :title => 'Statistics', :url => url_for( :controller => 'prisma', :action => 'statistics')})
+
+    sub_entries=[]
+    for view in View.find(:all, :order => 'name')
+      sub_entries.push({ :title => view.name , :url => url_for( :controller => 'survey', :action => 'list', :table => view.view_name ) })
+    end
+
+    @navigation.push({ :title => 'Views', :url => url_for( :controller => 'views'), :submenu => sub_entries })
+
+    sub_entries=[]
+    for klass in Prisma::Database.get_classes(:meta).sort{ |x,y| ((x.name <=> y.name) == 0) ? x.description <=> y.description : x.name <=> y.name }
+      sub_entries.push({ :title => klass.description, :url => url_for( :controller => 'survey', :action => 'list', :table => klass.table_name ) })
+    end
+    @navigation.push({ :title => 'Tables', :url => url_for( :controller => 'tablelist'), :submenu => sub_entries })
+
+    sub_entries=[]
+    for filter in Filter.find(:all)
+      sub_entries.push({ :title => filter.name, :url => url_for( :controller => 'filters', :action => 'show', :id => filter ) })
+    end
+    @navigation.push({ :title => 'Filters', :url => url_for( :controller => 'filters' ), :submenu => sub_entries })
+
+    sub_entries=[]
+    for sentinel in Sentinel.find(:all)
+      sub_entries.push({ :title => sentinel.name, :url => url_for( :controller => 'sentinels', :action => 'show', :id => sentinel ) })
+    end
+    @navigation.push({ :title => 'Sentinels', :url => url_for( :controller => 'sentinels' ), :submenu => sub_entries })
+    return @navigation
+  end
+
+
+  # Output helper
+  def title(title)
+    return "<h1>#{h(title)}</h1>"
+  end
+
+end