[Title] append dibsweb 2.0 version
authordibs <dibs@core1compiler.(none)>
Mon, 3 Dec 2012 07:59:54 +0000 (16:59 +0900)
committerdibs <dibs@core1compiler.(none)>
Mon, 3 Dec 2012 07:59:54 +0000 (16:59 +0900)
82 files changed:
dibs-web/.project [new file with mode: 0644]
dibs-web/Gemfile
dibs-web/Gemfile.lock [new file with mode: 0644]
dibs-web/README.rdoc [new file with mode: 0644]
dibs-web/Rakefile [new file with mode: 0644]
dibs-web/app/assets/images/rails.png [new file with mode: 0644]
dibs-web/app/controllers/admin_controller.rb
dibs-web/app/controllers/admin_distribution_controller.rb [new file with mode: 0644]
dibs-web/app/controllers/admin_group_controller.rb [new file with mode: 0644]
dibs-web/app/controllers/admin_project_controller.rb [new file with mode: 0644]
dibs-web/app/controllers/admin_server_controller.rb [new file with mode: 0644]
dibs-web/app/controllers/admin_user_controller.rb [new file with mode: 0644]
dibs-web/app/controllers/application_controller.rb
dibs-web/app/controllers/jobs_controller.rb
dibs-web/app/controllers/projects_controller.rb
dibs-web/app/controllers/sessions_controller.rb
dibs-web/app/controllers/users_controller.rb
dibs-web/app/controllers/utils.rb
dibs-web/app/helpers/admin_distribution_helper.rb [new file with mode: 0644]
dibs-web/app/helpers/admin_group_helper.rb [new file with mode: 0644]
dibs-web/app/helpers/admin_project_helper.rb [new file with mode: 0644]
dibs-web/app/helpers/admin_server_helper.rb [new file with mode: 0644]
dibs-web/app/helpers/admin_user_helper.rb [new file with mode: 0644]
dibs-web/app/models/distribution.rb
dibs-web/app/models/group.rb
dibs-web/app/models/group_project_access.rb [new file with mode: 0644]
dibs-web/app/models/group_project_accesses.rb [deleted file]
dibs-web/app/models/job.rb
dibs-web/app/models/os_category.rb [new file with mode: 0644]
dibs-web/app/models/package.rb [new file with mode: 0644]
dibs-web/app/models/project.rb
dibs-web/app/models/project_bin.rb
dibs-web/app/models/project_git.rb
dibs-web/app/models/project_os.rb
dibs-web/app/models/remote_build_server.rb [new file with mode: 0644]
dibs-web/app/models/remote_build_servers.rb [deleted file]
dibs-web/app/models/server_config.rb [new file with mode: 0644]
dibs-web/app/models/source.rb [new file with mode: 0644]
dibs-web/app/models/supported_os.rb
dibs-web/app/models/sync_pkg_server.rb [new file with mode: 0644]
dibs-web/app/models/sync_project.rb [new file with mode: 0644]
dibs-web/app/models/user.rb
dibs-web/app/models/user_group.rb [new file with mode: 0644]
dibs-web/config.ru [new file with mode: 0644]
dibs-web/config.xml [new file with mode: 0644]
dibs-web/config/database.yml
dibs-web/config/routes.rb
dibs-web/db/schema.rb [new file with mode: 0644]
dibs-web/db/seeds.rb [new file with mode: 0644]
dibs-web/doc/README_FOR_APP [new file with mode: 0644]
dibs-web/public/404.html [new file with mode: 0644]
dibs-web/public/422.html [new file with mode: 0644]
dibs-web/public/500.html [new file with mode: 0644]
dibs-web/public/favicon.ico [new file with mode: 0644]
dibs-web/public/index.html
dibs-web/public/javascripts/admin-distribution-add.js [new file with mode: 0644]
dibs-web/public/javascripts/admin-distribution-modify.js [new file with mode: 0644]
dibs-web/public/javascripts/admin-distribution.js [new file with mode: 0644]
dibs-web/public/javascripts/admin-group-add.js [new file with mode: 0644]
dibs-web/public/javascripts/admin-group-modify.js [new file with mode: 0644]
dibs-web/public/javascripts/admin-group.js
dibs-web/public/javascripts/admin-project-add.js [new file with mode: 0644]
dibs-web/public/javascripts/admin-project-modify.js [new file with mode: 0644]
dibs-web/public/javascripts/admin-project.js
dibs-web/public/javascripts/admin-server-add.js [new file with mode: 0644]
dibs-web/public/javascripts/admin-server-modify.js [new file with mode: 0644]
dibs-web/public/javascripts/admin-server-remove.js [new file with mode: 0644]
dibs-web/public/javascripts/admin-server.js
dibs-web/public/javascripts/admin-user-modify.js [new file with mode: 0644]
dibs-web/public/javascripts/admin-user.js
dibs-web/public/javascripts/build.js [new file with mode: 0644]
dibs-web/public/javascripts/dibs-api.js [new file with mode: 0644]
dibs-web/public/javascripts/jobs.js
dibs-web/public/javascripts/log.js [new file with mode: 0644]
dibs-web/public/javascripts/main.js
dibs-web/public/javascripts/projects.js
dibs-web/public/javascripts/session.js
dibs-web/public/javascripts/user.js [new file with mode: 0644]
dibs-web/public/log.html [new file with mode: 0644]
dibs-web/public/robots.txt [new file with mode: 0644]
dibs-web/public/stylesheets/style.css
dibs-web/script/rails [new file with mode: 0755]

diff --git a/dibs-web/.project b/dibs-web/.project
new file mode 100644 (file)
index 0000000..acb2d68
--- /dev/null
@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+       <name>dibs</name>
+       <comment></comment>
+       <projects>
+       </projects>
+       <buildSpec>
+               <buildCommand>
+                       <name>org.eclipse.wst.jsdt.core.javascriptValidator</name>
+                       <arguments>
+                       </arguments>
+               </buildCommand>
+               <buildCommand>
+                       <name>org.eclipse.wst.common.project.facet.core.builder</name>
+                       <arguments>
+                       </arguments>
+               </buildCommand>
+               <buildCommand>
+                       <name>json.validation.builder</name>
+                       <arguments>
+                       </arguments>
+               </buildCommand>
+               <buildCommand>
+                       <name>org.tizen.web.jslint.nature.JSLintBuilder</name>
+                       <arguments>
+                       </arguments>
+               </buildCommand>
+               <buildCommand>
+                       <name>org.tizen.web.css.nature.CSSBuilder</name>
+                       <arguments>
+                       </arguments>
+               </buildCommand>
+               <buildCommand>
+                       <name>org.eclipse.wst.validation.validationbuilder</name>
+                       <arguments>
+                       </arguments>
+               </buildCommand>
+               <buildCommand>
+                       <name>org.tizen.web.project.builder.WebBuilder</name>
+                       <arguments>
+                               <dictionary>
+                                       <key>usedLibraryType</key>
+                                       <value>jQueryMobile</value>
+                               </dictionary>
+                       </arguments>
+               </buildCommand>
+       </buildSpec>
+       <natures>
+               <nature>json.validation.nature</nature>
+               <nature>org.tizen.web.jslint.nature.JSLintNature</nature>
+               <nature>org.tizen.web.css.nature.CSSNature</nature>
+               <nature>org.eclipse.wst.common.project.facet.core.nature</nature>
+               <nature>org.eclipse.wst.jsdt.core.jsNature</nature>
+               <nature>org.eclipse.wst.common.modulecore.ModuleCoreNature</nature>
+               <nature>org.tizen.web.project.builder.WebNature</nature>
+       </natures>
+</projectDescription>
index e8419ca9904fc21f8a2972e2a127fdaea2289a81..49c22d0714644dbfd67d737069488b982aeb0328 100644 (file)
@@ -23,6 +23,9 @@ end
 
 gem 'jquery-rails'
 
+# mysql
+gem 'mysql2', '> 0.3' # as stated above
+
 # user
 gem 'builder'
 
diff --git a/dibs-web/Gemfile.lock b/dibs-web/Gemfile.lock
new file mode 100644 (file)
index 0000000..0ba6f06
--- /dev/null
@@ -0,0 +1,117 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    actionmailer (3.2.8)
+      actionpack (= 3.2.8)
+      mail (~> 2.4.4)
+    actionpack (3.2.8)
+      activemodel (= 3.2.8)
+      activesupport (= 3.2.8)
+      builder (~> 3.0.0)
+      erubis (~> 2.7.0)
+      journey (~> 1.0.4)
+      rack (~> 1.4.0)
+      rack-cache (~> 1.2)
+      rack-test (~> 0.6.1)
+      sprockets (~> 2.1.3)
+    activemodel (3.2.8)
+      activesupport (= 3.2.8)
+      builder (~> 3.0.0)
+    activerecord (3.2.8)
+      activemodel (= 3.2.8)
+      activesupport (= 3.2.8)
+      arel (~> 3.0.2)
+      tzinfo (~> 0.3.29)
+    activeresource (3.2.8)
+      activemodel (= 3.2.8)
+      activesupport (= 3.2.8)
+    activesupport (3.2.8)
+      i18n (~> 0.6)
+      multi_json (~> 1.0)
+    arel (3.0.2)
+    bcrypt-ruby (3.0.1)
+    builder (3.0.3)
+    coffee-rails (3.2.2)
+      coffee-script (>= 2.2.0)
+      railties (~> 3.2.0)
+    coffee-script (2.2.0)
+      coffee-script-source
+      execjs
+    coffee-script-source (1.3.3)
+    erubis (2.7.0)
+    execjs (1.4.0)
+      multi_json (~> 1.0)
+    hike (1.2.1)
+    i18n (0.6.1)
+    journey (1.0.4)
+    jquery-rails (2.1.3)
+      railties (>= 3.1.0, < 5.0)
+      thor (~> 0.14)
+    json (1.7.5)
+    mail (2.4.4)
+      i18n (>= 0.4.0)
+      mime-types (~> 1.16)
+      treetop (~> 1.4.8)
+    mime-types (1.19)
+    multi_json (1.3.6)
+    mysql2 (0.3.11)
+    polyglot (0.3.3)
+    rack (1.4.1)
+    rack-cache (1.2)
+      rack (>= 0.4)
+    rack-ssl (1.3.2)
+      rack
+    rack-test (0.6.2)
+      rack (>= 1.0)
+    rails (3.2.8)
+      actionmailer (= 3.2.8)
+      actionpack (= 3.2.8)
+      activerecord (= 3.2.8)
+      activeresource (= 3.2.8)
+      activesupport (= 3.2.8)
+      bundler (~> 1.0)
+      railties (= 3.2.8)
+    railties (3.2.8)
+      actionpack (= 3.2.8)
+      activesupport (= 3.2.8)
+      rack-ssl (~> 1.3.2)
+      rake (>= 0.8.7)
+      rdoc (~> 3.4)
+      thor (>= 0.14.6, < 2.0)
+    rake (0.9.2.2)
+    rdoc (3.12)
+      json (~> 1.4)
+    sass (3.2.1)
+    sass-rails (3.2.5)
+      railties (~> 3.2.0)
+      sass (>= 3.1.10)
+      tilt (~> 1.3)
+    sprockets (2.1.3)
+      hike (~> 1.2)
+      rack (~> 1.0)
+      tilt (~> 1.1, != 1.3.0)
+    sqlite3 (1.3.6)
+    thor (0.16.0)
+    tilt (1.3.3)
+    treetop (1.4.10)
+      polyglot
+      polyglot (>= 0.3.1)
+    tzinfo (0.3.33)
+    uglifier (1.3.0)
+      execjs (>= 0.3.0)
+      multi_json (~> 1.0, >= 1.0.2)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  bcrypt-ruby
+  builder
+  coffee-rails (~> 3.2.1)
+  jquery-rails
+  json
+  mysql2 (> 0.3)
+  rails (= 3.2.8)
+  sass-rails (~> 3.2.3)
+  sqlite3
+  uglifier (>= 1.0.3)
diff --git a/dibs-web/README.rdoc b/dibs-web/README.rdoc
new file mode 100644 (file)
index 0000000..7c36f23
--- /dev/null
@@ -0,0 +1,261 @@
+== Welcome to Rails
+
+Rails is a web-application framework that includes everything needed to create
+database-backed web applications according to the Model-View-Control pattern.
+
+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. At the command prompt, create a new Rails application:
+       <tt>rails new myapp</tt> (where <tt>myapp</tt> is the application name)
+
+2. Change directory to <tt>myapp</tt> and start the web server:
+       <tt>cd myapp; rails server</tt> (run with --help for options)
+
+3. Go to http://localhost:3000/ and you'll see:
+       "Welcome aboard: You're riding Ruby on Rails!"
+
+4. Follow the guidelines to start developing your application. You can find
+the following resources handy:
+
+* The Getting Started Guide: http://guides.rubyonrails.org/getting_started.html
+* Ruby on Rails Tutorial Book: http://www.railstutorial.org/
+
+
+== Debugging Rails
+
+Sometimes your application goes wrong. Fortunately there are a lot of tools that
+will help you debug it and get it back on the rails.
+
+First area to check is the application log files. Have "tail -f" commands
+running on the server.log and development.log. 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.
+
+You can also log your own messages directly into the log file from your code
+using the Ruby logger class from inside your controllers. Example:
+
+  class WeblogController < ActionController::Base
+    def destroy
+      @weblog = Weblog.find(params[:id])
+      @weblog.destroy
+      logger.info("#{Time.now} Destroyed Weblog ID ##{@weblog.id}!")
+    end
+  end
+
+The result will be a message in your log file along the lines of:
+
+  Mon Oct 08 14:22:29 +1000 2007 Destroyed Weblog ID #1!
+
+More information on how to use the logger is at http://www.ruby-doc.org/core/
+
+Also, Ruby documentation can be found at http://www.ruby-lang.org/. There are
+several books available online as well:
+
+* Programming Ruby: http://www.ruby-doc.org/docs/ProgrammingRuby/ (Pickaxe)
+* Learn to Program: http://pine.fm/LearnToProgram/ (a beginners guide)
+
+These two books will bring you up to speed on the Ruby language and also on
+programming in general.
+
+
+== Debugger
+
+Debugger support is available through the debugger command when you start your
+Mongrel or WEBrick server with --debugger. This means that you can break out of
+execution at any point in the code, investigate and change the model, and then,
+resume execution! You need to install ruby-debug to run the server in debugging
+mode. With gems, use <tt>sudo gem install ruby-debug</tt>. Example:
+
+  class WeblogController < ActionController::Base
+    def index
+      @posts = Post.all
+      debugger
+    end
+  end
+
+So the controller will accept the action, run the first line, then present you
+with a IRB prompt in the server window. Here you can do things like:
+
+  >> @posts.inspect
+  => "[#<Post:0x14a6be8
+          @attributes={"title"=>nil, "body"=>nil, "id"=>"1"}>,
+       #<Post:0x14a6620
+          @attributes={"title"=>"Rails", "body"=>"Only ten..", "id"=>"2"}>]"
+  >> @posts.first.title = "hello from a debugger"
+  => "hello from a debugger"
+
+...and even better, 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 can enter "cont".
+
+
+== Console
+
+The console is a Ruby shell, which allows you to interact with your
+application's domain model. 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.
+
+To start the console, run <tt>rails console</tt> from the application
+directory.
+
+Options:
+
+* Passing the <tt>-s, --sandbox</tt> argument will rollback any modifications
+  made to the database.
+* Passing an environment name as an argument will load the corresponding
+  environment. Example: <tt>rails console production</tt>.
+
+To reload your controllers and models after launching the console run
+<tt>reload!</tt>
+
+More information about irb can be found at:
+link:http://www.rubycentral.org/pickaxe/irb.html
+
+
+== dbconsole
+
+You can go to the command line of your database directly through <tt>rails
+dbconsole</tt>. You would be connected to the database with the credentials
+defined in database.yml. Starting the script without arguments will connect you
+to the development database. Passing an argument will connect you to a different
+database, like <tt>rails dbconsole production</tt>. Currently works for MySQL,
+PostgreSQL and SQLite 3.
+
+== Description of Contents
+
+The default directory structure of a generated Ruby on Rails application:
+
+  |-- app
+  |   |-- assets
+  |       |-- images
+  |       |-- javascripts
+  |       `-- stylesheets
+  |   |-- controllers
+  |   |-- helpers
+  |   |-- mailers
+  |   |-- models
+  |   `-- views
+  |       `-- layouts
+  |-- config
+  |   |-- environments
+  |   |-- initializers
+  |   `-- locales
+  |-- db
+  |-- doc
+  |-- lib
+  |   `-- tasks
+  |-- log
+  |-- public
+  |-- script
+  |-- test
+  |   |-- fixtures
+  |   |-- functional
+  |   |-- integration
+  |   |-- performance
+  |   `-- unit
+  |-- tmp
+  |   |-- cache
+  |   |-- pids
+  |   |-- sessions
+  |   `-- sockets
+  `-- vendor
+      |-- assets
+          `-- stylesheets
+      `-- plugins
+
+app
+  Holds all the code that's specific to this particular application.
+
+app/assets
+  Contains subdirectories for images, stylesheets, and JavaScript files.
+
+app/controllers
+  Holds controllers that should be named like weblogs_controller.rb for
+  automated URL mapping. All controllers should descend from
+  ApplicationController which itself descends from ActionController::Base.
+
+app/models
+  Holds models that should be named like post.rb. Models descend from
+  ActiveRecord::Base by default.
+
+app/views
+  Holds the template files for the view that should be named like
+  weblogs/index.html.erb for the WeblogsController#index action. All views use
+  eRuby syntax by default.
+
+app/views/layouts
+  Holds the template files for layouts to be used with views. This models the
+  common header/footer method of wrapping views. In your views, define a layout
+  using the <tt>layout :default</tt> and create a file named default.html.erb.
+  Inside default.html.erb, call <% yield %> to render the view using this
+  layout.
+
+app/helpers
+  Holds view helpers that should be named like weblogs_helper.rb. These are
+  generated for you automatically when using generators for controllers.
+  Helpers can be used to wrap functionality for your views into methods.
+
+config
+  Configuration files for the Rails environment, the routing map, the database,
+  and other dependencies.
+
+db
+  Contains the database schema in schema.rb. db/migrate contains all the
+  sequence of Migrations for your schema.
+
+doc
+  This directory is where your application documentation will be stored when
+  generated using <tt>rake doc:app</tt>
+
+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. Also contains the dispatchers and the
+  default HTML files. This should be set as the DOCUMENT_ROOT of your web
+  server.
+
+script
+  Helper scripts for automation and generation.
+
+test
+  Unit and functional tests along with fixtures. When using the rails generate
+  command, template test files will be generated for you and placed in this
+  directory.
+
+vendor
+  External libraries that the application depends on. Also includes the plugins
+  subdirectory. If the app has frozen rails, those gems also go here, under
+  vendor/rails/. This directory is in the load path.
diff --git a/dibs-web/Rakefile b/dibs-web/Rakefile
new file mode 100644 (file)
index 0000000..f818fd1
--- /dev/null
@@ -0,0 +1,7 @@
+#!/usr/bin/env rake
+# 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 File.expand_path('../config/application', __FILE__)
+
+Dibs::Application.load_tasks
diff --git a/dibs-web/app/assets/images/rails.png b/dibs-web/app/assets/images/rails.png
new file mode 100644 (file)
index 0000000..d5edc04
Binary files /dev/null and b/dibs-web/app/assets/images/rails.png differ
index dbda1ae1aaa675097e712a57c1c079072cdf8b84..bc41fc6dc6d12b4f076b86bb55e9ca041c6c39dd 100644 (file)
@@ -2,213 +2,25 @@ class AdminController < ApplicationController
 
        before_filter :check_login_status, :check_admin_group
 
-       def user
-       end
-
-       def queryAdminAllGroupName
-               group_list = Group.all
-       
-               doc = Builder::XmlMarkup.new( :target => out_string = "")
-
-               doc.AllGroup {
-                       group_list.each do |group|
-                               doc.Name(group.name)
-                       end
-               }
-
-               #send_data
-               render :text => out_string, :content_type => "text/xml"
-       end
-
-       def queryAdminAllProject
-               project_list = Project.all(:order => "name")
-
-               doc = Builder::XmlMarkup.new( :target => out_string = "")
-
-               doc.AllProject{
-                       project_list.each do |project|
-                               doc.Project{
-                                       doc.Name(project.name)
-                                       doc.Id(project.id)
-                                       doc.DistName(project.dist_name)
-                               }
-                       end
-               }
-
-               #send_data
-               render :text => out_string, :content_type => "text/xml"
-       end
-
-       def queryAdminAllOS
+       def queryAllOS
                os_list = SupportedOs.all(:order => "name")
 
-               doc = Builder::XmlMarkup.new( :target => out_string = "")
-
-               doc.AllOS{
-                       os_list.each do |os|
-                               doc.Name(os.name)
-                       end
-               }
-
-               #send_data
-               render :text => out_string, :content_type => "text/xml"
-       end
-
-       def queryAdminUser
-               users_list = User.all
-       
-               doc = Builder::XmlMarkup.new( :target => out_string = "")
-
-               doc.Users {
-                       users_list.each do |user|
-                               doc.User {
-                                       doc.Name(user.name)
-                                       doc.Email(user.email)
-                                       if user.group_id.nil? 
-                                               doc.GroupName("")
-                                       else
-                                               group_name = Group.find(:first, :conditions => ["id = ?", user.group_id]).name
-                                               doc.GroupName(group_name)
-                                       end
-                               }
-                       end
-               }
-
-               #send_data
-               render :text => out_string, :content_type => "text/xml"
-       end
-
-       def changeAdminUser
-               change_user_list = params[:ChangeInfoList]
-               change_item = change_user_list[0]
-               errmsg = ""
-
-               email = change_item[:Email]
-               if email.nil? or email.empty?
-                       render :text => "Email is invalid", :status => 406
-                       return
-               else
-                       user = User.find(:first, :conditions => ["email = ?", email])
-               end
-
-               case change_item[:Type]
-               when "RemoveUser"
-                       if user.nil?
-                               errmsg = "Can't find user information"
-                               break
-                       end
-                               
-                       user.destroy
-               when "ModifyUser"
-                       if user.nil? 
-                               errmsg = "Can't find user information"
-                               break
-                       end
-                               
-                       group_name = change_item[:GroupName]
-                       if group_name.nil? or group_name.empty?
-                               render :text => "Group name is invalid", :status => 406
-                               break
-                       else
-                               group = Group.find(:first, :conditions => ["name = ?", group_name])
-                       end
-
-                       if group.nil?
-                               errmsg = "Can't find group information"
-                               break
-                       end
-
-                       user_name = change_item[:UserName]
-
-                       user.update_attributes(:name => user_name)
-                       user.update_attributes(:group_id => group.id)
-                       user.save
-               else
-                       errmsg = "Undefined request : [[#{change_item[:Type]}]]"
-               end
-
-               if errmsg.empty?
-                       render :json => { :success => "OK!" }
-               else
-                       render :text => errmsg, :status => 406
-               end
-       end
-
-       def group
-       end
-
-       def queryAdminGroups
-               project_list = Project.all(:order => "name")
-               group_list = Group.all
-       
-               doc = Builder::XmlMarkup.new( :target => out_string = "")
-
-               doc.Groups {
-                       project_list.each do |project|
-                               doc.AllProject {
-                                       doc.Name(project.name)
-                                       doc.Id(project.id)
-                                       doc.DistName(project.dist_name)
-                               }
-                       end
-
-                       group_list.each do |group|
-                               group_access_list = GroupProjectAccesses.find(:all, :conditions => ["group_id = ?", group.id])
-
-                               if group_access_list.empty? 
-                                       doc.Group {
-                                               doc.Name(group.name)
-                                       }
-                               else
-                                       project_id_list = []
-                                       group_access_list.each do |group_right|
-                                               project_id_list.push group_right.prj_id
+               doc = Builder::XmlMarkup.new( :target => out_string = "", :indent => 2 )
+               doc.Response {
+                       generate_xml_header(doc)
+
+                       doc.Data {
+                               if not os_list.nil? 
+                                       os_list.each do |os|
+                                               doc.OS {
+                                                       doc.OsName(os.name)
+                                                       category = OsCategory.find(:first, :conditions => ["id = ?", os.os_category_id]) 
+                                                       if not category.nil?
+                                                               doc.OsCategory(category.name)
+                                                       end
+                                               }
                                        end
-                                       doc.Group {
-                                               doc.Name(group.name)
-                                               doc.ProjectList(project_id_list.join(","))
-                                       }
                                end
-                       end
-               }
-
-               #send_data
-               render :text => out_string, :content_type => "text/xml"
-       end
-
-       def queryAdminGroupInfo
-               group_name = params[:groupName]
-               if group_name.nil? or group_name.empty? 
-                       render :text => "Group name is empty", :content_type => "text/xml"
-               end
-
-               group = Group.find(:first, :conditions => ["name = ?", group_name])
-               project_list = Project.all(:order => "name")
-
-               group_access_list = GroupProjectAccesses.find(:all, :conditions => ["group_id = ?", group.id])
-               project_id_list = []
-               group_access_list.each do |group_right|
-                       project_id_list.push group_right.prj_id
-               end
-
-               #generate to XML
-               doc = Builder::XmlMarkup.new( :target => out_string = "", :indent => 2 )
-               doc.GroupInfo {
-                       project_list.each do |project|
-                               doc.AllProject {
-                                       doc.Name(project.name)
-                                       doc.Id(project.id)
-                                       doc.DistName(project.dist_name)
-                               }
-                       end
-
-                       doc.Group {
-                       if group_access_list.empty? 
-                               doc.Name(group.name)
-                       else
-                               doc.Name(group.name)
-                               doc.ProjectList(project_id_list.join(","))
-                       end
                        }
                }
 
@@ -216,387 +28,24 @@ class AdminController < ApplicationController
                render :text => out_string, :content_type => "text/xml"
        end
 
-       def changeAdminGroup
-               change_group_list = params[:ChangeInfoList]
-               change_item = change_group_list[0]
-               errmsg = ""
-
-               group_name = change_item[:Name]
-               if group_name.nil? or group_name.empty?
-                       render :text => "Group name is invalid", :status => 406
-                       return
-               else
-                       group = Group.find(:first, :conditions => ["name= ?", group_name])
-               end
-               
-               case change_item[:Type]
-               when "RemoveGroup"
-                       if group.nil?
-                               errmsg = "Can't find group"
-                       else
-                               group.destroy
-                       end
-               when "AddGroup"
-                       group = Group.new
-                       group.name = change_item[:Name]
+       def queryAllOSCategory
+               os_category_list = OsCategory.all(:order => "name")
 
-                       if(change_item[:Name].nil? or change_item[:Name].empty?)
-                               render :text => "Error! Name must needed", :content_type => "text/xml"
-                       end
-
-                       group.save
-
-                       project_id_list = change_item[:ProjectList].split(",")
-
-                       project_id_list.each do |project_id|
-                               sql = "INSERT INTO group_project_accesses VALUES (?,?,?)"
-                               st = ActiveRecord::Base.connection.raw_connection.prepare(sql)
-                               st.execute(group.id, project_id, "TRUE")
-                               st.close
-                       end
-
-               when "ChangeGroup"
-                       old_group_name = change_item[:Name]
-                       new_group_name = change_item[:NewGroupName]
-                       project_id_list = change_item[:ProjectList].split(",")
-                       group = Group.find(:first, :conditions => ["name = ?", old_group_name])
-
-                       if(not old_group_name.eql? new_group_name) 
-                               group.name = new_group_name
-                               group.save
-                       end
-
-                       sql = "DELETE FROM group_project_accesses WHERE group_id = ?"
-                       st = ActiveRecord::Base.connection.raw_connection.prepare(sql)
-                       st.execute(group.id)
-                       st.close
-
-                       project_id_list.each do |project_id|
-                               sql = "INSERT INTO group_project_accesses VALUES (?,?,?)"
-                               st = ActiveRecord::Base.connection.raw_connection.prepare(sql)
-                               st.execute(group.id, project_id, "TRUE")
-                               st.close
-                       end
-                       
-               end
-               
-               
-               render :text => "", :content_type => "text/xml"
-       end
-
-       def server
-       end
-
-       def queryAdminServer
-    
-               # get full distribution list
-               servers = RemoteBuildServers.all
-    
-               #generate to XML
                doc = Builder::XmlMarkup.new( :target => out_string = "", :indent => 2 )
-               doc.Servers {
-                       servers.each do |server|
-                               doc.Server {
-                                       doc.Address(server.svr_addr)
-                               }
-                       end
-               }
-               
-               #send_data
-               render :text => out_string, :content_type => "text/xml"
-       end
+               doc.Response {
+                       generate_xml_header(doc)
 
-       def changeAdminServer
-               change_group_list = params[:ChangeInfoList]
-               change_item = change_group_list[0]
-               errmsg = ""
-
-               address = change_item[:Address]
-               if address.nil? or address.empty? 
-                       errmsg = "Server address is empty"
-                       render :json => { :error => errmsg }, :status => 406
-                       return
-               end
-
-               case change_item[:Type]
-               when "AddServer"
-                       # get server for error check
-                       server = RemoteBuildServers.find(:first, :conditions => ["svr_addr = ?", address])
-            
-                       if server.nil? 
-                               server = RemoteBuildServers.new
-                               server.svr_addr = address
-                               server.save
-                       else
-                               errmsg = "Server already exist"
-                       end
-               when "RemoveServer"
-                       server = RemoteBuildServers.find(:first, :conditions => ["svr_addr = ?", address])
-            
-                       if server.nil? 
-                               errmsg = "Server does not exist"
-                       else
-                               server.destroy
-                       end
-               when "ModifyServer"
-                       server = RemoteBuildServers.find(:first, :conditions => ["svr_addr = ?", address])
-
-                       if server.nil? 
-                               errmsg = "Server does not exist"
-                       else
-                               new_address = change_item[:NewAddress]
-
-                               new_server = RemoteBuildServers.find(:first, :conditions => ["svr_addr = ?", new_address])
-                               if new_address.nil?
-                                       server.svr_addr = new_address
-                                       server.save
-                               else
-                                       errmsg = "Server already exist"
-                               end
-                       end
-               end
-
-               if errmsg.empty?
-                       render :json => { :success => "OK!" }
-               else
-                       render :json => { :error => errmsg }, :status => 406
-               end
-       end
-
-       def project
-       end
-
-       def queryAllProject
-    
-               # get full distribution list
-               projects = Project.all(:order => "name")
-    
-               #generate to XML
-               doc = Builder::XmlMarkup.new( :target => out_string = "", :indent => 2 )
-               doc.Projects {
-                       doc.Project {
-                               projects.each do |project|
-                                       doc.Name(project.name)
-                                       doc.Type(project.ptype)
-                                       doc.DistName(project.dist_name)
+                       doc.Data {
+                               if not os_category_list.nil? 
+                                       os_category_list.each do |category|
+                                               doc.OsCategoryName(category.name)
+                                       end
                                end
                        }
                }
-               
-               #send_data
-               render :text => out_string, :content_type => "text/xml"
-       end
-
-       def changeAdminProject
-               change_group_list = params[:ChangeInfoList]
-               change_item = change_group_list[0]
-               errmsg = ""
-               
-               if change_item[:Name].nil? or change_item[:Name].empty? then
-                       errmsg = "Can't find [Name] information"
-                       render :json => { :error => errmsg }, :status => 406
-                       return
-               end
-
-               case change_item[:Type]
-               when "AddDistribution"
-                       dist_name = change_item[:Name]
-                       dist = Distribution.find(:first, :conditions => ["name = ?", dist_name])
-                       if dist.nil?
-                               dist = Distribution.new
-                               dist.name = change_item[:Name]
-                               dist.pkgsvr_url = change_item[:URL]
-                               dist.pkgsvr_addr = change_item[:Address]
-                               dist.status = change_item[:DistStatus]
-                               dist.save
-                       else
-                               errmsg = "Distribution already exist"
-                       end
-
-               when "ModifyDistribution"
-                       dist_name = change_item[:Name]
-                       dist = Distribution.find(:first, :conditions => ["name = ?", dist_name])
-                       if dist.nil?
-                               errmsg = "Distribution does not exist"
-                       else
-                               dist.pkgsvr_url = change_item[:URL]
-                               dist.pkgsvr_addr = change_item[:Address]
-                               dist.status = change_item[:DistStatus]
-                               dist.save
-                       end
-               when "RemoveDistribution"
-                       dist_name = change_item[:Name]
-                       dist = Distribution.find(:first, :conditions => ["name = ?", dist_name])
-                       if dist.nil?
-                               errmsg = "Distribution does not exist"
-                       else
-                               dist.destroy
-                       end
-               when "AddProject"
-                       project_name = change_item[:Name]
-                       project_type = change_item[:ProjectType].upcase
-                       project_dist_name = change_item[:Distribution]
-                       project = Project.find(:first, :conditions => ["name = ? and dist_name = ? and ptype = ?", project_name, project_dist_name, project_type])
-
-                       if not project.nil? 
-                               errmsg = "project already exist"
-                               break
-                       end
-
-                       project = Project.new
-                       project.name = change_item[:Name]
-                       project.ptype = change_item[:ProjectType].upcase
-                       project.password = change_item[:ProjectPass]
-                       project.dist_name = change_item[:Distribution]
-                       project.save
-
-                       case project.ptype
-                       when "GIT"
-                               git = ProjectGit.new
-                               git.prj_id = project.id
-                               git.git_repos = change_item[:Address]
-                               git.git_branch = change_item[:Branch]
-                               git.save
-                       when "BINARY"
-                               binary = ProjectBin.new
-                               binary.prj_id = project.id
-                               binary.pkg_name = change_item[:PackageName]
-                               binary.save
-                       else
-                               puts "project type is invalid : #{project.ptype}"
-                       end
-               when "ModifyProject"
-                       dist_name = change_item[:Distribution]
-                       old_project_name = change_item[:Name]
-                       project_type = change_item[:ProjectType].upcase
-
-                       project = Project.find(:first, :conditions => ["name = ? and dist_name = ? and ptype = ?", old_project_name, dist_name, project_type])
-                       project.name = change_item[:NewProjectName]
-                       project.password = change_item[:ProjectPass]
-                       project.save
-
-                       case project_type
-                       when "GIT"
-                               sql = "UPDATE project_gits SET git_repos = ?, git_branch = ? WHERE prj_id = ?"
-                               st = ActiveRecord::Base.connection.raw_connection.prepare(sql)
-                               st.execute(change_item[:ProjectAddress], change_item[:ProjectBranch], project.id)
-                               st.close
-
-                               sql = "DELETE FROM project_os WHERE prj_id = ?"
-                               st = ActiveRecord::Base.connection.raw_connection.prepare(sql)
-                               st.execute(project.id)
-                               st.close
-
-                               os_name_list = change_item[:OSNameList].split(",")
-                               os_name_list.each do |os_name|
-                                       project_os = ProjectOs.new
-                                       project_os.prj_id = project.id
-                                       project_os.os_name = os_name
-                                       project_os.save
-                               end
-                       when "BINARY"
-                               st = ActiveRecord::Base.connection.raw_connection.prepare("UPDATE project_bins SET pkg_name = ? WHERE prj_id = ?")
-                               st.execute(change_item[:PackageName], project.id)
-                               st.close
-                       else
-                               errmsg = "project type invalid"
-                               render :json => { :error=> errmsg }, :status => 406
-                               return
-                       end
-
-               when "RemoveProject"
-                       dist_name = change_item[:Distribution]
-                       project_name = change_item[:Name]
-                       project_type = change_item[:ProjectType]
-                       project = Project.find(:first, :conditions => ["name = ? and dist_name = ?", project_name, dist_name])
-
-                       case project_type.upcase
-                       when "GIT"
-                               st = ActiveRecord::Base.connection.raw_connection.prepare("DELETE FROM project_gits WHERE prj_id = ?")
-                               st.execute(project.id)
-                               st.close
-                       when" BINARY"
-                               st = ActiveRecord::Base.connection.raw_connection.prepare("DELETE FROM project_bins WHERE prj_id = ?")
-                               st.execute(project.id)
-                               st.close
-                       end
 
-                       project.destroy
-               else
-                       puts "Can't find update command type : #{change_item[:Type]}"
-               end
-               
-               if errmsg.empty?
-                       render :json => { :success => "OK!" }
-               else
-                       render :json => { :error=> errmsg }, :status => 406
-               end
-       end
-
-       def queryDistributions
-               distribution_list = []
-    
-               # get full distribution list
-               distributions = Distribution.all
-               distributions.each {|distribution| 
-                       distribution_list.push distribution.name
-               }
-    
-               #generate to XML
-               doc = Builder::XmlMarkup.new( :target => out_string = "", :indent => 2 )
-               doc.Distribution {
-                       distribution_list.each do |distribution|
-                               doc.Name(distribution)
-                       end
-               }
-               
                #send_data
                render :text => out_string, :content_type => "text/xml"
        end
 
-       def queryDistributionInfo
-               dist_name = params[:distribution]
-
-               distribution_list = []
-    
-               # get full distribution list
-               distribution = Distribution.find(:first, :conditions => ["name = ?", dist_name])
-               projectList = Project.find(:all, :conditions => ["dist_name = ?", dist_name])
-
-               #generate to XML
-               doc = Builder::XmlMarkup.new( :target => out_string = "", :indent => 2 )
-               doc.Distribution {
-                       doc.DistributionName(distribution.name)
-                       doc.PackageServerUrl(distribution.pkgsvr_url)
-                       doc.PackageServerAddress(distribution.pkgsvr_addr)
-                       doc.Status(distribution.status)
-                       projectList.each do |project|
-                               doc.Project {
-                                       doc.ProjectName(project.name)
-                                       doc.Type(project.ptype)
-                                       case project.ptype.upcase
-                                       when "GIT"
-                                               git = ProjectGit.find(:first, :conditions => ["prj_id = ?", project.id])
-                                               if not git.nil? then
-                                                       doc.GitRepos(git.git_repos)
-                                                       doc.GitBranch(git.git_branch)
-                                               end
-
-                                               osList = ProjectOs.find(:all, :conditions => ["prj_id = ?", project.id])
-                                               osList.each do |os|
-                                                       doc.OS(os.os_name)
-                                               end
-                                       when "BINARY"
-                                               bin = ProjectBin.find(:first, :conditions => ["prj_id = ?", project.id])
-                                               if not bin.nil? then
-                                                       doc.PackageName(bin.pkg_name)
-                                               end
-                                       end
-                               }
-                       end
-               }
-               
-               #send_data
-               render :text => out_string, :content_type => "text/xml"
-       end
 end
diff --git a/dibs-web/app/controllers/admin_distribution_controller.rb b/dibs-web/app/controllers/admin_distribution_controller.rb
new file mode 100644 (file)
index 0000000..956c7d1
--- /dev/null
@@ -0,0 +1,195 @@
+class AdminDistributionController < ApplicationController
+
+       before_filter :check_login_status, :check_admin_group
+
+       def queryAllDistribution
+               # get full distribution list
+               distributions = Distribution.all
+
+               doc = Builder::XmlMarkup.new( :target => out_string = "", :indent => 2 )
+               doc.Response {
+                       generate_xml_header(doc)
+
+                       #generate to XML
+                       doc.Data {
+                               if not distributions.nil? 
+                                       distributions.each do |distribution|
+                                               doc.DistributionName(distribution.name)
+                                       end
+                               end
+                       }
+               }
+               
+               #send_data
+               render :text => out_string, :content_type => "text/xml"
+       end
+
+       def queryDistributionInfo
+               dist_name = params[:distribution]
+
+               if dist_name.nil? or dist_name.empty? 
+                       render :text => "Distribution name is empty", :content_type => "text/xml", :status => 406
+                       return
+               end
+
+               # get distribution 
+               distribution = Distribution.find(:first, :conditions => ["name = ?", dist_name])
+               if distribution.nil? 
+                       render :text => "Can't find distribution : #{dist_name}", :content_type => "text/xml", :status => 406
+                       return
+               end
+
+               # get sync package server 
+               sync_package_server = SyncPkgServer.find(:first, :conditions => ["distribution_id = ?", distribution.id])
+
+               doc = Builder::XmlMarkup.new( :target => out_string = "", :indent => 2 )
+               doc.Response {
+                       generate_xml_header(doc)
+
+                       #generate to XML
+                       doc.Data{
+                               doc.DistributionInfo{
+                                       doc.DistributionName(distribution.name)
+                                       doc.PackageServerUrl(distribution.pkgsvr_url)
+                                       doc.PackageServerAddress(distribution.pkgsvr_addr)
+                                       doc.Status(distribution.status)
+                                       doc.Description(distribution.description)
+                               }
+
+                               doc.SyncPackageServer{
+                                       if sync_package_server.nil?
+                                               doc.Url("")
+                                               doc.Period("")
+                                               doc.Description("")
+                                       else
+                                               doc.Url(sync_package_server.pkgsvr_url)
+                                               doc.Period(sync_package_server.period)
+                                               doc.Description(sync_package_server.description)
+                                       end
+                               }
+                       }
+               }
+               
+               #send_data
+               render :text => out_string, :content_type => "text/xml"
+       end
+
+       def addDistribution
+               change_group_list = params[:ChangeInfoList]
+               change_item = change_group_list[0]
+               errmsg = ""
+               
+               dist_name = change_item[:DistributionName]
+               if dist_name.nil? or dist_name.empty? then
+                       errmsg = "Can't find [#{dist_name}] information"
+                       render :json => { :error => errmsg }, :status => 406
+                       return
+               end
+
+               dist = Distribution.find(:first, :conditions => ["name = ?", dist_name])
+               if dist.nil?
+                       dist = Distribution.new
+                       dist.name = change_item[:DistributionName]
+                       dist.pkgsvr_url = change_item[:URL]
+                       dist.pkgsvr_addr = change_item[:Address]
+                       dist.status = change_item[:DistStatus]
+                       dist.description = change_item[:Description]
+                       dist.save
+
+                       sync_pkg_svr = SyncPkgServer.new
+                       sync_pkg_svr.distribution_id = dist.id
+                       sync_pkg_svr.pkgsvr_url = change_item[:SyncPkgSvrUrl]
+                       sync_pkg_svr.period = change_item[:SyncPkgSvrPeriod]
+                       sync_pkg_svr.description = change_item[:SyncPkgSvrDescription]
+                       sync_pkg_svr.save
+               else
+                       errmsg = "Distribution[#{dist_name}] already exist"
+               end
+
+               if errmsg.empty?
+                       render :json => { :success => "OK!" }
+               else
+                       render :json => { :error=> errmsg }, :status => 406
+               end
+       end
+
+       def removeDistribution
+               change_group_list = params[:ChangeInfoList]
+               change_item = change_group_list[0]
+               errmsg = ""
+               
+               dist_name = change_item[:DistributionName]
+               if dist_name.nil? or dist_name.empty? then
+                       errmsg = "Can't find [#{dist_name}] information"
+                       render :json => { :error => errmsg }, :status => 406
+                       return
+               end
+
+               dist = Distribution.find(:first, :conditions => ["name = ?", dist_name])
+               if dist.nil?
+                       errmsg = "Distribution[#{dist_name}] not exist"
+               else
+                       # first, remove sync package server
+                       sync_pkg_svr = SyncPkgServer.find(:first, :conditions => ["distribution_id = ?", dist.id])
+
+                       if not sync_pkg_svr.nil?
+                               sync_pkg_svr.destroy
+                       end
+
+                       # remove distribution
+                       dist.destroy
+               end
+
+               if errmsg.empty?
+                       render :json => { :success => "OK!" }
+               else
+                       render :json => { :error=> errmsg }, :status => 406
+               end
+       end
+
+       def modifyDistribution
+               change_group_list = params[:ChangeInfoList]
+               change_item = change_group_list[0]
+               errmsg = ""
+               
+               dist_name = change_item[:DistributionName]
+               if dist_name.nil? or dist_name.empty? then
+                       errmsg = "Can't find [#{dist_name}] information"
+                       render :json => { :error => errmsg }, :status => 406
+                       return
+               end
+
+               dist = Distribution.find(:first, :conditions => ["name = ?", dist_name])
+               if dist.nil?
+                       errmsg = "Distribution[#{dist_name}] not exist"
+               else
+                       dist.pkgsvr_url = change_item[:URL]
+                       dist.pkgsvr_addr = change_item[:Address]
+                       dist.status = change_item[:DistStatus]
+                       dist.description = change_item[:Description]
+                       dist.save
+
+                       sync_pkg_svr_url = change_item[:SyncPkgSvrUrl]
+                       sync_pkg_svr_period = change_item[:SyncPkgSvrPeriod]
+                       sync_pkg_svr_description = change_item[:SyncPkgSvrDescription]
+                       if not sync_pkg_svr_url.nil? and not sync_pkg_svr_url.empty?
+                               sync_pkg_svr = SyncPkgServer.find(:first, :conditions => ["distribution_id = ?", dist.id])
+                               if sync_pkg_svr.nil?
+                                       sync_pkg_svr = SyncPkgServer.new        
+                               end
+                               sync_pkg_svr.distribution_id = dist.id
+                               sync_pkg_svr.pkgsvr_url = sync_pkg_svr_url
+                               sync_pkg_svr.period = sync_pkg_svr_period
+                               sync_pkg_svr.description = sync_pkg_svr_description
+                               sync_pkg_svr.save
+                       end
+               end
+
+               if errmsg.empty?
+                       render :json => { :success => "OK!" }
+               else
+                       render :json => { :error=> errmsg }, :status => 406
+               end
+       end
+
+end
diff --git a/dibs-web/app/controllers/admin_group_controller.rb b/dibs-web/app/controllers/admin_group_controller.rb
new file mode 100644 (file)
index 0000000..633c815
--- /dev/null
@@ -0,0 +1,211 @@
+class AdminGroupController < ApplicationController
+
+       before_filter :check_login_status, :check_admin_group
+
+       def queryAllGroup
+               project_list = Project.all(:order => "name")
+               group_list = Group.all
+            
+               doc = Builder::XmlMarkup.new( :target => out_string = "", :indent => 2 )
+               doc.Response {
+                       generate_xml_header(doc)
+
+                       doc.Data {
+                               if not group_list.nil? 
+                                       group_list.each do |group|
+                                               group_access_list = GroupProjectAccess.find(:all, :conditions => ["group_id = ?", group.id])
+                    
+                                               doc.Group {
+                                                       doc.GroupName(group.name)
+                                                       doc.AdminFlag(group.admin)
+                                                       doc.Description(group.description)
+
+                                                       if not group_access_list.nil? 
+                                                               group_access_list.each do |group_right|
+                                                                       project = Project.find(:first, :conditions => ["id = ?", group_right.project_id]);
+                                                                       distribution = Distribution.find(:first, :conditions => ["id = ?", project.distribution_id]);
+                                                                       if not project.nil?
+                                                                               doc.AccessableProject {
+                                                                                       doc.ProjectName(project.name)
+                                                                                       doc.ProjectDistribution(distribution.name)
+                                                                               }
+                                                                       end
+                                                               end
+                                                       end
+                                               }
+                                       end
+                               end
+                       }
+               }
+
+               #send_data
+               render :text => out_string, :content_type => "text/xml"
+       end
+
+       def queryGroupInfo
+               group_name = params[:groupName]
+               if group_name.nil? or group_name.empty? 
+                       render :text => "Group name is empty", :content_type => "text/xml", :status => 406
+                       return
+               end
+
+               group = Group.find(:first, :conditions => ["name = ?", group_name])
+               if group.nil? 
+                       render :text => "Can't find group : #{group_name}", :content_type => "text/xml", :status => 406
+                       return
+               end
+
+               project_list = Project.all(:order => "name")
+
+               #generate to XML
+               doc = Builder::XmlMarkup.new( :target => out_string = "", :indent => 2 )
+               doc.Response {
+                       generate_xml_header(doc)
+                       doc.Data {
+                               if not project_list.nil?
+                                       project_list.each do |project|
+                                               distribution = Distribution.find(:first, :conditions => ["id = ?", project.distribution_id]);
+                                               doc.Project{
+                                                       doc.Name(project.name)
+                                                       doc.Id(project.id)
+                                                       doc.DistName(distribution.name)
+                                               }
+                                       end
+                               end
+            
+                               doc.Group {
+                                       doc.Name(group.name)
+                                       
+                                       group_access_list = GroupProjectAccess.find(:all, :conditions => ["group_id = ?", group.id])
+                    
+                                       if not group_access_list.nil? and not group_access_list.empty? 
+                                               project_id_list = []
+                                               group_access_list.each do |group_right|
+                                                       project_id_list.push group_right.project_id
+                                               end
+            
+                                               doc.ProjectList(project_id_list.join(","))
+                                       end
+                               }
+                       }
+               }
+
+               #send_data
+               render :text => out_string, :content_type => "text/xml"
+       end
+
+       def modifyGroup
+               change_group_list = params[:ChangeInfoList]
+               change_item = change_group_list[0]
+               errmsg = ""
+
+               group_name = change_item[:GroupName]
+               if group_name.nil? or group_name.empty?
+                       render :text => "Group name is invalid", :status => 406
+                       return
+               else
+                       group = Group.find(:first, :conditions => ["name= ?", group_name])
+               end
+               
+               if group.nil?
+                       errmsg = "Can't find group"
+               else
+                       new_group_name = change_item[:NewGroupName]
+                       admin_flag = change_item[:AdminFlag]
+                       description = change_item[:Description]
+                       project_id_list = change_item[:ProjectList].split(",")
+            
+                       group.name = new_group_name
+                       group.admin = admin_flag
+                       group.description = description
+                       group.save
+            
+                       GroupProjectAccess.delete_all(["group_id = ?", group.id])
+
+                       project_id_list.each do |project_id|
+                               item = GroupProjectAccess.new 
+                               item.group_id = group.id
+                               item.project_id = project_id
+                               item.build = "TRUE"
+                               item.save
+                       end
+               end
+               
+               
+               if errmsg.empty?
+                       render :json => { :success => "OK!" }
+               else
+                       render :text => errmsg, :status => 406
+               end
+       end
+
+       def removeGroup
+               change_group_list = params[:ChangeInfoList]
+               change_item = change_group_list[0]
+               errmsg = ""
+
+               group_name = change_item[:GroupName]
+               if group_name.nil? or group_name.empty?
+                       render :text => "Group name is invalid", :status => 406
+                       return
+               else
+                       group = Group.find(:first, :conditions => ["name= ?", group_name])
+               end
+               
+               if group.nil?
+                       errmsg = "Can't find group"
+               else
+                       user_group = UserGroup.find(:first, :conditions => ["group_id = ?", group.id])
+                       if user_group.nil?
+                               GroupProjectAccess.delete_all(["group_id = ?", group.id])
+                               group.destroy
+                       else
+                               errmsg = "Can't remove. #{group_name} has users."
+                       end
+               end
+               
+               if errmsg.empty?
+                       render :json => { :success => "OK!" }
+               else
+                       render :text => errmsg, :status => 406
+               end
+       end
+
+       def addGroup
+               change_group_list = params[:ChangeInfoList]
+               change_item = change_group_list[0]
+               errmsg = ""
+
+               group_name = change_item[:GroupName]
+               if group_name.nil? or group_name.empty?
+                       render :text => "Group name is invalid", :status => 406
+                       return
+               else
+                       group = Group.find(:first, :conditions => ["name= ?", group_name])
+               end
+               
+               if not group.nil?
+                       errmsg = "Group already exist"
+               else
+                       group = Group.new
+                       group.name = group_name
+                       group.admin = change_item[:AdminFlag]
+                       group.description = change_item[:Description]
+                       group.save
+            
+                       project_id_list = change_item[:ProjectList].split(",")
+                       project_id_list.each do |project_id|
+                               group_project_access = GroupProjectAccess.new
+                               group_project_access.group_id = group.id
+                               group_project_access.project_id = project_id
+                               group_project_access.save
+                       end
+               end
+
+               if errmsg.empty?
+                       render :json => { :success => "OK!" }
+               else
+                       render :text => errmsg, :status => 406
+               end
+       end
+end
diff --git a/dibs-web/app/controllers/admin_project_controller.rb b/dibs-web/app/controllers/admin_project_controller.rb
new file mode 100644 (file)
index 0000000..21fa703
--- /dev/null
@@ -0,0 +1,248 @@
+class AdminProjectController < ApplicationController
+       def queryAllProject
+               project_list = Project.all(:order => "name")
+
+               doc = Builder::XmlMarkup.new( :target => out_string = "", :indent => 2 )
+               doc.Response {
+                       generate_xml_header(doc)
+
+                       doc.Data {
+                               if not project_list.nil? 
+                                       project_list.each do |project|
+                                       distribution = Distribution.find(:first, :conditions => ["id = ?", project.distribution_id]);
+                                               doc.Project{
+                                                       doc.Name(project.name)
+                                                       doc.Id(project.id)
+                                                       doc.DistName(distribution.name)
+                                               }
+                                       end
+                               end
+                       }
+               }
+
+               #send_data
+               render :text => out_string, :content_type => "text/xml"
+       end
+
+       def queryProjectsInDistribution
+               dist_name = params[:distribution]
+
+               if dist_name.nil? or dist_name.empty? 
+                       render :text => "Distribution name is empty", :content_type => "text/xml", :status => 406
+                       return
+               end
+
+               # get distribution 
+               distribution = Distribution.find(:first, :conditions => ["name = ?", dist_name])
+               if distribution.nil? 
+                       render :text => "Can't find distribution : #{dist_name}", :content_type => "text/xml", :status => 406
+                       return
+               end
+
+               doc = Builder::XmlMarkup.new( :target => out_string = "", :indent => 2 )
+               doc.Response {
+                       generate_xml_header(doc)
+
+                       #generate to XML
+                       doc.Data{
+                               project_list = Project.find_by_sql("SELECT projects.id
+                                                                                                            , projects.name 
+                                                                                                            , projects.ptype
+                                                                                                         FROM projects
+                                                                                                                , distributions
+                                                                                                        WHERE distributions.name = \"#{dist_name}\"
+                                                                                                          AND distributions.id = projects.distribution_id ")
+                               if not project_list.nil?
+                                       project_list.each do |project|
+                                               doc.Project {
+                                                       doc.ProjectName(project.name)
+                                                       doc.Type(project.ptype)
+            
+                                                       case project.ptype.upcase
+                                                       when "GIT"
+                                                               git = ProjectGit.find(:first, :conditions => ["project_id = ?", project.id])
+                                                               if not git.nil? then
+                                                                       doc.GitRepos(git.git_repos)
+                                                                       doc.GitBranch(git.git_branch)
+                                                               end
+                    
+                                                               os_list = ProjectOs.find(:all, :conditions => ["project_id = ?", project.id])
+                                                               if not os_list.nil? then
+                                                                       os_list.each do |os|
+                                                                               supported_os = SupportedOs.find(:first, :conditions => ["id = ?", os.supported_os_id])
+                                                                               doc.OS(supported_os.name)
+                                                                       end
+                                                               end
+                                                       when "BINARY"
+                                                               bin = ProjectBin.find(:first, :conditions => ["project_id = ?", project.id])
+                                                               if not bin.nil? then
+                                                                       doc.PackageName(bin.pkg_name)
+                                                               end
+                                                       end
+                                               }
+                                       end
+                               end
+                       }
+               }
+               
+               #send_data
+               render :text => out_string, :content_type => "text/xml"
+       end
+
+       def addProject
+               change_group_list = params[:ChangeInfoList]
+               change_item = change_group_list[0]
+               errmsg = ""
+               
+               project_name = change_item[:Name]
+               project_type = change_item[:ProjectType].upcase
+               project_dist_name = change_item[:Distribution]
+               project_password = change_item[:ProjectPass]
+
+               if project_name.nil? or project_name.empty? then
+                       errmsg = "Can't find [Name] information"
+                       render :json => { :error => errmsg }, :status => 406
+                       return
+               end
+
+               distribution = Distribution.find(:first, :conditions => ["name = ?", project_dist_name])
+               project = Project.find(:first, :conditions => ["name = ? and distribution_id = ? and ptype = ?", project_name, distribution.id, project_type])
+
+               if not project.nil? 
+                       errmsg = "project already exist"
+                       render :json => { :error => errmsg }, :status => 406
+                       return
+               end
+
+               project = Project.new
+               project.name = project_name
+               project.ptype = project_type
+               project.password = project_password
+               project.distribution_id = distribution.id
+               project.save
+
+               case project.ptype
+               when "GIT"
+                       git = ProjectGit.new
+                       git.project_id = project.id
+                       git.git_repos = change_item[:Address]
+                       git.git_branch = change_item[:Branch]
+                       git.save
+
+                       os_name_list = change_item[:OSNameList].split(",")
+                       os_name_list.each do |os_name|
+                               supported_os = SupportedOs.find(:first, :conditions => ["name = ?", os_name])
+                               #need check not found
+                               project_os = ProjectOs.new
+                               project_os.project_id = project.id
+                               project_os.supported_os_id = supported_os.id
+                               project_os.save
+                       end
+               when "BINARY"
+                       binary = ProjectBin.new
+                       binary.project_id = project.id
+                       binary.pkg_name = change_item[:PackageName]
+                       binary.save
+               else
+                       project.destroy
+                       errmsg = "project type is invalid"
+                       render :json => { :error => errmsg }, :status => 406
+                       return
+               end
+
+               render :json => { :success => "OK!" }
+       end
+
+       def removeProject
+               change_group_list = params[:ChangeInfoList]
+               change_item = change_group_list[0]
+               errmsg = ""
+               
+               if change_item[:Name].nil? or change_item[:Name].empty? then
+                       errmsg = "Can't find [Name] information"
+                       render :json => { :error => errmsg }, :status => 406
+                       return
+               end
+
+               dist_name = change_item[:Distribution]
+               project_name = change_item[:Name]
+               project_type = change_item[:ProjectType]
+               distribution = Distribution.find(:first, :conditions => ["name = ?", dist_name])
+               project = Project.find(:first, :conditions => ["name = ? and distribution_id = ?", project_name, distribution.id])
+
+               if project.nil? 
+                       errmsg = "project does not exist"
+                       render :json => { :error => errmsg }, :status => 406
+                       return
+               end
+
+               case project_type.upcase
+               when "GIT"
+                       ProjectGit.delete_all(["project_id = ?", project.id])
+                       ProjectOs.delete_all(["project_id = ?", project.id])
+                       GroupProjectAccess.delete_all(["project_id = ?", project.id])
+               when "BINARY"
+                       ProjectBin.delete_all(["project_id = ?", project.id])
+                       GroupProjectAccess.delete_all(["project_id = ?", project.id])
+               else
+                       errmsg = "project type is invalid"
+                       render :json => { :error => errmsg }, :status => 406
+                       return
+               end
+
+               project.destroy
+               render :json => { :success => "OK!" }
+       end
+
+       def modifyProject
+               change_group_list = params[:ChangeInfoList]
+               change_item = change_group_list[0]
+               errmsg = ""
+               
+               if change_item[:Name].nil? or change_item[:Name].empty? then
+                       errmsg = "Can't find [Name] information"
+                       render :json => { :error => errmsg }, :status => 406
+                       return
+               end
+
+               dist_name = change_item[:Distribution]
+               old_project_name = change_item[:Name]
+               project_type = change_item[:ProjectType].upcase
+
+               distribution = Distribution.find(:first, :conditions => ["name = ?", dist_name])
+               project = Project.find(:first, :conditions => ["name = ? and distribution_id = ? and ptype = ?", old_project_name, distribution.id, project_type])
+               project.name = change_item[:NewProjectName]
+               project.password = change_item[:ProjectPass]
+
+               case project_type
+               when "GIT"
+                       project_git = ProjectGit.find(:first, :conditions => ["project_id = ?", project.id])
+                       project_git.git_repos = change_item[:ProjectAddress]
+                       project_git.git_branch = change_item[:ProjectBranch]
+                       project_git.save
+
+                       ProjectOs.delete_all(["project_id = ?", project.id])
+
+                       os_name_list = change_item[:OSNameList].split(",")
+                       os_name_list.each do |os_name|
+                               supported_os = SupportedOs.find(:first, :conditions => ["name = ?", os_name])
+                               #need check not found
+                               project_os = ProjectOs.new
+                               project_os.project_id = project.id
+                               project_os.supported_os_id = supported_os.id
+                               project_os.save
+                       end
+               when "BINARY"
+                       project_bin = ProjectBin.find(:first, :conditions => ["project_id = ?", project.id])
+                       project_bin.pkg_name = change_item[:PackageName]
+                       project_bin.save
+               else
+                       errmsg = "project type invalid"
+                       render :json => { :error=> errmsg }, :status => 406
+                       return
+               end
+
+               project.save
+               render :json => { :success => "OK!" }
+       end
+end
diff --git a/dibs-web/app/controllers/admin_server_controller.rb b/dibs-web/app/controllers/admin_server_controller.rb
new file mode 100644 (file)
index 0000000..a6ba39f
--- /dev/null
@@ -0,0 +1,386 @@
+class AdminServerController < ApplicationController
+       def queryAllServer
+               # get full distribution list
+               server_config = Server_config.all
+               remote_build_servers = RemoteBuildServer.all
+
+               doc = Builder::XmlMarkup.new( :target => out_string = "", :indent => 2 )
+               doc.Response {
+                       generate_xml_header(doc)
+        
+                       #generate to XML
+                       doc.Data {
+                               if not server_config.nil? 
+                                       server_config.each do |info|
+                                               doc.ServerConfig {
+                                                       doc.Property( info.property )
+                                                       doc.Value( info.value )
+                                               }
+                                       end
+                               end
+
+                               if not remote_build_servers.nil? 
+                                       remote_build_servers.each do |server|
+                                               doc.RemoteBuildServer {
+                                                       doc.Address(server.svr_addr)
+                                                       doc.Description(server.description)
+                                               }
+                                       end
+                               end
+                       }
+               }
+               
+               #send_data
+               render :text => out_string, :content_type => "text/xml"
+       end
+
+       def addRemoteBuildServer
+               change_group_list = params[:ChangeInfoList]
+               change_item = change_group_list[0]
+               errmsg = ""
+
+               address = change_item[:Address]
+               description = change_item[:Description]
+               if address.nil? or address.empty? 
+                       errmsg = "Server address is empty"
+                       render :json => { :error => errmsg }, :status => 406
+                       return
+               end
+
+               # get server for error check
+               server = RemoteBuildServer.find(:first, :conditions => ["svr_addr = ?", address])
+        
+               if server.nil? 
+                       server = RemoteBuildServer.new
+                       server.svr_addr = address
+                       server.description = description 
+                       server.save
+
+                       render :json => { :success => "OK!" }
+               else
+                       errmsg = "Server already exist"
+
+                       render :json => { :error => errmsg }, :status => 406
+               end
+       end
+
+       def modifyRemoteBuildServer
+               change_group_list = params[:ChangeInfoList]
+               change_item = change_group_list[0]
+               errmsg = ""
+
+               address = change_item[:Address]
+               if address.nil? or address.empty? 
+                       errmsg = "Server address is empty"
+                       render :json => { :error => errmsg }, :status => 406
+                       return
+               end
+
+               server = RemoteBuildServer.find(:first, :conditions => ["svr_addr = ?", address])
+
+               if server.nil? 
+                       errmsg = "Server does not exist"
+               else
+                       new_address = change_item[:NewAddress]
+                       description = change_item[:Description]
+                       
+                       # error check for server already exist
+                       if not address.eql? new_address
+                               new_server = RemoteBuildServer.find(:first, :conditions => ["svr_addr = ?", new_address])
+                               
+                               if not new_server.nil?
+                                       errmsg = "Server already exist"
+                               end
+                       end
+
+                       server.svr_addr = new_address
+                       server.description = description
+                       server.save
+               end
+               
+
+               if errmsg.empty?
+                       render :json => { :success => "OK!" }
+               else
+                       render :json => { :error => errmsg }, :status => 406
+               end
+       end
+
+       def removeRemoteBuildServer
+               change_group_list = params[:ChangeInfoList]
+               change_item = change_group_list[0]
+               errmsg = ""
+
+               address = change_item[:Address]
+               if address.nil? or address.empty? 
+                       errmsg = "Server address is empty"
+                       render :json => { :error => errmsg }, :status => 406
+                       return
+               end
+
+               server = RemoteBuildServer.find(:first, :conditions => ["svr_addr = ?", address])
+        
+               if server.nil? 
+                       errmsg = "Server does not exist"
+                       render :json => { :error => errmsg }, :status => 406
+               else
+                       server.destroy
+                       render :json => { :success => "OK!" }
+               end
+       end
+
+       def addOsCategory
+               change_group_list = params[:ChangeInfoList]
+               change_item = change_group_list[0]
+               errmsg = ""
+
+               name = change_item[:Name]
+               if name.nil? or name.empty? 
+                       errmsg = "Os category name is empty"
+                       render :json => { :error => errmsg }, :status => 406
+                       return
+               end
+
+               # get server for error check
+               osCategory = OsCategory.find(:first, :conditions => ["name = ?", name])
+        
+               if osCategory.nil? 
+                       osCategory= OsCategory.new
+                       osCategory.name = name 
+                       osCategory.save
+
+                       render :json => { :success => "OK!" }
+               else
+                       errmsg = "Os category already exist"
+
+                       render :json => { :error => errmsg }, :status => 406
+               end
+       end
+
+       def removeOsCategory
+               change_group_list = params[:ChangeInfoList]
+               change_item = change_group_list[0]
+               errmsg = ""
+
+               name = change_item[:Name]
+               if name.nil? or name.empty? 
+                       errmsg = "Os category name is empty"
+                       render :json => { :error => errmsg }, :status => 406
+                       return
+               end
+
+               # get server for error check
+               osCategory = OsCategory.find(:first, :conditions => ["name = ?", name])
+        
+               if osCategory.nil? 
+                       errmsg = "Can't find os category"
+                       render :json => { :error => errmsg }, :status => 406
+               else
+                       osCategory.destroy
+                       render :json => { :success => "OK!" }
+               end
+       end
+
+       def addSupportedOS
+               change_group_list = params[:ChangeInfoList]
+               change_item = change_group_list[0]
+               errmsg = ""
+
+               os_name = change_item[:Name]
+               category_name = change_item[:OsCategory]
+               if os_name.nil? or os_name.empty? 
+                       errmsg = "Os name is empty"
+                       render :json => { :error => errmsg }, :status => 406
+                       return
+               end
+               if category_name.nil? or category_name.empty? 
+                       errmsg = "Os category is empty"
+                       render :json => { :error => errmsg }, :status => 406
+                       return
+               end
+
+               # get server for error check
+               os_category = OsCategory.find(:first, :conditions => ["name = ?", category_name])
+               supported_os = SupportedOs.find(:first, :conditions => ["name = ?", os_name])
+        
+               if os_category.nil? 
+                       errmsg = "Os category does not exist"
+
+                       render :json => { :error => errmsg }, :status => 406
+               elsif not supported_os.nil?
+                       errmsg = "supported os already exist"
+
+                       render :json => { :error => errmsg }, :status => 406
+               else
+                       supported_os = SupportedOs.new
+                       supported_os.name = os_name 
+                       supported_os.os_category_id = os_category.id
+                       supported_os.save
+
+                       render :json => { :success => "OK!" }
+               end
+       end
+
+       def removeSupportedOS
+               change_group_list = params[:ChangeInfoList]
+               change_item = change_group_list[0]
+               errmsg = ""
+
+               os_name = change_item[:Name]
+               if os_name.nil? or os_name.empty? 
+                       errmsg = "Os name is empty"
+                       render :json => { :error => errmsg }, :status => 406
+                       return
+               end
+
+               # get server for error check
+               supported_os = SupportedOs.find(:first, :conditions => ["name = ?", os_name])
+        
+               if supported_os.nil?
+                       errmsg = "supported os does not exist"
+
+                       render :json => { :error => errmsg }, :status => 406
+               else
+                       supported_os.destroy
+
+                       render :json => { :success => "OK!" }
+               end
+       end
+
+       def modifySupportedOS
+               change_group_list = params[:ChangeInfoList]
+               change_item = change_group_list[0]
+               errmsg = ""
+
+               os_name = change_item[:Name]
+               new_os_name = change_item[:NewName]
+               category_name = change_item[:OsCategory]
+               if os_name.nil? or os_name.empty? 
+                       errmsg = "Os name is empty"
+                       render :json => { :error => errmsg }, :status => 406
+                       return
+               end
+
+               # get server for error check
+               os_category = OsCategory.find(:first, :conditions => ["name = ?", category_name])
+               supported_os = SupportedOs.find(:first, :conditions => ["name = ?", os_name])
+        
+               if os_category.nil? 
+                       errmsg = "Os category does not exist"
+
+                       render :json => { :error => errmsg }, :status => 406
+               elsif supported_os.nil?
+                       errmsg = "supported os does not exist"
+
+                       render :json => { :error => errmsg }, :status => 406
+               else
+                       if not os_name.eql? new_os_name
+                               new_supported_os = SupportedOs.find(:first, :conditions => ["name = ?", new_os_name])
+                               if new_supported_os.nil?
+                                       supported_os.name = new_os_name 
+                               else
+                                       errmsg = "supported os already exist"
+                    
+                                       render :json => { :error => errmsg }, :status => 406
+                                       return
+                               end
+                       end
+
+                       supported_os.os_category_id = os_category.id
+                       supported_os.save
+
+                       render :json => { :success => "OK!" }
+               end
+       end
+
+       def addServerInfo
+               change_group_list = params[:ChangeInfoList]
+               change_item = change_group_list[0]
+               errmsg = ""
+
+               property = change_item[:Property]
+               value = change_item[:Value]
+               if property.nil? or property.empty? 
+                       errmsg = "Property name is empty"
+                       render :json => { :error => errmsg }, :status => 406
+                       return
+               end
+               if value.nil? or value.empty? 
+                       errmsg = "Value is empty"
+                       render :json => { :error => errmsg }, :status => 406
+                       return
+               end
+
+               # get server for error check
+               config = Server_config.find(:first, :conditions => ["property = ?", property])
+        
+               if not config.nil? 
+                       errmsg = "Config alerady exist"
+                       render :json => { :error => errmsg }, :status => 406
+               else
+                       config = Server_config.new
+                       config.property = property
+                       config.value = value
+                       config.save
+
+                       render :json => { :success => "OK!" }
+               end
+       end
+
+       def modifyServerInfo
+               change_group_list = params[:ChangeInfoList]
+               change_item = change_group_list[0]
+               errmsg = ""
+
+               property = change_item[:Property]
+               value = change_item[:Value]
+               if property.nil? or property.empty? 
+                       errmsg = "Property is empty"
+                       render :json => { :error => errmsg }, :status => 406
+                       return
+               end
+               if value.nil? or value.empty? 
+                       errmsg = "Value is empty"
+                       render :json => { :error => errmsg }, :status => 406
+                       return
+               end
+
+               # get server for error check
+               config = Server_config.find(:first, :conditions => ["property = ?", property])
+        
+               if config.nil? 
+                       errmsg = "Config does not exist"
+                       render :json => { :error => errmsg }, :status => 406
+               else
+                       config.value = value
+                       config.save
+
+                       render :json => { :success => "OK!" }
+               end
+       end
+
+       def removeServerInfo
+               change_group_list = params[:ChangeInfoList]
+               change_item = change_group_list[0]
+               errmsg = ""
+
+               property = change_item[:Property]
+               if property.nil? or property.empty? 
+                       errmsg = "Property is empty"
+                       render :json => { :error => errmsg }, :status => 406
+                       return
+               end
+
+               # get server for error check
+               config = Server_config.find(:first, :conditions => ["property = ?", property])
+        
+               if config.nil? 
+                       errmsg = "Property does not exist"
+                       render :json => { :error => errmsg }, :status => 406
+               else
+                       config.destroy
+                       render :json => { :success => "OK!" }
+               end
+       end
+
+end
diff --git a/dibs-web/app/controllers/admin_user_controller.rb b/dibs-web/app/controllers/admin_user_controller.rb
new file mode 100644 (file)
index 0000000..c79f8e1
--- /dev/null
@@ -0,0 +1,109 @@
+class AdminUserController < ApplicationController
+
+       before_filter :check_login_status, :check_admin_group
+
+       def queryAllUser
+               user_list = User.all
+
+               doc = Builder::XmlMarkup.new( :target => out_string = "", :indent => 2 )
+               doc.Response {
+                       generate_xml_header(doc)
+               
+                       doc.Data {
+                               if not user_list.nil? 
+                                       user_list.each do |user|
+                                               doc.User {
+                                                       doc.Name(user.name)
+                                                       doc.Email(user.email)
+                                                       doc.GroupList {
+                                                               group_list = Group.find_by_sql("SELECT groups.name
+                                                                                                                                       , groups.admin
+                                                                                                                                       , groups.description
+                                                                                                                               FROM users
+                                                                                                                               , user_groups
+                                                                                                                               , groups
+                                                                                                                               WHERE users.id = user_groups.user_id
+                                                                                                                       AND user_groups.group_id = groups.id
+                                                                                                                               AND users.email = \"#{user.email}\"")
+                                                               group_list.each { |group|
+                                                                               doc.GroupName(group.name)
+                                                               }
+                                                       }
+                                               }
+                                       end
+                               end
+                       }
+               }
+
+               #send_data
+               render :text => out_string, :content_type => "text/xml"
+       end
+
+       def modifyUser
+               change_user_list = params[:ChangeInfoList]
+               change_item = change_user_list[0]
+               errmsg = ""
+
+               email = change_item[:Email]
+               group_name = change_item[:GroupName]
+               user_name = change_item[:UserName]
+
+               if email.nil? or email.empty?
+                       render :text => "Email is invalid", :status => 406
+                       return
+               else
+                       user = User.find(:first, :conditions => ["email = ?", email])
+
+                       if user.nil? 
+                               errmsg = "Can't find user information"
+                               render :text => errmsg, :status => 406
+                               return
+                       end
+               end
+
+               if group_name.nil? or group_name.empty?
+                       render :text => "Group name is invalid", :status => 406
+                       return
+               else
+                       group = Group.find(:first, :conditions => ["name = ?", group_name])
+                       if group.nil? 
+                               errmsg = "Can't find group information"
+                               render :text => errmsg, :status => 406
+                               return
+                       end
+               end
+       puts user.id 
+               UserGroup.delete_all(["user_id = ?", user.id])
+
+               user_groups = UserGroup.new
+
+               user_groups.user_id = user.id
+               user_groups.group_id = group.id
+               user_groups.status = "ACTIVE"
+               user_groups.save
+
+               render :json => { :success => "OK!" }
+       end
+
+       def removeUser
+               change_user_list = params[:ChangeInfoList]
+               change_item = change_user_list[0]
+               errmsg = ""
+
+               email = change_item[:Email]
+               if email.nil? or email.empty?
+                       render :text => "Email is invalid", :status => 406
+                       return
+               else
+                       user = User.find(:first, :conditions => ["email = ?", email])
+               end
+
+               if user.nil?
+                       errmsg = "Can't find user information"
+                       render :text => errmsg, :status => 406
+               else
+                       user.destroy
+                       render :json => { :success => "OK!" }
+               end
+       end
+end
index 0636e17095941e1bfb905732f18a328db5f197f8..c3be25792eda934a039cc1c6cc85aaa462198792 100644 (file)
@@ -4,30 +4,124 @@ class ApplicationController < ActionController::Base
        helper_method :current_user
        
        def get_user_id
-               return @current_user
+               if @current_user.nil?
+                       current_user
+               end
+
+               if not @current_user.nil?
+                       return @current_user.id
+               else
+                       return nil
+               end
        end
 
+       def get_user_email
+               if @current_user.nil?
+                       current_user
+               end
+
+               if not @current_user.nil?
+                       return @current_user.email
+               else
+                       return nil
+               end
+       end
+
+       def get_group_list(email)
+               if not email.nil?
+                       group_list = Group.find_by_sql("SELECT groups.id
+                                                                                               , groups.name
+                                                                                               , groups.admin
+                                                                                               , groups.description
+                                                                                       FROM users
+                                                                                       , user_groups
+                                                                                       , groups
+                                                                                       WHERE users.id = user_groups.user_id
+                                                                               AND user_groups.group_id = groups.id
+                                                                                       AND users.email = \"#{email}\"")
+                       return group_list
+               else
+                       return nil
+               end
+       end
+
+       def is_admin(email)
+               if not email.nil?
+                       group = Group.find_by_sql("SELECT count(*) AS cnt
+                                                                               FROM users
+                                                                               , user_groups
+                                                                               , groups
+                                                                               WHERE users.id = user_groups.user_id
+                                                                       AND user_groups.group_id = groups.id
+                                                                       AND groups.admin = 'TRUE'
+                                                                               AND users.email = \"#{email}\"")
+                       if group[0].cnt > 0
+                               return TRUE
+                       end
+               end
+
+               return FALSE
+       end
+
+    def generate_xml_header(doc)
+               email = get_user_email
+               group_list = get_group_list(email)
+               if is_admin(email)
+                       admin = "TRUE"
+               else
+                       admin = "FALSE"
+               end
+             
+               doc.Header {
+                       doc.UserInfo {
+                               doc.Email(email)
+                               doc.Name(@current_user.name)
+                               doc.Admin(admin)
+                               doc.GroupList {
+                                       group_list.each { |group|
+                                               doc.Group {
+                                                       doc.GroupName(group.name)
+                                                       doc.GroupAdmin(group.admin)
+                                                       doc.GroupDescription(group.description)
+                                               }
+                                       }
+                               }
+                       }
+               }
+    end
+
        private
        def current_user
-               @current_user ||= User.find(session[:user_id]) if session[:user_id]
+               @current_user ||= User.find(:first, :conditions => {:email => session[:user_email]}) if session[:user_email]
        end
 
        def check_login_status
-               if session[:user_id].nil? then
+               if session[:user_email].nil? then
                        render :nothing => true, :status => 401
                        return
                end
        end
 
        def check_admin_group
-               if session[:user_id].nil? or session[:user_id].empty? then
+               if session[:user_email].nil? or session[:user_email].empty? then
                        render :nothing => true, :status => 401
                        return false
                else
-                       user_id = session[:user_id]
-                       user = User.find(:first, :conditions => ["email = ?", user_id])
+                       admin = "FALSE"
+                       user_email = session[:user_email]
+
+                       user = User.find(:first, :conditions => ["email = ?", user_email])
+
+                       group_list = get_group_list(user.email)
+
+                       group_list.each {|group|
+                               if group.admin == "TRUE"
+                                       admin = "TRUE"
+                                       break;
+                               end
+                       }
 
-                       if user.nil? or (not user.group_id == 0)
+                       if user.nil? or admin != "TRUE"
                                render :nothing => true, :status => 401
                                return false
                        end
index ab726bdbd33e367bb77c13e0088e082e2a22375d..f1b4fe169718ddacca6d4cc46bae35f0d279a2f9 100644 (file)
@@ -2,167 +2,330 @@ class JobsController < ApplicationController
 
        before_filter :check_login_status
 
+       Query_cnt = 30
+
        def list
        end
 
-       def job_list
+       def listAll
+               listQuery(params[:distribution], params[:lastID], "", "")
+       end
+
+       def listSearchId
+               listQuery("%", "%", "%")
+       end
+
+       def listSearchUser
+               listQuery(params[:distribution], params[:lastID], params[:user], "")
+       end
 
-               job_cnt = Job.count()
+       def listSearchDate
+               listQuery(params[:distribution], params[:lastID], "", params[:date])
+       end
 
-               if job_cnt <= 0
-                       render :text => "<JobList></JobList>",
-                                       :content_type => "text/xml"
-                       return
+       def listQuery(distribution, last_id, user, date)
+               if(distribution == "ALL")
+                       distribution = "%"
                end
 
-               if(params[:lastID].to_i == 0)
+               if(last_id == "LATEST")
                        last_job_id = Job.maximum("id")
+                       if last_job_id.nil?
+                               last_job_id = 0
+                       end
                else
-                       last_job_id = params[:lastID].to_i - 1
+                       last_job_id = last_id.to_i - 1
                end
 
-               first_job_id = last_job_id - 10
-
-               jobs = Job.find_by_sql("SELECT  jobs.id
-                                                                         , projects.dist_name \"distribution\"
-                                                                         , projects.name \"project_name\"
-                                                                         , jobs.jtype \"job_type\"
-                                                                         , CASE WHEN jobs.parent_job_id = -1 THEN \"SINGLE\"
-                                                                                        WHEN jobs.parent_job_id = jobs.id THEN \"MULTI\"
-                                                                                        ELSE \"CHILD\" END \"job_attribute\"
-                                                                         , jobs.os_name
-                                                                         , jobs.status
-                                                                         , jobs.parent_job_id
-                                                                         , jobs.start_time
-                                                                         , jobs.end_time
-                                             , users.name user_name
-                                                                  FROM jobs 
-                                                                         , users
-                                                                         , projects
-                                                                 WHERE jobs.id > #{first_job_id} AND jobs.id <= #{last_job_id}
-                                                                       AND jobs.user_id = users.id
-                                                                       AND jobs.prj_id = projects.id
-                                                                 ORDER BY jobs.id DESC")
+               user = user + "%"
 
+               date = date + "%"
+
+               first_job_id = last_job_id - Query_cnt
+
+               jobs = Job.find_by_sql("SELECT jobs.id
+                                                                        , CASE WHEN jobs.jtype like 'MULTI%' THEN 'MULTI'
+                                                                                        ELSE 'SINGLE' END AS job_attribute
+                                                                FROM jobs 
+                                                                LEFT JOIN projects 
+                                                                  ON jobs.project_id = projects.id
+                                                                LEFT JOIN users
+                                                                  ON jobs.user_id = users.id
+                                                                LEFT JOIN supported_os
+                                                                  ON jobs.supported_os_id = supported_os.id
+                                                                LEFT JOIN distributions
+                                                                  ON jobs.distribution_id = distributions.id
+                                                                LEFT JOIN remote_build_servers
+                                                                  ON jobs.remote_build_server_id = remote_build_servers.id
+                                                                LEFT JOIN sources
+                                                                  ON jobs.source_id = sources.id
+                                                         WHERE jobs.id > #{first_job_id} AND jobs.id <= #{last_job_id}
+                                                               AND jobs.parent_job_id IS NULL
+                                                               AND users.name like \"#{user}\"
+                                                               AND distributions.name like \"#{distribution}\"
+                                                               AND DATE(jobs.start_time) like \"#{date}\"
+                                                         ORDER BY jobs.id DESC")
 
                #generate to XML
                doc = Builder::XmlMarkup.new( :target => out_string = "", :indent => 2 )
                doc.JobList {
-                       jobs.each {|job|
+                       jobs.each {|job_list|
+                               job = get_job_info(job_list.id)
+
                                doc.Job {
-                                       doc.Id(job.id)
-                                       doc.Distribution(job.distribution)
+                                       doc.Id(job.job_id)
+                                       doc.Distribution(job.distribution_name)
                                        doc.ProjectName(job.project_name)
                                        doc.JobType(job.job_type)
-                                       doc.JobAttribute(job.job_attribute)
-                                       doc.Os(job.os_name)
+                                       doc.JobAttribute(job_list.job_attribute)
+                                       doc.Os(job.supported_os_name)
                                        doc.Status(job.status)
                                        doc.UserName(job.user_name)
                                        doc.StartTime(job.start_time)
                                        doc.EndTime(job.end_time)
-                                       doc.LogLink("/jobs/log/#{job.id}")
                                }
+
+                               if job_list.job_attribute == "MULTI"
+                                       child_jobs = get_child_job_info(job.job_id)
+                                       child_jobs.each {|job|
+                                               doc.Job {
+                                                       doc.Id(job.job_id)
+                                                       doc.Distribution(job.distribution_name)
+                                                       doc.ProjectName(job.project_name)
+                                                       doc.JobType(job.job_type)
+                                                       doc.JobAttribute("CHILD")
+                                                       doc.Os(job.supported_os_name)
+                                                       doc.Status(job.status)
+                                                       doc.UserName(job.user_name)
+                                                       doc.StartTime(job.start_time)
+                                                       doc.EndTime(job.end_time)
+                                               }
+                                       }
+                               end
                        }
                }
        
-               render :text => out_string,
-                               :content_type => "text/xml"
+               render :text => out_string, :content_type => "text/xml"
+               return
        end
 
-       def log_list
-               list_cnt = 10
-               request_page_num = params[:requestPageNum]
-               current_page_num = params[:currentPageNum]
+       def listSearchGroup
+               distribution = params[:distribution]
+               last_id = params[:lastID]
+               group = params[:group]
 
-               
-               if request_page_num == "back"
-                       request_page_number = current_page_num.to_i - 1
-               elsif request_page_num == "next"
-                       request_page_number = current_page_num.to_i + 1
-               else
-                       request_page_number = request_page_num.to_i
+               if(distribution == "ALL")
+                       distribution = "%"
                end
-puts "current page num " + current_page_num
-puts "request page num " 
-puts request_page_number
-
-               max_job_id = Job.maximum("id")
-
-               last_job_id = max_job_id - ((request_page_number - 1) * list_cnt)
-               first_job_id = last_job_id - list_cnt
-
-               jobs = Job.find_by_sql("SELECT  jobs.id
-                                                                         , CASE WHEN jobs.parent_job_id = -1 THEN projects.dist_name
-                                                                                        ELSE \"\" END \"distribution\"
-                                                                         , CASE WHEN jobs.parent_job_id = -1 THEN projects.name
-                                                                                        ELSE \"\" END \"project_name\"
-                                                                         , CASE WHEN jobs.parent_job_id = -1 THEN jobs.jtype
-                                                                                        ELSE \"â”—\" END \"job_type\"
-                                                                         , jobs.os_name
-                                                                         , jobs.status
-                                                                         , jobs.parent_job_id
-                                             , users.name user_name
-                                                                  FROM jobs 
-                                                                         , users
-                                                                         , projects
-                                                                 WHERE jobs.id between #{first_job_id} AND #{last_job_id}
-                                                                       AND jobs.user_id = users.id
-                                                                       AND jobs.prj_id = projects.id
-                                                                 ORDER BY jobs.id DESC")
-
-               job_cnt = Job.count('id')
-
-               temp1 = request_page_number / 10
-               temp2 = temp1+1
-               first_page_num = (temp1.to_s + "1").to_i
-               last_page_num = (temp2.to_s + "0").to_i
-
-               if (job_cnt.to_f / list_cnt.to_f).ceil < last_page_num
-                       last_page_num = (job_cnt.to_f / list_cnt.to_f).ceil
+
+               if(last_id == "LATEST")
+                       last_job_id = Job.maximum("id")
+                       if last_job_id.nil?
+                               last_job_id = 0
+                       end
+               else
+                       last_job_id = last_id.to_i - 1
                end
 
+               group = group + "%"
+
+               first_job_id = last_job_id - Query_cnt
+
+               jobs = Job.find_by_sql("SELECT jobs.id
+                                                                        , CASE WHEN jobs.jtype like 'MULTI%' THEN 'MULTI'
+                                                                                        ELSE 'SINGLE' END AS job_attribute
+                                                                FROM jobs 
+                                                                LEFT JOIN distributions ON jobs.distribution_id = distributions.id 
+                                                         WHERE jobs.id > #{first_job_id} AND jobs.id <= #{last_job_id}
+                                                               AND jobs.parent_job_id IS NULL
+                                                               AND distributions.name like \"#{distribution}\"
+                                                               AND jobs.user_id IN (SELECT users.id
+                                                                                                         FROM users
+                                                                                                         LEFT JOIN user_groups ON user_groups.user_id = users.id
+                                                                                                         LEFT JOIN groups ON groups.id = user_groups.group_id
+                                                                                                        WHERE groups.name LIKE \"#{group}\")
+                                                         ORDER BY jobs.id DESC")
+
                #generate to XML
                doc = Builder::XmlMarkup.new( :target => out_string = "", :indent => 2 )
                doc.JobList {
-                       jobs.each {|job|
+                       jobs.each {|job_list|
+                               job = get_job_info(job_list.id)
+
                                doc.Job {
-                                       doc.Id(job.id)
-                                       doc.Distribution(job.distribution)
+                                       doc.Id(job.job_id)
+                                       doc.Distribution(job.distribution_name)
                                        doc.ProjectName(job.project_name)
-                                       doc.JobAttribute(job.job_type)
-                                       doc.Os(job.os_name)
+                                       doc.JobType(job.job_type)
+                                       doc.JobAttribute(job_list.job_attribute)
+                                       doc.Os(job.supported_os_name)
                                        doc.Status(job.status)
                                        doc.UserName(job.user_name)
-                                       doc.LogLink("/jobs/log/#{job.id}")
+                                       doc.StartTime(job.start_time)
+                                       doc.EndTime(job.end_time)
                                }
-                               child_cnt = Job.count(:conditions => ["parent_id = ?", job.id])
-                               if (job.job_attribute == "MULTI" and child_cnt == 0)
-                                       doc.Job {
-                                               doc.Id(job.id)
-                                               doc.Distribution(job.distribution)
-                                               doc.ProjectName(job.project_name)
-                                               doc.JobAttribute(job.job_type)
-                                               doc.Os("MULTI")
-                                               doc.Status(job.status)
-                                               doc.UserName(job.user_name)
-                                               doc.LogLink("/jobs/log/#{job.id}")
+
+                               if job_list.job_attribute == "MULTI"
+                                       child_jobs = get_child_job_info(job.job_id)
+                                       child_jobs.each {|job|
+                                               doc.Job {
+                                                       doc.Id(job.job_id)
+                                                       doc.Distribution(job.distribution_name)
+                                                       doc.ProjectName(job.project_name)
+                                                       doc.JobType(job.job_type)
+                                                       doc.JobAttribute("CHILD")
+                                                       doc.Os(job.supported_os_name)
+                                                       doc.Status(job.status)
+                                                       doc.UserName(job.user_name)
+                                                       doc.StartTime(job.start_time)
+                                                       doc.EndTime(job.end_time)
+                                               }
                                        }
                                end
                        }
+               }
+       
+               render :text => out_string, :content_type => "text/xml"
+               return
+       end
 
-                       doc.PageList{
-                               for page_num in first_page_num .. last_page_num
-                                       if page_num == request_page_number
-                                               doc.Page(page_num, "Current" => "TRUE")
-                                       else
-                                               doc.Page(page_num, "Current" => "FALSE")
-                                       end
-                               end
+       def listSearchProject
+               distribution = params[:distribution]
+               last_id = params[:lastID]
+               project = params[:project]
+
+               if(distribution == "ALL")
+                       distribution = "%"
+               end
+
+               if(last_id == "LATEST")
+                       last_job_id = Job.maximum("id")
+                       if last_job_id.nil?
+                               last_job_id = 0
+                       end
+               else
+                       last_job_id = last_id.to_i - 1
+               end
+
+               project = project + "%"
+
+               first_job_id = last_job_id - Query_cnt
+               
+               jobs = Job.find_by_sql("SELECT jobs.id
+                                                                        , CASE WHEN jobs.jtype like \"MULTI%\" THEN \"MULTI\"
+                                                                                        ELSE \"SINGLE\" END \"job_attribute\"
+                                                                FROM jobs 
+                                                                LEFT JOIN projects 
+                                                                  ON jobs.project_id = projects.id
+                                                                LEFT JOIN users
+                                                                  ON jobs.user_id = users.id
+                                                                LEFT JOIN supported_os
+                                                                  ON jobs.supported_os_id = supported_os.id
+                                                                LEFT JOIN distributions
+                                                                  ON jobs.distribution_id = distributions.id
+                                                                LEFT JOIN remote_build_servers
+                                                                  ON jobs.remote_build_server_id = remote_build_servers.id
+                                                                LEFT JOIN sources
+                                                                  ON jobs.source_id = sources.id
+                                                         WHERE jobs.id > #{first_job_id} AND jobs.id <= #{last_job_id}
+                                                               AND projects.name like \"#{project}\"
+                                                         ORDER BY jobs.id DESC")
+
+               #generate to XML
+               doc = Builder::XmlMarkup.new( :target => out_string = "", :indent => 2 )
+               doc.JobList {
+                       jobs.each {|job_list|
+                               job = get_job_info(job_list.id)
+
+                               doc.Job {
+                                       doc.Id(job.job_id)
+                                       doc.Distribution(job.distribution_name)
+                                       doc.ProjectName(job.project_name)
+                                       doc.JobType(job.job_type)
+                                       doc.JobAttribute(job_list.job_attribute)
+                                       doc.Os(job.supported_os_name)
+                                       doc.Status(job.status)
+                                       doc.UserName(job.user_name)
+                                       doc.StartTime(job.start_time)
+                                       doc.EndTime(job.end_time)
+                               }
                        }
                }
        
-               render :text => out_string,
-                               :content_type => "text/xml"
+               render :text => out_string, :content_type => "text/xml"
+               return
+       end
+
+       def get_job_info(job_id)
+               jobs = Job.find_by_sql("SELECT jobs.id AS job_id
+                                                                        , jobs.jtype AS job_type
+                                                                        , jobs.status AS status
+                                                                        , DATE_FORMAT(jobs.start_time, '%Y-%m-%d %H:%i:%s') AS start_time
+                                                                        , DATE_FORMAT(jobs.end_time, '%Y-%m-%d %H:%i:%s') AS end_time
+                                                                    , projects.name AS project_name
+                                                                    , projects.ptype AS project_type
+                                                                    , users.name AS user_name
+                                                                    , users.email AS user_email
+                                                                    , supported_os.name AS supported_os_name
+                                                                    , distributions.name AS distribution_name
+                                                                    , distributions.pkgsvr_url AS pkgsvr_url
+                                                                    , distributions.pkgsvr_addr AS pkgsvr_addr
+                                                                    , distributions.description AS distribution_desc
+                                                                    , remote_build_servers.svr_addr AS remote_build_server_addr
+                                                                        , remote_build_servers.description AS remote_build_server_desc
+                                                                        , sources.pkg_ver AS pkg_ver
+                                                                        , sources.location AS location
+                                                                 FROM jobs 
+                                                                 LEFT JOIN projects 
+                                                                   ON jobs.project_id = projects.id
+                                                                 LEFT JOIN users
+                                                                   ON jobs.user_id = users.id
+                                                                 LEFT JOIN supported_os
+                                                                   ON jobs.supported_os_id = supported_os.id
+                                                                 LEFT JOIN distributions
+                                                                   ON jobs.distribution_id = distributions.id
+                                                                 LEFT JOIN remote_build_servers
+                                                                   ON jobs.remote_build_server_id = remote_build_servers.id
+                                                                 LEFT JOIN sources
+                                                                   ON jobs.source_id = sources.id
+                                                                 WHERE jobs.id = #{job_id}")
+               return jobs[0]
+       end
+
+       def get_child_job_info(parent_job_id)
+               job = Job.find_by_sql("SELECT jobs.id AS job_id
+                                                                        , jobs.jtype AS job_type
+                                                                        , jobs.status AS status
+                                                                        , DATE_FORMAT(jobs.start_time, '%Y-%m-%d %H:%i:%s') AS start_time
+                                                                        , DATE_FORMAT(jobs.end_time, '%Y-%m-%d %H:%i:%s') AS end_time
+                                                                    , projects.name AS project_name
+                                                                    , projects.ptype AS project_type
+                                                                    , users.name AS user_name
+                                                                    , users.email AS user_email
+                                                                    , supported_os.name AS supported_os_name
+                                                                    , distributions.name AS distribution_name
+                                                                    , distributions.pkgsvr_url AS pkgsvr_url
+                                                                    , distributions.pkgsvr_addr AS pkgsvr_addr
+                                                                    , distributions.description AS distribution_desc
+                                                                    , remote_build_servers.svr_addr AS remote_build_server_addr
+                                                                        , remote_build_servers.description AS remote_build_server_desc
+                                                                        , sources.pkg_ver AS pkg_ver
+                                                                        , sources.location AS location
+                                                                 FROM jobs 
+                                                                 LEFT JOIN projects 
+                                                                   ON jobs.project_id = projects.id
+                                                                 LEFT JOIN users
+                                                                   ON jobs.user_id = users.id
+                                                                 LEFT JOIN supported_os
+                                                                   ON jobs.supported_os_id = supported_os.id
+                                                                 LEFT JOIN distributions
+                                                                   ON jobs.distribution_id = distributions.id
+                                                                 LEFT JOIN remote_build_servers
+                                                                   ON jobs.remote_build_server_id = remote_build_servers.id
+                                                                 LEFT JOIN sources
+                                                                   ON jobs.source_id = sources.id
+                                                                 WHERE jobs.parent_job_id = #{parent_job_id}")
+               return job
        end
 
        def log
@@ -181,7 +344,7 @@ puts request_page_number
                line = params[:line].to_i
        
                file_name = "log"
-               directory = "~/sdk-build/test/build-server.multi-svr1/buildsvr01/jobs/#{id}"
+               directory = "~/temp/sdk-build/test/build-server.basic1/buildsvr01/jobs/#{id}"
        
                # create the file path                                                                         
                path = File.join(directory, file_name)                                                              
index f963ca8e3ba9e2a9a9ea2963d4e4f19c22320829..77728e7cbf3babf81015f7cb2f8592428ea8c662 100644 (file)
@@ -13,52 +13,36 @@ class ProjectsController < ApplicationController
 
   def buildProject
        # get information : dist_name, project_hash, password
-       project_param = params[:BuildProjectList]
-       build_type = params[:type]
-       project_hash = Hash.new
-       dist_name = ""
-
-       # get build project list
-       project_param.each do |prj|
-               if prj.has_key?("distribution")
-                       dist_name = prj[:distribution]
-                       project_param.delete(prj)
-               end
-       end 
-
-       project_param.each do |prj|
-               project_name = prj[:project]
-               os = prj[:os]
-
-               if not project_hash.key? project_name
-                       # get project in db
-                       project = Project.find(:first, :conditions => ["name = ? AND dist_name =?", project_name, dist_name])
+       change_group_list = params[:ChangeInfoList]
 
-                       if project.nil? 
-                               next
-                       else
-                               project_hash[project_name] = [project.password, [os]]
-                       end
-               else
-                       project_hash[project_name][1].push os
-               end
-       end
-       
        project_list = []
        os_list = []
        password_list = []
-       project_hash.each { |key,value|
-               project_list.push key
-               password_list.push value[0]
-               os_list.push value[1].join(",")
-       }
+
+       dist_name = nil
+       build_type = nil
+
+       change_group_list.each do |change_item|
+               dist_name = change_item[:distribution]
+               build_type = change_item[:buildType]
+               project_name = change_item[:projectName]
+               os = change_item[:os]
+
+               distribution = Distribution.find(:first, :conditions => ["name = ?", dist_name])
+               project = Project.find(:first, :conditions => ["name = ? AND distribution_id =?", project_name, distribution.id])
+
+               project_list.push project.name 
+               password_list.push project.password
+               os_list.push os
+       end
+
        project_list.uniq!
        os_list.uniq!
        password_list.uniq!
 
        if (project_list.length > 1) or (not (project_list[0].nil? or project_list[0].empty?))
                # execute build command
-               ret = Utils.sbi_build_command(build_type, dist_name, project_list, os_list, password_list,get_user_id)
+               ret = Utils.sbi_build_command(build_type, dist_name, project_list, os_list, password_list, get_user_email)
     
                render :json => { :success => "OK!" }
        else
@@ -67,75 +51,195 @@ class ProjectsController < ApplicationController
 
   end
 
-  def queryProject
-       distribution = params[:distribution]
+  def queryPackageInfo(project_id, os_id)
+               packages = Project.find_by_sql("SELECT sources.pkg_ver AS pkg_ver
+                                                                                        , packages.pkg_name AS pkg_name
+                                                                                        , DATE_FORMAT(jobs.start_time, '%Y-%m-%d %H:%i:%s') AS start_time
+                                                                                        , DATE_FORMAT(jobs.end_time, '%Y-%m-%d %H:%i:%s') AS end_time
+                                                                                    , users.name AS user_name
+                                                                                    , users.email AS user_email
+                                                                                 FROM projects
+                                                                                 LEFT JOIN sources       ON projects.id = sources.project_id
+                                                                                 LEFT JOIN packages      ON sources.id = packages.source_id
+                                                                                 LEFT JOIN jobs          ON jobs.source_id = sources.id 
+                                                                                                                                        AND jobs.supported_os_id = packages.supported_os_id
+                                                                                 LEFT JOIN users         ON jobs.user_id = users.id
+                                                                                WHERE projects.id = #{project_id}
+                                                                                  AND packages.supported_os_id = #{os_id}
+                                                                                GROUP BY packages.pkg_name
+                                                                                ORDER BY jobs.id DESC")
+               return packages
+  end
+
+  def checkUserAccessProject(user_id, project_id)
+       row = Project.find_by_sql("SELECT COUNT(*) AS cnt
+                                                                 FROM user_groups
+                                                                    , groups
+                                                                    , group_project_accesses
+                                                                WHERE user_groups.group_id = groups.id
+                                                                  AND groups.id = group_project_accesses.group_id
+                                                                  AND user_groups.user_id = #{user_id}
+                                                                  AND group_project_accesses.project_id = #{project_id}")
+               if row[0].cnt > 0
+                       return TRUE
+               end
+
+       return FALSE
+  end
+
+  def queryProjectsInfoInDistribution
+       dist_name = params[:distribution]
+
+       user_id = get_user_id
+       distribution = Distribution.find(:first, :conditions => ["name = ?", dist_name])
+       projects = Project.find(:all, :conditions => ["distribution_id = ?", distribution.id], :order => "name")
+
+       #generate to XML
+       doc = Builder::XmlMarkup.new( :target => out_string = "", :indent => 2 )
+       doc.Response {
+               generate_xml_header(doc)
+               doc.Data {
+                       doc.ProjectList {
+                               projects.each { |project|
+                                       doc.Project {
+                                               doc.Name(project.name)
+                                               doc.Type(project.ptype)
+                                               if checkUserAccessProject(user_id, project.id)
+                                                       doc.GroupAccess("TRUE")
+                                               else
+                                                       doc.GroupAccess("FALSE")
+                                               end
+
+                                               os_list = ProjectOs.find(:all, :conditions => ["project_id = ?", project.id], :order => "supported_os_id")
+                                               os_list.each { |os|
+                                                       doc.ProjectOs {
+                                                               os_info = SupportedOs.find(:first, :conditions => ["id = ?", os.supported_os_id])
+                                                               packageList = queryPackageInfo(project.id, os.supported_os_id) 
+
+                                                               doc.OsName(os_info.name)
+                                
+                                                               packageList.each { |package| 
+                                                                       doc.Package {
+                                                                               if package.nil?
+                                                                                       doc.PackageName()
+                                                                                       doc.PackageVersion()
+                                                                                       doc.StartTime()
+                                                                                       doc.EndTime()
+                                                                                       doc.UserName()
+                                                                                       doc.UserEmail()
+                                                                               else
+                                                                                       doc.PackageName(package.pkg_name)
+                                                                                       doc.PackageVersion(package.pkg_ver)
+                                                                                       doc.StartTime(package.start_time)
+                                                                                       doc.EndTime(package.end_time)
+                                                                                       doc.UserName(package.user_name)
+                                                                                       doc.UserEmail(package.user_email)
+                                                                               end
+                                                                       }
+                                                               }
+                                                       }
+                                               }
+                                       }
+                               }
+                       }
+               }
+       }
+
+       #send_data( out_string, :type => "t)
+       render :text => out_string, :content_type => "text/xml"
+  end
+
+  def queryJobStatus(project_id, supportes_os_id)
+       job = Job.find(:first, :conditions => ["status NOT IN ('FINISHED', 'ERROR') AND project_id = ? AND supported_os_id = ?", project_id, supported_os_id, ], :order => "id DESC")
+       if job.nil?
+               status = job.status
+       else
+               status = nil
+       end
+       return status
+  end
+
+  def queryProjectsInDistribution
+       dist_name = params[:distribution]
 
-       projects = Project.find(:all, :conditions => ["dist_name = ?", distribution], :order => "name")
+       distribution = Distribution.find(:first, :conditions => ["name = ?", dist_name])
+       projects = Project.find(:all, :conditions => ["distribution_id = ?", distribution.id], :order => "name")
        osList = SupportedOs.find(:all)
 
        # check can build
        project_access_list = []
 
        # get all my project
-       group_id = current_user.group_id
-       access_classes = GroupProjectAccesses.find(:all, :conditions => ["group_id = ?", group_id])
-       access_classes.each do |access_class| 
-               project_access_list.push access_class.prj_id
+       group_list = get_group_list(get_user_email)
+
+       group_id_list = []
+       group_list.each { |group|
+               group_id_list.push group.id
+       }
+
+       group_name_list_string = 
+       group_access_project_list = GroupProjectAccess.find(:all, :conditions => ["group_id in (?)", group_id_list.join(",") ])
+       if not group_access_project_list.nil?
+               group_access_project_list.each do |access_project| 
+                       project_access_list.push access_project.project_id
+               end
        end
 
        #generate to XML
-       doc = Builder::XmlMarkup.new( :target => out_string = "" )
-       doc.ProjectInfo {
-               doc.BuildServerInfo {
-                       osList.each do |os|
-                               doc.supportedOs(os.name)
-                       end
-               }
-
-               projects.each do |project|
-                       if project.ptype.eql? "BINARY" 
-                               bin = ProjectBin.find(:first, :conditions => ["prj_id = ?", project.id])
-                               if project_access_list.include? project.id 
-                                       doc.BinaryProject {
-                                               doc.ProjectName(project.name)
-                                               if not bin.nil? then
-                                                       doc.PackageName(bin.pkg_name)
-                                               end
-                                       }
-                               else
-                                       doc.OtherProject {
-                                               doc.ProjectName(project.name)
-                                               if not bin.nil? then
-                                                       doc.PackageName(bin.pkg_name)
-                                               end
-                                       }
+       doc = Builder::XmlMarkup.new( :target => out_string = "", :indent => 2 )
+       doc.Response {
+               generate_xml_header(doc)
+               doc.Data {
+                       doc.BuildServerInfo {
+                               if not osList.nil?
+                                       osList.each do |os|
+                                               doc.supportedOs(os.name)
+                                       end
                                end
-                       else
-                               prjOsList = ""
-                               prjOsLists = ProjectOs.find(:all, :conditions => ["prj_id = ?", project.id])
-
-                               prjOsLists.each do |list| 
-                                       if prjOsList.empty?
-                                               prjOsList = list.os_name
+                       }
+    
+                       projects.each do |project|
+                               if project.ptype.eql? "BINARY" 
+                                       bin = ProjectBin.find(:first, :conditions => ["project_id = ?", project.id])
+                                       if project_access_list.include? project.id 
+                                               doc.BinaryProject {
+                                                       doc.ProjectName(project.name)
+                                                       if not bin.nil? then
+                                                               doc.PackageName(bin.pkg_name)
+                                                       end
+                                               }
                                        else
-                                               prjOsList = prjOsList + "," + list.os_name
+                                               doc.OtherBinaryProject {
+                                                       doc.ProjectName(project.name)
+                                                       if not bin.nil? then
+                                                               doc.PackageName(bin.pkg_name)
+                                                       end
+                                               }
                                        end
-                               end
-
-                               if project_access_list.include? project.id 
-                                       doc.Project {
-                                               doc.ProjectName(project.name)
-                                               doc.OsList(prjOsList)
-                                       }
                                else
-                                       doc.OtherProject {
-                                               doc.ProjectName(project.name)
-                                               doc.OsList(prjOsList)
-                                       }
+                                       buildOsNameList = []
+                                       prjOsLists = ProjectOs.find(:all, :conditions => ["project_id = ?", project.id])
+    
+                                       prjOsLists.each do |list| 
+                                               supported_os = SupportedOs.find(:first, :conditions => ["id = ?", list.supported_os_id])
+                                               buildOsNameList.push(supported_os.name)
+                                       end
+    
+                                       if project_access_list.include? project.id 
+                                               doc.Project {
+                                                       doc.ProjectName(project.name)
+                                                       doc.OsList(buildOsNameList.join(","))
+                                               }
+                                       else
+                                               doc.OtherProject {
+                                                       doc.ProjectName(project.name)
+                                                       doc.OsList(buildOsNameList.join(","))
+                                               }
+                                       end
                                end
-                       end
-
-               end 
+    
+                       end 
+               }
        }
 
        #send_data( out_string, :type => "t)
@@ -154,10 +258,16 @@ class ProjectsController < ApplicationController
 
        #generate to XML
        doc = Builder::XmlMarkup.new( :target => out_string = "", :indent => 2 )
-       doc.Distribution {
-               distribution_list.each do |distribution|
-                       doc.Name(distribution)
-               end
+       doc.Response {
+               generate_xml_header(doc)
+
+               doc.Data {
+                       if not distribution_list.nil?
+                               distribution_list.each do |distribution|
+                                       doc.DistributionName(distribution)
+                               end
+                       end
+               }
        }
        
        #send_data
@@ -172,7 +282,7 @@ class ProjectsController < ApplicationController
   end
 
   def binaryFileUpload
-    distribution = params[:distribution]
+    dist_name = params[:distribution]
     project = params[:project]
     uploaded_io = params[:file]
  
@@ -181,13 +291,14 @@ class ProjectsController < ApplicationController
        file.write(uploaded_io.read)
     end
 
-       project = Project.find(:first, :conditions => ["name = ? AND dist_name =?", project, distribution])
+       distribution = Distribution.find(:first, :conditions => ["name = ?", dist_name])
+       project = Project.find(:first, :conditions => ["name = ? AND distribution_id =?", project, distribution.id])
        if project.nil? 
                render :nothing => true
                return
        end
 
-       ret = Utils.sbi_register_command(distribution, file_path,  project.password, get_user_id)
+       ret = Utils.sbi_register_command(distribution.name, file_path,  project.password, get_user_email)
 
        render :nothing => true
        return
index e0c8e4f238050e3bd5d29e1872c8c3ccf589ed1a..308f740f7418c92dc85d3d37e1cc534d16bd8e71 100644 (file)
@@ -3,38 +3,43 @@ class SessionsController < ApplicationController
        end
 
        def login
-               user = User.authenticate(params[:email], params[:password])
+               input_list = params[:ChangeInfoList]
+               input_item = input_list[0]
 
-               #generate to XML
-               doc = Builder::XmlMarkup.new( :target => out_string = "", :indent => 2 )
+               user = User.authenticate(input_item[:Email], input_item[:Password])
 
                if user
-                       session[:user_id] = user.id
+                       group_list = get_group_list(user.email)
+                       if is_admin(user.email)
+                               admin = "TRUE"
+                       else
+                               admin = "FALSE"
+                       end
 
-                       doc.LogInInfo {
-                               doc.Success("TRUE")
-                               doc.Message("Welcome...")
-                               doc.LogInTime("")
-                               doc.LastLogInTime("TRUE")
-                               doc.UserInfo {
-                                       doc.Email(user.email)
-                                       doc.Name(user.name)
-                               }
+                       session[:user_email] = user.email
+                       user_info = { :Message => 'Welcome!', 
+                                                       :Eamil => user.email, 
+                                                       :Name => user.name, 
+                                                       :Admin => admin,
+                                                 }
+                       group_info = nil
+                       group_list.map { |group|
+                               group_info = {:Group => [:GroupName => group.name, 
+                                                               :GroupAdmin => group.admin, 
+                                                               :GroupDescription => group.description] }
                        }
+
+                       render :json => { :Result => 'SUCCESS', :UserInfo => user_info, :GroupInfo => group_info}
+                       puts user_info
                else
-                       doc.LogInInfo {
-                               doc.Success("FALSE")
-                               doc.Message("Check your email or password")
-                       }
+                       render :json => { :Result => 'ERROR', :UserInfo => {:Message => 'Fail login'} }
                end
 
-               render :text => out_string,
-                               :content_type => "text/xml"
-               puts out_string
+
        end
 
        def logout
-               session[:user_id] = nil
+               session[:user_email] = nil
 
                #generate to XML
                doc = Builder::XmlMarkup.new( :target => out_string = "", :indent => 2 )
@@ -56,7 +61,7 @@ class SessionsController < ApplicationController
                doc = Builder::XmlMarkup.new( :target => out_string = "", :indent => 2 )
 
                if user
-                       session[:user_id] = user.id
+                       session[:user_email] = user.email
                        redirect_to "/projects"
                else
                        flash.now.alert = "Invalid email or password"
@@ -65,7 +70,7 @@ class SessionsController < ApplicationController
        end
        
        def destroy
-               session[:user_id] = nil
+               session[:user_email] = nil
                redirect_to root_url, :notice => "Logged out!"
        end
 end
index 356deeb1516e31aa1a045cc66acdfd3d279f4c62..aec71415b9790538449fb0714cf4125a376eda56 100644 (file)
@@ -15,34 +15,98 @@ class UsersController < ApplicationController
        end
 
        def signup 
-               @user = User.new(params[:user])
+               change_list = params[:ChangeInfoList]
+               change_item = change_list[0]
 
-               #generate to XML
-               doc = Builder::XmlMarkup.new( :target => out_string = "", :indent => 2 )
+               @user = User.new()
+               @user.email = change_item[:Email]
+               @user.name = change_item[:Name]
+               @user.password = change_item[:Password]
+               @user.password_confirmation = change_item[:PasswordConfirm]
 
                if @user.save
-                       success = "TRUE"
-                       message = "Welcome..."
+                       render :json => { :success => "Welcome!" }
                else
-                       success = "FALSE"
-                       message = "Error..."
+                       render :json => { :error => "Error"}, :status => 406
                end
 
-               header = "Sign up"
+       end
+       
+       def show 
+               email = get_user_email
+               user = User.find(:first, :conditions => ["email = ?", email])
 
-               doc.SignUpInfo {
-                       doc.Success(success)
-                       doc.Header(success)
-                       doc.Message(message)
-                       doc.UserInfo {
-                               doc.UserEmail(@user.email)
-                               doc.UserName(@user.name)
+               doc = Builder::XmlMarkup.new( :target => out_string = "", :indent => 2 )
+               doc.Response {
+                       generate_xml_header(doc)
+               
+                       doc.Data {
+                               doc.User {
+                                       doc.Name(user.name)
+                                       doc.Email(user.email)
+                                       doc.GroupList {
+                                               group_list = get_group_list(user.email)
+                                               group_list.each { |group|
+                                                               doc.GroupName(group.name)
+                                               }
+                                       }
+                               }
                        }
                }
 
-               render :text => out_string,
-                               :content_type => "text/xml"
-               puts out_string
+               #send_data
+               render :text => out_string, :content_type => "text/xml"
+       end
+
+       def modify
+               change_list = params[:ChangeInfoList]
+               change_item = change_list[0]
+               errmsg = ""
+
+               email = change_item[:Email]
+               name = change_item[:Name]
+               password = change_item[:Password]
+               password_confirm = change_item[:PasswordConfirm]
+
+               if email != get_user_email
+                       errmsg = "Can't modify email"
+                       render :json => { :error => errmsg }, :status => 406
+                       return
+               end
+
+               if email.nil? or email.empty? 
+                       errmsg = "Email is empty"
+                       render :json => { :error => errmsg }, :status => 406
+                       return
+               end
+
+               if name.nil? or name.empty? 
+                       errmsg = "Name is empty"
+                       render :json => { :error => errmsg }, :status => 406
+                       return
+               end
+
+               if password.nil? or password.empty? 
+                       errmsg = "Password is empty"
+                       render :json => { :error => errmsg }, :status => 406
+                       return
+               end
+
+               if password != password_confirm
+                       errmsg = "Password is different"
+                       render :json => { :error => errmsg }, :status => 406
+                       return
+               end
+               user = User.find(:first, :conditions => ["email = ?", email])
+               user.name = name
+               user.password = password
+               user.password_confirmation = password_confirm
+               user.save
+
+               if errmsg.empty?
+                       render :json => { :success => "OK!" }
+               else
+                       render :json => { :error => errmsg }, :status => 406
+               end
        end
-       
 end
index 4b478c65caf093108d29ae373d5d08f702b168c7..2742e9a9c9acc38892580ec80100d7ab18409d8b 100644 (file)
@@ -103,4 +103,5 @@ puts "[[[#{cmd}]]]"
       return nil
     end
   end
+
 end
diff --git a/dibs-web/app/helpers/admin_distribution_helper.rb b/dibs-web/app/helpers/admin_distribution_helper.rb
new file mode 100644 (file)
index 0000000..97c39f6
--- /dev/null
@@ -0,0 +1,2 @@
+module AdminDistributionHelper
+end
diff --git a/dibs-web/app/helpers/admin_group_helper.rb b/dibs-web/app/helpers/admin_group_helper.rb
new file mode 100644 (file)
index 0000000..9561d3b
--- /dev/null
@@ -0,0 +1,2 @@
+module AdminGroupHelper
+end
diff --git a/dibs-web/app/helpers/admin_project_helper.rb b/dibs-web/app/helpers/admin_project_helper.rb
new file mode 100644 (file)
index 0000000..7925981
--- /dev/null
@@ -0,0 +1,2 @@
+module AdminProjectHelper
+end
diff --git a/dibs-web/app/helpers/admin_server_helper.rb b/dibs-web/app/helpers/admin_server_helper.rb
new file mode 100644 (file)
index 0000000..5c7d70a
--- /dev/null
@@ -0,0 +1,2 @@
+module AdminServerHelper
+end
diff --git a/dibs-web/app/helpers/admin_user_helper.rb b/dibs-web/app/helpers/admin_user_helper.rb
new file mode 100644 (file)
index 0000000..3edd72d
--- /dev/null
@@ -0,0 +1,2 @@
+module AdminUserHelper
+end
index 530f6232c8e6ab474f4177c7235da2e49fe9da44..994dc84809ac5ad80c064c1091ba18fbf4904edf 100644 (file)
@@ -1,3 +1,3 @@
 class Distribution < ActiveRecord::Base
-  attr_accessible :name, :pkgsvr_addr, :pkgsvr_url
+  attr_accessible :id, :name, :pkgsvr_url, :pkgsvr_addr, :status, :description
 end
index cee5396323aa9dc0708263bec68159a17f8bc91f..55595be78a6c81a7eecc5ef5449ee194eca761f7 100644 (file)
@@ -1,3 +1,5 @@
 class Group < ActiveRecord::Base
-  attr_accessible :group_name, :group_id
+#      has_many :user_groups
+#      has_many :users, :through => :user_groups
+       attr_accessible :name, :id
 end
diff --git a/dibs-web/app/models/group_project_access.rb b/dibs-web/app/models/group_project_access.rb
new file mode 100644 (file)
index 0000000..dee4f5e
--- /dev/null
@@ -0,0 +1,4 @@
+class GroupProjectAccess < ActiveRecord::Base
+       self.primary_key = 'group_id', 'project_id'
+       attr_accessible :group_id, :project_id, :build
+end
diff --git a/dibs-web/app/models/group_project_accesses.rb b/dibs-web/app/models/group_project_accesses.rb
deleted file mode 100644 (file)
index fdff557..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-class GroupProjectAccesses < ActiveRecord::Base
-       self.primary_key = 'group_id', 'prj_id'
-  attr_accessible :group_id, :prj_id, :build
-end
index 177a03e2c7e0cf250e0a328b694d07e73692c3e5..3c1599427d327dd525d9646490842c3262741881 100644 (file)
@@ -1,4 +1,3 @@
 class Job < ActiveRecord::Base
-  belongs_to :users
-  attr_accessible :job_attribute, :distribution, :job_id, :os, :project_name, :status, :user_id
+  attr_accessible :distribution_id, :id, :supported_os_id, :project_id, :status, :user_id, :remote_build_server_id, :parent_job_id, :source_id, :jtype, :start_time, :end_time
 end
diff --git a/dibs-web/app/models/os_category.rb b/dibs-web/app/models/os_category.rb
new file mode 100644 (file)
index 0000000..a8fbee1
--- /dev/null
@@ -0,0 +1,4 @@
+class OsCategory < ActiveRecord::Base
+  set_table_name "os_category"
+  attr_accessible :id, :name
+end
diff --git a/dibs-web/app/models/package.rb b/dibs-web/app/models/package.rb
new file mode 100644 (file)
index 0000000..57c4437
--- /dev/null
@@ -0,0 +1,3 @@
+class Package < ActiveRecord::Base
+  attr_accessible :id, :pkg_name, :sources_id, :supported_os_id
+end
index c41804b8a688eb249a353a880ab0c879b2d3bc12..1c9d56ef91ab2e00bca9ae116901393cdfe1f8f4 100644 (file)
@@ -1,3 +1,3 @@
 class Project < ActiveRecord::Base
-   attr_accessible :name, :type, :password, :dist_name
+   attr_accessible :id, :distribution_id, :name, :ptype, :password
 end
index 14403d77b7d9af9b25da5eddc1d70cb6aa0adf22..3252b0c20cc8dbcb9e151bf5a59f6f168acdee5d 100644 (file)
@@ -1,3 +1,3 @@
 class ProjectBin < ActiveRecord::Base
-  attr_accessible :prj_id, :pkg_name
+  attr_accessible :project_id, :pkg_name
 end
index 6f61b777b25ec25f02bec5d5877d70c60e6fb006..c0a5d4d561560e4a175dc6d3aa5f96c49a512975 100644 (file)
@@ -1,3 +1,3 @@
 class ProjectGit < ActiveRecord::Base
-  attr_accessible :prj_id, :git_repos, :git_branch
+  attr_accessible :project_id, :git_repos, :git_branch
 end
index 237af6481a3c5f34dd3b82028f5397c8febaac38..670dab02f055952779604ceb67e3545e8402b546 100644 (file)
@@ -1,3 +1,4 @@
 class ProjectOs < ActiveRecord::Base
-   attr_accessible :prj_id, :os_name
+       self.primary_key = 'project_id', 'supported_os_id'
+   attr_accessible :project_id, :supported_os_id
 end
diff --git a/dibs-web/app/models/remote_build_server.rb b/dibs-web/app/models/remote_build_server.rb
new file mode 100644 (file)
index 0000000..61172ee
--- /dev/null
@@ -0,0 +1,3 @@
+class RemoteBuildServer < ActiveRecord::Base
+  attr_accessible :id, :svr_addr, :description
+end
diff --git a/dibs-web/app/models/remote_build_servers.rb b/dibs-web/app/models/remote_build_servers.rb
deleted file mode 100644 (file)
index ac8edde..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-class RemoteBuildServers < ActiveRecord::Base
-  attr_accessible :svr_addr
-end
diff --git a/dibs-web/app/models/server_config.rb b/dibs-web/app/models/server_config.rb
new file mode 100644 (file)
index 0000000..624f2aa
--- /dev/null
@@ -0,0 +1,3 @@
+class Server_config < ActiveRecord::Base
+  attr_accessible :chage_log_check, :db_version, :id, :job_keep_time, :job_log_url, :max_working_job, :pkg_sync_period, :send_mail
+end
diff --git a/dibs-web/app/models/source.rb b/dibs-web/app/models/source.rb
new file mode 100644 (file)
index 0000000..f8bd214
--- /dev/null
@@ -0,0 +1,3 @@
+class Source < ActiveRecord::Base
+  attr_accessible :id, :location, :pkg_ver, :project_id
+end
index 12af232df8788bb1d006f2328b26fe4addb01e0a..c37b19f17410ff8a121f937d60307c0c03a7b394 100644 (file)
@@ -1,3 +1,3 @@
 class SupportedOs < ActiveRecord::Base
-  attr_accessible :name
+  attr_accessible :id, :os_category_id, :name
 end
diff --git a/dibs-web/app/models/sync_pkg_server.rb b/dibs-web/app/models/sync_pkg_server.rb
new file mode 100644 (file)
index 0000000..0863806
--- /dev/null
@@ -0,0 +1,3 @@
+class SyncPkgServer < ActiveRecord::Base
+  attr_accessible :description, :distribution_id, :id, :period, :pkgsvr_url
+end
diff --git a/dibs-web/app/models/sync_project.rb b/dibs-web/app/models/sync_project.rb
new file mode 100644 (file)
index 0000000..b860a7a
--- /dev/null
@@ -0,0 +1,3 @@
+class SyncProject < ActiveRecord::Base
+  attr_accessible :project_id, :sync_pkg_server_id
+end
index 38fa7d1cfb8134c8401616239aae326f37c2c7f7..ebfb5f15c88a3e9a2e3a3cee9fac29962bab677d 100644 (file)
@@ -1,6 +1,7 @@
 class User < ActiveRecord::Base
-       self.primary_key = 'email'
-       attr_accessible :email, :group_id, :password, :password_confirmation, :name
+#      has_many :user_groups
+#      has_many :groups, :through => :user_groups
+       attr_accessible :id, :email, :password, :password_confirmation, :name
 
        attr_accessor :password
        before_save :encrypt_password
diff --git a/dibs-web/app/models/user_group.rb b/dibs-web/app/models/user_group.rb
new file mode 100644 (file)
index 0000000..c18ce8b
--- /dev/null
@@ -0,0 +1,6 @@
+class UserGroup < ActiveRecord::Base
+#      belongs_to :users
+#      belongs_to :groups
+       self.primary_key = 'group_id', 'user_id'
+       attr_accessible :group_id, :status, :user_id
+end
diff --git a/dibs-web/config.ru b/dibs-web/config.ru
new file mode 100644 (file)
index 0000000..536e8d2
--- /dev/null
@@ -0,0 +1,4 @@
+# This file is used by Rack-based servers to start the application.
+
+require ::File.expand_path('../config/environment',  __FILE__)
+run Dibs::Application
diff --git a/dibs-web/config.xml b/dibs-web/config.xml
new file mode 100644 (file)
index 0000000..4ff99b6
--- /dev/null
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<widget xmlns="http://www.w3.org/ns/widgets" xmlns:tizen="http://tizen.org/ns/widgets" id="http://172.21.110.234:3300" version="1.0" viewmodes="fullscreen">
+    <tizen:application id="q3tpr9HXDs" required_version="1.0"/>
+    <content src="index.html"/>
+    <icon src="icon.png"/>
+    <name>test</name>
+</widget>
index ce9baf8210b1c47b9fe9373ac42f957e2da97c51..6e35958ca81eea308ca574d9390ab0e5828fdca9 100644 (file)
 # # Warning: The database defined as "test" will be erased and
 # # re-generated from your development database when you run "rake".
 # # Do not set this db to the same as development or production.
-# test:
-#   adapter: sqlite3
-#   database: db/test.sqlite3
-#   pool: 5
-#   timeout: 5000
-# 
-# production:
-#   adapter: sqlite3
-#   database: db/production.sqlite3
-#   pool: 5
-#   timeout: 5000
+ test:
+   adapter: 
+   encoding:
+   host:
+   port:
+   database:
+   username:
+   password:
+   pool:
+   timeout: 
+ production:
+   adapter: 
+   encoding:
+   host:
+   port:
+   database:
+   username:
+   password:
+   pool:
+   timeout: 
 
-# for DIBS
  development:
-   adapter: sqlite3
-   database: ~/.build_tools/build_server/testserver3/server.db
-   pool: 5
-   timeout: 5000
+   adapter: 
+   encoding:
+   host:
+   port:
+   database:
+   username:
+   password:
+   pool:
+   timeout:
index 66ce15997a50221ccfd29afddec64222dfc596b2..f6d2ac64a67e64d3982aec26f39947ce724b0f5b 100644 (file)
@@ -4,7 +4,6 @@ Dibs::Application.routes.draw do
        get "sessions/new" => "sessions#new"
 
        resources :users
-       resources :jobs
 
     get "jobs" => "jobs#list"
     
@@ -20,47 +19,90 @@ Dibs::Application.routes.draw do
        # For asynchronous call
 
        post "users/signup"
+       post "users/modify"
 
        post "sessions/login"
        delete "sessions/logout"
 
-    get "jobs/job_list/:lastID" => "jobs#job_list"
-    get "jobs/log_list/:requestPageNum/:currentPageNum" => "jobs#log_list"
+    get "jobs/list/:distribution/:lastID" => "jobs#listAll"
+    get "jobs/listSearchUser/:user/:distribution/:lastID" => "jobs#listSearchUser"
+    get "jobs/listSearchGroup/:group/:distribution/:lastID" => "jobs#listSearchGroup"
+    get "jobs/listSearchProject/:project/:distribution/:lastID" => "jobs#listSearchProject", :constraints => { :project => /[0-9A-Za-z\-\.]+/ }
+    get "jobs/listSearchDate/:date/:distribution/:lastID" => "jobs#listSearchDate"
+
        match "jobs/log/:id" => "jobs#log"
        match "jobs/log/:id/:line" => "jobs#log_more"
 
-       post "projects/buildProject/:type" => "projects#buildProject"
        get "projects/queryDistribution"
        match "projects/queryProject/:distribution" => "projects#queryProject"
        post "projects/binaryFileUpload"
        
-       get "admin" => "admin#user"
-
-       get "admin/user" 
-
-       get "admin/queryAdminUser" 
-
-       get "admin/queryAdminAllGroupName" 
+       # projects
+       match "projects/queryProjectsInfoInDistribution/:distribution" => "projects#queryProjectsInfoInDistribution" 
+       match "projects/queryProjectsInDistribution/:distribution" => "projects#queryProjectsInDistribution" 
+       post "projects/buildProject" 
+
+       # admin group
+       get "admin_group/queryAllGroup" 
+       match "admin_group/queryGroupInfo/:groupName" => "admin_group#queryGroupInfo"
+       post "admin_group/addGroup"
+       post "admin_group/removeGroup"
+       post "admin_group/modifyGroup"
+
+       # admin user
+       get "admin_user/queryAllUser" 
+       post "admin_user/removeUser" 
+       post "admin_user/modifyUser" 
+
+       # admin server
+       get "admin_server/queryAllServer" 
+       post "admin_server/addRemoteBuildServer" 
+       post "admin_server/removeRemoteBuildServer" 
+       post "admin_server/modifyRemoteBuildServer" 
+       post "admin_server/addOsCategory" 
+       post "admin_server/removeOsCategory" 
+       post "admin_server/modifyOsCategory" 
+       post "admin_server/addSupportedOS" 
+       post "admin_server/removeSupportedOS" 
+       post "admin_server/modifySupportedOS" 
+       post "admin_server/addServerInfo" 
+       post "admin_server/removeServerInfo" 
+       post "admin_server/modifyServerInfo" 
+
+       # admin project 
+       get "admin_project/queryAllProject" 
+       match "admin_project/queryProjectsInDistribution/:distribution" => "admin_project#queryProjectsInDistribution" 
+       post "admin_project/addProject" 
+       post "admin_project/removeProject" 
+       post "admin_project/modifyProject" 
+
+       # admin distribution
+       get "admin_distribution/queryAllDistribution" 
+       match "admin_distribution/queryDistributionInfo/:distribution" => "admin_distribution#queryDistributionInfo" 
+       post "admin_distribution/addDistribution" 
+       post "admin_distribution/removeDistribution" 
+       post "admin_distribution/modifyDistribution" 
+
+       get "admin/queryAllOS" 
+       get "admin/queryAllOSCategory" 
+
+
+       # admin
        
-       post "admin/changeAdminUser"
-
-       get "admin/group" 
-
-       get "admin/queryAdminGroups" 
-       match "admin/queryAdminGroupInfo/:groupName" => "admin#queryAdminGroupInfo"
-       post "admin/changeAdminGroup"
-
-       get "admin/server" 
-       post "admin/changeAdminServer" 
-       get "admin/queryAdminServer" 
-
-       get "admin/project" 
-       post "admin/changeAdminProject"
-       get "admin/queryAdminAllOS" 
-       get "admin/queryAdminAllProject" 
-       get "admin/queryDistributions" 
-       get "admin/queryDistributionInfo/:distribution" => "admin#queryDistributionInfo"
-       get "admin/queryProjectInfo/:distribution" => "admin#queryProjectInfo"
+#      get "admin/queryAdminAllGroupName" 
+#      get "admin/queryAdminAllProject" 
+#      get "admin/queryAdminAllOS" 
+#      get "admin/queryAdminAllDistribution" 
+#
+#      get "admin/queryAdminGroup" 
+#      get "admin/queryAdminServer" 
+#
+#      match "admin/queryAdminDistributionInfo/:distribution" => "admin#queryAdminDistributionInfo"
+#      match "admin/queryProjectInfo/:distribution" => "admin#queryProjectInfo"
+#      
+#      post "admin/changeAdminUser"
+#      post "admin/changeAdminServer" 
+#      post "admin/changeAdminProject"
 
        # The priority is based upon order of creation:
        # first created -> highest priority.
diff --git a/dibs-web/db/schema.rb b/dibs-web/db/schema.rb
new file mode 100644 (file)
index 0000000..f0ab07e
--- /dev/null
@@ -0,0 +1,76 @@
+# This file is auto-generated from the current state of the database. Instead
+# of editing this file, please use the migrations feature of Active Record to
+# incrementally modify your database, and then regenerate this schema definition.
+#
+# Note that this schema.rb definition is the authoritative source for your
+# database schema. If you need to create the application database on another
+# system, you should be using db:schema:load, not running all the migrations
+# from scratch. The latter is a flawed and unsustainable approach (the more migrations
+# you'll amass, the slower it'll run and the greater likelihood for issues).
+#
+# It's strongly recommended to check this file into your version control system.
+
+ActiveRecord::Schema.define(:version => 20121024015858) do
+
+  create_table "distributions", :force => true do |t|
+    t.string   "name"
+    t.string   "pkgsvr_url"
+    t.string   "pkgsvr_addr"
+    t.datetime "created_at",  :null => false
+    t.datetime "updated_at",  :null => false
+  end
+
+  create_table "group_rights", :force => true do |t|
+    t.integer  "group_id"
+    t.integer  "project_id"
+    t.string   "build"
+    t.datetime "created_at", :null => false
+    t.datetime "updated_at", :null => false
+  end
+
+  create_table "groups", :force => true do |t|
+    t.string   "group_name"
+    t.datetime "created_at", :null => false
+    t.datetime "updated_at", :null => false
+  end
+
+  create_table "jobs", :force => true do |t|
+    t.string   "job_id",        :null => false
+    t.string   "project_name"
+    t.string   "distribution"
+    t.string   "job_attribute"
+    t.string   "os"
+    t.string   "status"
+    t.integer  "user_id"
+    t.string   "parent_id"
+    t.datetime "created_at",    :null => false
+    t.datetime "updated_at",    :null => false
+  end
+
+  create_table "projects", :force => true do |t|
+    t.string   "project_name"
+    t.string   "distribution_name"
+    t.string   "project_type"
+    t.string   "os_list"
+    t.string   "password"
+    t.datetime "created_at",        :null => false
+    t.datetime "updated_at",        :null => false
+  end
+
+  create_table "supported_os", :force => true do |t|
+    t.string   "name"
+    t.datetime "created_at", :null => false
+    t.datetime "updated_at", :null => false
+  end
+
+  create_table "users", :force => true do |t|
+    t.string   "email"
+    t.string   "user_name"
+    t.string   "password_hash"
+    t.string   "password_salt"
+    t.integer  "group_id"
+    t.datetime "created_at",    :null => false
+    t.datetime "updated_at",    :null => false
+  end
+
+end
diff --git a/dibs-web/db/seeds.rb b/dibs-web/db/seeds.rb
new file mode 100644 (file)
index 0000000..d34dfa0
--- /dev/null
@@ -0,0 +1,7 @@
+# This file should contain all the record creation needed to seed the database with its default values.
+# The data can then be loaded with the rake db:seed (or created alongside the db with db:setup).
+#
+# Examples:
+#
+#   cities = City.create([{ :name => 'Chicago' }, { :name => 'Copenhagen' }])
+#   Mayor.create(:name => 'Emanuel', :city => cities.first)
diff --git a/dibs-web/doc/README_FOR_APP b/dibs-web/doc/README_FOR_APP
new file mode 100644 (file)
index 0000000..fe41f5c
--- /dev/null
@@ -0,0 +1,2 @@
+Use this README file to introduce your application and point to useful places in the API for learning more.
+Run "rake doc:app" to generate API documentation for your models, controllers, helpers, and libraries.
diff --git a/dibs-web/public/404.html b/dibs-web/public/404.html
new file mode 100644 (file)
index 0000000..9a48320
--- /dev/null
@@ -0,0 +1,26 @@
+<!DOCTYPE html>
+<html>
+<head>
+  <title>The page you were looking for doesn't exist (404)</title>
+  <style type="text/css">
+    body { background-color: #fff; color: #666; text-align: center; font-family: arial, sans-serif; }
+    div.dialog {
+      width: 25em;
+      padding: 0 4em;
+      margin: 4em auto 0 auto;
+      border: 1px solid #ccc;
+      border-right-color: #999;
+      border-bottom-color: #999;
+    }
+    h1 { font-size: 100%; color: #f00; line-height: 1.5em; }
+  </style>
+</head>
+
+<body>
+  <!-- This file lives in public/404.html -->
+  <div class="dialog">
+    <h1>The page you were looking for doesn't exist.</h1>
+    <p>You may have mistyped the address or the page may have moved.</p>
+  </div>
+</body>
+</html>
diff --git a/dibs-web/public/422.html b/dibs-web/public/422.html
new file mode 100644 (file)
index 0000000..83660ab
--- /dev/null
@@ -0,0 +1,26 @@
+<!DOCTYPE html>
+<html>
+<head>
+  <title>The change you wanted was rejected (422)</title>
+  <style type="text/css">
+    body { background-color: #fff; color: #666; text-align: center; font-family: arial, sans-serif; }
+    div.dialog {
+      width: 25em;
+      padding: 0 4em;
+      margin: 4em auto 0 auto;
+      border: 1px solid #ccc;
+      border-right-color: #999;
+      border-bottom-color: #999;
+    }
+    h1 { font-size: 100%; color: #f00; line-height: 1.5em; }
+  </style>
+</head>
+
+<body>
+  <!-- This file lives in public/422.html -->
+  <div class="dialog">
+    <h1>The change you wanted was rejected.</h1>
+    <p>Maybe you tried to change something you didn't have access to.</p>
+  </div>
+</body>
+</html>
diff --git a/dibs-web/public/500.html b/dibs-web/public/500.html
new file mode 100644 (file)
index 0000000..f3648a0
--- /dev/null
@@ -0,0 +1,25 @@
+<!DOCTYPE html>
+<html>
+<head>
+  <title>We're sorry, but something went wrong (500)</title>
+  <style type="text/css">
+    body { background-color: #fff; color: #666; text-align: center; font-family: arial, sans-serif; }
+    div.dialog {
+      width: 25em;
+      padding: 0 4em;
+      margin: 4em auto 0 auto;
+      border: 1px solid #ccc;
+      border-right-color: #999;
+      border-bottom-color: #999;
+    }
+    h1 { font-size: 100%; color: #f00; line-height: 1.5em; }
+  </style>
+</head>
+
+<body>
+  <!-- This file lives in public/500.html -->
+  <div class="dialog">
+    <h1>We're sorry, but something went wrong.</h1>
+  </div>
+</body>
+</html>
diff --git a/dibs-web/public/favicon.ico b/dibs-web/public/favicon.ico
new file mode 100644 (file)
index 0000000..e69de29
index dbc4c135a3ffba0b104ecc285fb6b0b6cb09363e..6298ca27c794231109a3118308c2dab8fac72c27 100644 (file)
        <script src="javascripts/popup-window.js"></script>
 
        <script src="javascripts/main.js"></script>
+       <script src="javascripts/dibs-api.js"></script>
        <script src="javascripts/session.js"></script>
+       <script src="javascripts/user.js"></script>
+       <script src="javascripts/build.js"></script>
        <script src="javascripts/projects.js"></script>
        <script src="javascripts/jobs.js"></script>
+       <script src="javascripts/log.js"></script>
        <script src="javascripts/admin-user.js"></script>
+       <script src="javascripts/admin-user-modify.js"></script>
        <script src="javascripts/admin-group.js"></script>
+       <script src="javascripts/admin-group-add.js"></script>
+       <script src="javascripts/admin-group-modify.js"></script>
        <script src="javascripts/admin-project.js"></script>
+       <script src="javascripts/admin-project-add.js"></script>
+       <script src="javascripts/admin-project-modify.js"></script>
+       <script src="javascripts/admin-distribution.js"></script>
+       <script src="javascripts/admin-distribution-add.js"></script>
+       <script src="javascripts/admin-distribution-modify.js"></script>
        <script src="javascripts/admin-server.js"></script>
+       <script src="javascripts/admin-server-add.js"></script>
+       <script src="javascripts/admin-server-modify.js"></script>
+       <script src="javascripts/admin-server-remove.js"></script>
 </head>
 
 <body>
                        </div><!--/content-primary -->
 
                        <div class="content-secondary">
-                               <div data-role="collapsible" data-collapsed="true" >
-                                       <ul data-role="listview" >
-                                               <li data-role="list-divider" >BUILD</li>
-                                               <li><a href="#projects">Projects</a></li>
-                                               <li><a href="#jobs">Jobs</a></li>
-                                               <li data-role="list-divider">ADMIN</li>
-                                               <li><a href="#adminUser">User</a></li>
-                                               <li><a href="#adminGroup">Group</a></li>
-                                               <li><a href="#adminServer">Server</a></li>
-                                               <li><a href="#adminProject">Project</a></li>
-                                       </ul>
-                               </div>
+                               <ul data-role="listview" id="index-navigationBar">
+                               </ul>
                        </div>
                </div><!-- /content -->
 
                </div>
                <div data-role="content">
                        <form id="loginForm">
-                               <label for="email" style="text-align: left; font-size: 12px">Email</label>
-                               <input id="email" name="email" type="text" style="font-size: 12px"/>
-                               <label for="password" style="text-align: left; font-size: 12px">Password</label>
-                               <input id="password" name="password" type="password" style="font-size: 12px"/>
+                               <label for="login-email" style="text-align: left; font-size: 12px">Email</label>
+                               <input id="login-email" name="email" type="text" style="font-size: 12px"/>
+                               <label for="login-password" style="text-align: left; font-size: 12px">Password</label>
+                               <input id="login-password" name="password" type="password" style="font-size: 12px"/>
                                <br/>
                                <div data-role="controlgroup" data-type="horizontal">   
                                        <a href="#" data-rel="back" data-role="button" data-mini="true" >Cancel</a>
-                                       <input type="submit" value="Log in" data-mini="true"/>
+                                       <a href="#" onClick="sessionLogin()" data-role="button" data-mini="true" >Log in</a>
                                </div>
                        </form>
                </div> 
                </div>
                <div data-role="content">
                        <form id="signupForm">
-                               <label for="user_email" style="text-align: left; font-size: 12px">Email</label>
-                               <input id="user_email" name="user[email]" type="text" style="font-size: 12px"/>
-                               <label for="user_name" style="text-align: left; font-size: 12px">Name</label>
-                               <input id="user_name" name="user[name]" type="text" style="font-size: 12px"/>
-                               <label for="user_password" style="text-align: left; font-size: 12px">Password</label>
-                               <input id="user_password" name="user[password]" type="password" style="font-size: 12px"/>
-                               <label for="user_password_confirmation" style="text-align: left; font-size: 12px">Password Comfirmation</label>
-                               <input id="password_confirmation" name="user[password_confirmation]" type="password" style="font-size: 12px"/>
+                               <label for="user-email" style="text-align: left; font-size: 12px">Email</label>
+                               <input id="user-email" name="user[email]" type="text" style="font-size: 12px"/>
+                               <label for="user-name" style="text-align: left; font-size: 12px">Name</label>
+                               <input id="user-name" name="user[name]" type="text" style="font-size: 12px"/>
+                               <label for="user-password" style="text-align: left; font-size: 12px">Password</label>
+                               <input id="user-password" name="user[password]" type="password" style="font-size: 12px"/>
+                               <label for="user-password-confirmation" style="text-align: left; font-size: 12px">Password Comfirmation</label>
+                               <input id="user-password-confirmation" name="user[password_confirmation]" type="password" style="font-size: 12px"/>
                                <div data-role="controlgroup" id="applyGroupRadio">
                                </div>
                                <div data-role="controlgroup" data-type="horizontal">
                                        <a href="#" data-rel="back" data-role="button" data-mini="true" >Cancel</a>
-                                       <input type="submit" value="Sign up" data-mini="true" data-ajax="false"/>
+                                       <a href="#" onClick="userSignUp()" data-role="button" data-mini="true" data-inline="true">Sign up</a>
                                </div>
                        </form> 
                        <p id="signupErrorMessage" style="text-align: left; font-size: 12px font-color: red">
        </div><!-- /page -->
        
        <div data-role="page" id="projects" class="type-interior">
+        <div data-role="header" data-theme="a">                                                        
+            <a href=#index data-icon="home" data-iconpos="notext" data-direction="reverse" class="ui-btn-right jqm-home">Home</a>
+            <h1>DIBS Web 2.0</h1>
+            <div class="sessionInfo">
+            </div>  
+        </div><!-- /header -->
+
+               <div data-role="content" >
+                       <div class="content-primary">
+                               <div data-role="fieldcontain" style="text-align: center; font-size: 14px;">
+                                       <select id="projects-select-distribution"  data-native-menu="false" onchange="projectsQueryProjectList()">
+                                       </select>
+                               </div>
+                               <br>
+                               <div id="projects-project-list">
+                               </div>
+                       </div><!--/content-primary -->
+
+                       <div class="content-secondary">
+                               <ul data-role="listview" id="projects-navigationBar">
+                               </ul>
+                       </div>
+               </div><!-- /content -->
+
+               <div data-role="footer" class="footer-docs"  data-position="fixed">
+                       <p>&copy; S-Core</p>
+               </div><!-- /footer -->
+       </div><!-- /page -->
+
+       <div data-role="page" id="build" class="type-interior">
         <div data-role="header" data-theme="a">                                                        
             <a href=#index data-icon="home" data-iconpos="notext" data-direction="reverse" class="ui-btn-right jqm-home">Home</a>
             <h1>DIBS Web 2.0</h1>
                        <div class="content-primary">
                                <div>
                                        <div data-role="fieldcontain" style="text-align: center; font-size: 14px;">
-                                               <select id="select-distribution"  data-native-menu="false" onchange="queryProjectList(this)">
+                                               <select id="select-distribution"  data-native-menu="false" onchange="projectsQueryProjectList()">
                                                </select>
                                        </div>
                                </div>
                                <div data-role="collapsible" data-collapsed="false"  style="width: auto;" >
                                        <h3>Git Project</h3>
                                        <div align="right" style="font-size: 10px">
-                                               <a href="#" data-role="button" data-inline="true" data-mini="true" onClick='buildProject("build")'>Build</a>
-                                               <a href="#" data-role="button" data-inline="true" data-mini="true" onClick='buildProject("resolve")'>Resolve</a>
+                                               <a href="#" data-role="button" data-inline="true" data-mini="true" onClick='buildBuildProject("build")'>Build</a>
+                                               <a href="#" data-role="button" data-inline="true" data-mini="true" onClick='buildBuildProject("resolve")'>Resolve</a>
                                        </div>
                                        <div data-role="content">
                                                <table class="projectTableStyle" style="font-size: 14px" id="projectTable">
                        </div><!--/content-primary -->
 
                        <div class="content-secondary">
-                               <div data-role="collapsible" data-collapsed="true" >
-                                       <ul data-role="listview" >
-                                               <li data-role="list-divider" >BUILD</li>
-                                               <li><a href="#projects">Projects</a></li>
-                                               <li><a href="#jobs">Jobs</a></li>
-                                               <li data-role="list-divider">ADMIN</li>
-                                               <li><a href="#adminUser">User</a></li>
-                                               <li><a href="#adminGroup">Group</a></li>
-                                               <li><a href="#adminServer">Server</a></li>
-                                               <li><a href="#adminProject">Project</a></li>
-                                       </ul>
-                               </div>
+                               <ul data-role="listview" id="build-navigationBar">
+                               </ul>
                        </div>
                </div><!-- /content -->
 
 
                <div data-role="content" >
                        <div class="content-primary">
-                       <ul id="jobList" data-role="listview">
-                       </ul>
-                       <br>
-                       <button id="moreJobList" onClick="queryJobList()" >MORE</button>
-                       </div><!--/content-primary -->
+                               <div id="jobDivDistribution" data-role="fieldcontain" style="text-align: center; font-size: 14px;">
+                                       <select id="jobSelectDistribution" date-mini="true" data-native-menu="false" onchange="jobsQuerySelected()">
+                                       </select>
+                               </div>
+                               <div id="jobSearchSelect">
+                                       <fieldset data-role="controlgroup" data-type="horizontal" data-mini="true">
+                                               <input type="radio" name="radio-choice" id="search-radio-choice-1" class="jobSearch" value="ALL" checked="checked" />
+                                               <label for="search-radio-choice-1">ALL</label>
+                                               
+                                               <input type="radio" name="radio-choice" id="search-radio-choice-2" class="jobSearch" value="JOBID"  />
+                                               <label for="search-radio-choice-2">JOB ID</label>
+                                               
+                                               <input type="radio" name="radio-choice" id="search-radio-choice-3" class="jobSearch" value="USER"  />
+                                               <label for="search-radio-choice-3">USER</label>
+                                               
+                                               <input type="radio" name="radio-choice" id="search-radio-choice-4" class="jobSearch" value="GROUP"  />
+                                               <label for="search-radio-choice-4">GROUP</label>
+
+                                               <input type="radio" name="radio-choice" id="search-radio-choice-5" class="jobSearch" value="PROJECT"  />
+                                               <label for="search-radio-choice-5">PROJECT</label>
+                                               
+                                               <input type="radio" name="radio-choice" id="radio-choice-6" class="jobSearch" value="DATE"  />
+                                               <label for="radio-choice-6">DATE</label>
+                                       </fieldset>
+                               </div>
 
-                       <div class="content-secondary">
-                               <div data-role="collapsible" data-collapsed="true" >
-                                       <ul data-role="listview" >
-                                               <li data-role="list-divider" >BUILD</li>
-                                               <li><a href="#projects">Projects</a></li>
-                                               <li><a href="#jobs">Jobs</a></li>
-                                               <li data-role="list-divider">ADMIN</li>
-                                               <li><a href="#adminUser">User</a></li>
-                                               <li><a href="#adminGroup">Group</a></li>
-                                               <li><a href="#adminServer">Server</a></li>
-                                               <li><a href="#adminProject">Project</a></li>
+                               <div id="jobDivSearchInput" >
+                                       <input type="search" name="search-mini" id="jobSearchInputText" autocomplete="off" value="" data-mini="true" />
+                                       <a href="#" onClick="searchJobInput()" data-role="button" data-mini="true"  data-inline="true">Search</a>
+                                               
+                                       <ul data-role="listview" id="jobSearchList" data-inset="true">
                                        </ul>
                                </div>
+                               <div id="jobDivSearchDate" >
+                                       <input type="date" name="date" id="jobSearchDate" autocomplete="off" data-mini="true" data-inline="true" data-options='{"mode": "flipbox","noButtonFocusMode": true}' />
+                                       <a href="#" onClick="searchJobDate()" data-role="button" data-mini="true"  data-inline="true">Search</a>
+                               </div>
+                               <br>
+
+                               <ul id="jobList" data-role="listview">
+                               </ul>
+                               <br>
+
+                               <button id="moreJobList" onClick="queryJobList()" data-mini="true">MORE</button>
+                       </div><!--/content-primary -->
+
+                       <div class="content-secondary">
+                               <ul data-role="listview" id="jobs-navigationBar">
+                               </ul>
                        </div>
                </div><!-- /content -->
 
                        <p>&copy; S-Core</p>
                </div><!-- /footer -->
        </div><!-- /page -->
+
+    <div data-role="page" id="log">
+       <table id="logTable" style="border: #000000 1px solid; font-size:9pt">
+       </table> 
+       <div data-role="controlgroup" data-type="horizontal">
+               <input type="button" value="More" onClick=moreLog() / > 
+               <input type="button" value="Stop" onClick=stopLog() / > 
+       </div>
+       </div><!-- /page -->
        
        <div data-role="page" id="adminUser" class="type-interior">
         <div data-role="header" data-theme="a">                                                        
                <div data-role="content" >
                        <div class="content-primary">
                                <h2>User information</h2>
+                               <div>
                                <table class="imagetable" style="font-size: 14px" id="adminUserTable">
                                </table>
+                               </div>
                        </div><!--/content-primary -->
 
                        <div class="content-secondary">
-                               <div data-role="collapsible"  >
-                                       <ul data-role="listview" >
-                                               <li data-role="list-divider" >BUILD</li>
-                                               <li><a href="#projects">Projects</a></li>
-                                               <li><a href="#jobs">Jobs</a></li>
-                                               <li data-role="list-divider">ADMIN</li>
-                                               <li><a href="#adminUser">User</a></li>
-                                               <li><a href="#adminGroup">Group</a></li>
-                                               <li><a href="#adminServer">Server</a></li>
-                                               <li><a href="#adminProject">Project</a></li>
-                                       </ul>
-                               </div>
+                               <ul data-role="listview" id="adminUser-navigationBar">
+                               </ul>
                        </div>
                </div><!-- /content -->
 
                </div><!-- /footer -->
        </div><!-- /page -->
        
-       <div data-role="page" id="modifyUser" style="height: 800px; width: 800px">
+       <div data-role="page" id="adminUserModifyPopup" style="height: 800px; width: 800px">
                <div data-role="header" >
                        <h1>Modify User</h1>
                </div>
                        </form>
                </div>
                <div align="right" style="font-size: 10px">
-                       <a href=#adminUser onClick="modifyUser()" data-role="button" data-inline="true" data-icon="gear">Save</a>
+                       <a href=#adminUser onClick="adminUserModifyPopupModify()" data-role="button" data-inline="true" data-icon="gear">Save</a>
                </div>
        </div><!-- /page -->
 
                        <div class="content-primary">
                                <h2>Group information</h2>
                                <div align="right" style="font-size: 10px">
-                                       <a href="#addGroup" data-role="button" data-rel="dialog"  data-inline="true" data-icon="plus"> Add group </a>
+                                       <a href="#adminGroupAddPopup" data-role="button" data-rel="dialog"  data-inline="true" data-icon="plus"> Add group </a>
                                </div>
                                <div data-role="content" class="container">
                                        <table class="imagetable" style="font-size: 14px" id="groupTable">
                        </div><!--/content-primary -->
 
                        <div class="content-secondary">
-                               <div data-role="collapsible"  >
-                                       <ul data-role="listview" >
-                                               <li data-role="list-divider" >BUILD</li>
-                                               <li><a href="#projects">Projects</a></li>
-                                               <li><a href="#jobs">Jobs</a></li>
-                                               <li data-role="list-divider">ADMIN</li>
-                                               <li><a href="#adminUser">User</a></li>
-                                               <li><a href="#adminGroup">Group</a></li>
-                                               <li><a href="#adminServer">Server</a></li>
-                                               <li><a href="#adminProject">Project</a></li>
-                                       </ul>
-                               </div>
+                               <ul data-role="listview" id="adminGroup-navigationBar">
+                               </ul>
                        </div>
                </div><!-- /content -->
 
                        <div class="content-primary">
                                <h2>Server information</h2>
                                <div align="right" style="font-size: 10px">
-                                       <a href="#addServer" data-role="button"data-rel="dialog"  data-inline="true" data-icon="plus"> Add Server </a>
+                                       <a href="#adminServerAddServerInfo" data-role="button" data-rel="dialog" data-inline="true" data-icon="plus"> Add server config </a>
                                </div>
-                               <div data-role="content" class="container">
-                                       <table class="imagetable" style="font-size: 14px" id="serverTable">
-                                       </table>                                        
+                               <div data-role="collapsible" data-theme="c" data-content-theme="d" data-collapsed="false">
+                                       <h2> Server info </h2>
+                                       <ul data-role="listview" id="adminServer-ServerInfo"> 
+                                       </ul>
+                               </div>  
+                               <div align="right" style="font-size: 10px">
+                                       <a href="#adminServerAddSupportedOs" data-role="button" data-rel="dialog" data-inline="true" data-icon="plus"> Add supported os</a>
+                                       <a href="#adminServerAddOSCategory" data-role="button" data-rel="dialog" data-inline="true" data-icon="plus"> Add os category</a>
+                                       <a href="#adminServerRemoveOSCategory" data-role="button" data-rel="dialog" data-inline="true" data-icon="minus"> Remove os category</a>
+                               </div>
+                               <div data-role="collapsible" data-theme="c" data-content-theme="d" data-collapsed="false">
+                                       <h2> Supported OS </h2>
+                                       <ul data-role="listview" id="adminServer-SupportedOS"> 
+                                       </ul>
+                               </div>  
+                               <div align="right" style="font-size: 10px">
+                                       <a href="#adminServerAddRemoteBuildServer" data-role="button" data-rel="dialog" data-inline="true" data-icon="plus"> Add remote build server </a>
+                               </div>  
+                               <div data-role="collapsible" data-theme="c" data-content-theme="d" data-collapsed="false">
+                                       <h2> Remote build server </h2>
+                                       <ul data-role="listview" id="adminServer-RemoteBuildServer"> 
+                                       </ul>
                                </div>  
                        </div><!--/content-primary -->
                        <div class="content-secondary">
-                               <div data-role="collapsible"  >
-                                       <ul data-role="listview" >
-                                               <li data-role="list-divider" >BUILD</li>
-                                               <li><a href="#projects">Projects</a></li>
-                                               <li><a href="#jobs">Jobs</a></li>
-                                               <li data-role="list-divider">ADMIN</li>
-                                               <li><a href="#adminUser">User</a></li>
-                                               <li><a href="#adminGroup">Group</a></li>
-                                               <li><a href="#adminServer">Server</a></li>
-                                               <li><a href="#adminProject">Project</a></li>
-                                       </ul>
-                               </div>
+                               <ul data-role="listview" id="adminServer-navigationBar">
+                               </ul>
                        </div>
                </div><!-- /content -->
 
 
                <div data-role="content" >
                        <div class="content-primary" >
-                               <h2>Project information</h2>
-                               <div style="border:1px solid black">
+                               <h2>Build</h2>
+                               <div>
                                        <div data-role="fieldcontain" style="text-align: center; font-size: 14px;">
-                                               <select id="select-admin-distribution"  onchange="queryDistributionInfo(this)">
+                                               <select id="adminProjectDistributionSelect" data-native-menu="false" onchange="adminProjectSetProjectInfo()">
                                                </select>
                                        </div>
-                                       <div style="margin-left: 20px; margin-right: 20px">
-                                                <ul data-role="listview" data-theme="d" data-divider-theme="d">
-                                                        <li data-role="list-divider"> Package server url</li>
-                                                        <li style="font-size: 12px" id="ProjectTable:packageServerUrl"></li>
-                                                        <li data-role="list-divider"> Package server address</li>
-                                                        <li style="font-size: 12px" id="ProjectTable:packageServerAddress"></li> 
-                                                        <li data-role="list-divider"> Distribution status</li>
-                                                        <li style="font-size: 12px;"id="ProjectTable:distributionStatus"></li>
-                                                </ul>                     
-                                       </div>
-                                       <br> 
-                                       <div align="right" style="font-size: 10px">
-                                               <a href="#addDistribution" data-role="button" data-rel="dialog" data-inline="true" data-icon="plus"> Add distribution</a>
-                                               <a href="#modifyDistribution" data-role="button" data-rel="dialog" data-inline="true" data-icon="gear"> Modify distribution</a>
-                                               <a href="javascript:removeDistribution()" data-role="button" data-rel="dialog" data-inline="true" data-icon="minus"> Remove distribution</a>
-                                       </div>
                                </div>
-                               <br><br> 
-                               <div style="border:1px solid black">
+                               <div>
                                        <div style="margin-left: 20px; margin-right: 20px; margin-top: 10px">
-                                               <ul data-role="listview" data-theme="d" data-divider-theme="d">
-                                                       <li data-role="list-divider"> Git project </li>
+                                               <div data-role="collapsible" data-theme="b" data-content-theme="c" data-collapsed="false" > 
+                                                       <h2> Git project </h2>
                                                        <div align="right" style="font-size: 10px">
                                                                <a href="#addGitProject"  data-role="button" data-rel="dialog"  data-inline="true" data-icon="plus"> Add git project</a>
                                                        </div>
                                                        <br> 
                                                        <table class="imagetable" id="adminProjectTable" style="font-size: 14px">
                                                        </table>
-                                                       <br>
-                                                       <li data-role="list-divider"> Binary project </li>
+                                               </div>
+                                               <br>
+                                               <div data-role="collapsible" data-theme="b" data-content-theme="c" data-collapsed="false" > 
+                                                       <h2> Binary project </h2>
                                                        <div align="right" style="font-size: 10px">
                                                                <a href="#addBinaryProject"  data-role="button"data-rel="dialog"  data-inline="true" data-icon="plus"> Add binary project</a>
                                                        </div>
                                                        <table class="imagetable" id="adminBinaryProjectTable" style="font-size: 14px">
                                                        </table>
-                                                       <br> 
-                                               </ul>           
+                                               </div>
                                        </div>
                                </div>
                        </div><!--/content-primary -->
 
                        <div class="content-secondary">
-                               <div data-role="collapsible"  >
-                                       <ul data-role="listview" >
-                                               <li data-role="list-divider" >BUILD</li>
-                                               <li><a href="#projects">Projects</a></li>
-                                               <li><a href="#jobs">Jobs</a></li>
-                                               <li data-role="list-divider">ADMIN</li>
-                                               <li><a href="#adminUser">User</a></li>
-                                               <li><a href="#adminGroup">Group</a></li>
-                                               <li><a href="#adminServer">Server</a></li>
-                                               <li><a href="#adminProject">Project</a></li>
-                                       </ul>
+                               <ul data-role="listview" id="adminProject-navigationBar">
+                               </ul>
+                       </div>
+               </div><!-- /content -->
+
+               <div data-role="footer" class="footer-docs"  data-position="fixed">
+                       <p>&copy; S-Core</p>
+               </div><!-- /footer -->
+       </div><!-- /page -->            
+
+       <div data-role="page" id="adminDistribution" class="type-interior">
+        <div data-role="header" data-theme="a">                                                        
+            <a href=#index data-icon="home" data-iconpos="notext" data-direction="reverse" class="ui-btn-right jqm-home">Home</a>
+            <h1>DIBS Web 2.0</h1>
+            <div class="sessionInfo">
+            </div>  
+        </div><!-- /header -->
+
+               <div data-role="content" >
+                       <div class="content-primary" >
+                               <h2>Distribution information</h2>
+                               <div>
+                                       <div data-role="fieldcontain" style="text-align: center; font-size: 14px;">
+                                               <select id="adminDistributionSelect" data-native-menu="false" onchange="adminDistributionSetInfo()">
+                                               </select>
+                                       </div>
+                                       <div data-role="collapsible" data-theme="c" data-content-theme="d" data-collapsed="false" > 
+                                               <h2> Package server url </h2>
+                                               <p id="adminDistribution:packageServerUrl" style="font-size: 14px"> </p>
+                                       </div>
+                                       <div data-role="collapsible" data-theme="c" data-content-theme="d" data-collapsed="false" > 
+                                               <h2> Package server address </h2>
+                                               <p id="adminDistribution:packageServerAddress" style="font-size: 14px"> </p>
+                                       </div>
+                                       <div data-role="collapsible" data-theme="c" data-content-theme="d" data-collapsed="false" > 
+                                               <h2> Status </h2>
+                                               <p id="adminDistribution:distributionStatus" style="font-size: 14px"> </p>
+                                       </div>
+                                       <div data-role="collapsible" data-theme="c" data-content-theme="d" data-collapsed="false" > 
+                                               <h2> Description </h2>
+                                               <p id="adminDistribution:distributionDescription" style="font-size: 14px"> </p>
+                                       </div>
+                                       <div data-role="collapsible" data-theme="c" data-content-theme="d" data-collapsed="false" >
+                                               <h2> Sync package server </h2>
+                                               <div id="adminDistribution-SyncPackageServer">
+                                               </div>
+                                       </div>  
+                                       <br> 
+                                       <div align="right" style="font-size: 10px">
+                                               <a href="#addDistribution" data-role="button" data-rel="dialog" data-inline="true" data-icon="plus"> Add distribution</a>
+                                               <a href="#modifyDistribution" data-role="button" data-rel="dialog" data-inline="true" data-icon="gear"> Modify distribution</a>
+                                               <a href="javascript:adminDistributionRemove()" data-role="button" data-rel="dialog" data-inline="true" data-icon="minus"> Remove distribution</a>
+                                       </div>
                                </div>
+                       </div><!--/content-primary -->
+
+                       <div class="content-secondary">
+                               <ul data-role="listview" id="adminDistribution-navigationBar">
+                               </ul>
                        </div>
                </div><!-- /content -->
 
                </div>
                <div data-role="content">
                        <form method="post" style="font-size: 12px">
-                               <label for="popup:addDistributionName"> Distirbution name </label>
-                               <input type="text" id="popup:addDistributionName"/>
+                               <label for="adminDistributionAddPopup-DistirubtionName"> Distirbution name </label>
+                               <input type="text" id="adminDistributionAddPopup-DistirubtionName"/>
+                               <br>
+                               <label for="adminDistributionAddPopup-PackageServerUrl"> Package server url </label>
+                               <input type="text" id="adminDistributionAddPopup-PackageServerUrl"/>
                                <br>
-                               <label for="popup:addPackageServerUrl"> Package server url </label>
-                               <input type="text" id="popup:addPackageServerUrl"/>
+                               <label for="adminDistributionAddPopup-PackageServerAddress"> Package server address </label>
+                               <input type="text" id="adminDistributionAddPopup-PackageServerAddress"/>
                                <br>
-                               <label for="popup:addPackageServerAddress"> Package server address </label>
-                               <input type="text" id="popup:addPackageServerAddress"/>
-                               <label for="popup:addDistributionStatus"> Distribution status </label>
-                               <select id="popup:addDistributionStatus">
+                               <label for="adminDistributionAddPopup-DistributionStatus"> Distribution status </label>
+                               <select id="adminDistributionAddPopup-DistributionStatus">
                                        <option value="OPEN" selected="selected">OPEN</option>
                                        <option value="CLOSE">CLOSE</option>
                                </select>
+                               <br>
+                               <label for="adminDistributionAddPopup-DistributionDescription"> Description </label>
+                               <input type="text" id="adminDistributionAddPopup-DistributionDescription"/>
+                               <br>
+                               <div>
+                                       <h3> Sync package server </h3>
+                                       <label for="adminDistributionAddPopup-SyncPackageServer-Url"> Url </label>
+                                       <input type="text" id="adminDistributionAddPopup-SyncPackageServer-Url"/>
+                                       <label for="adminDistributionAddPopup-SyncPackageServer-period"> Period </label>
+                                       <input type="text" id="adminDistributionAddPopup-SyncPackageServer-period"/>
+                                       <label for="adminDistributionAddPopup-SyncPackageServer-Description"> Description </label>
+                                       <input type="text" id="adminDistributionAddPopup-SyncPackageServer-Description"/>
+                               </div>
                        </form>
                </div>
                <div align="right" style="font-size: 10px">
-                       <a href=#adminProject onClick="addDistribution()" data-role="button" data-inline="true" data-icon="gear">Save</a>
+                       <a href=# onClick="adminDistributionAdd()" data-role="button" data-inline="true" data-icon="gear">Save</a>
                </div>
        </div><!-- /page -->
        
                </div>
                <div data-role="content">
                        <form method="post" style="font-size: 12px">
-                               <label for="popup:modifyPackageServerUrl"> Package server url </label>
-                               <input type="text" id="popup:modifyPackageServerUrl"/>
+                               <label for="adminDistributionModifyPopup-PackageServerUrl"> Package server url </label>
+                               <input type="text" id="adminDistributionModifyPopup-PackageServerUrl"/>
                                <br>
-                               <label for="popup:modifyPackageServerAddress"> Package server address </label>
-                               <input type="text" id="popup:modifyPackageServerAddress"/>
+                               <label for="adminDistributionModifyPopup-PackageServerAddress"> Package server address </label>
+                               <input type="text" id="adminDistributionModifyPopup-PackageServerAddress"/>
                                <br>
-                               <label for="popup:modifyDistributionStatus"> Distribution status </label>
-                               <select id="popup:modifyDistributionStatus">
-                                       <option value="OPEN">OPEN</option>
-                                       <option value="CLOSE">CLOSE</option>
+                               <label for="adminDistributionModifyPopup-Status"> Distribution status </label>
+                               <select id="adminDistributionModifyPopup-Status">
                                </select>
+                               <br>
+                               <label for="adminDistributionModifyPopup-Description"> Description </label>
+                               <input type="text" id="adminDistributionModifyPopup-Description"/>
+                               <br>
+                               <div>
+                                       <h3> Sync package server </h3>
+                                       <label for="adminDistributionModifyPopup-SyncPackageServer-Url"> Url </label>
+                                       <input type="text" id="adminDistributionModifyPopup-SyncPackageServer-Url"/>
+                                       <label for="adminDistributionModifyPopup-SyncPackageServer-Period"> Period </label>
+                                       <input type="text" id="adminDistributionModifyPopup-SyncPackageServer-Period"/>
+                                       <label for="adminDistributionModifyPopup-SyncPackageServer-Description"> Description </label>
+                                       <input type="text" id="adminDistributionModifyPopup-SyncPackageServer-Description"/>
+                               </div>
                        </form>
                </div>
                <div align="right" style="font-size: 10px">
-                       <a href=#adminProject onClick="modifyDistribution()" data-role="button" data-inline="true" data-icon="gear">Save</a>
+                       <a href=# onClick="adminDistributionModify()" data-role="button" data-inline="true" data-icon="gear">Save</a>
                </div>
        </div>
        
                        </form>
                </div>
                <div align="right" style="font-size: 10px">
-                       <a href="#adminProject" onClick="addGitProject()" data-role="button" data-inline="true" data-icon="gear">Save</a>
+                       <a href="#adminProject" onClick="adminProjectAddGitProject()" data-role="button" data-inline="true" data-icon="gear">Save</a>
                </div>
        </div><!-- /page -->
        
                                        </select>
                                </div>
                                <br>
+                               <label for="popup:addBinaryProjectPassword"> Project password</label>
+                               <input type="text" id="popup:addBinaryProjectPassword"/>
+                               <br>
                                <label for="popup:addBinaryPackageName"> Pakcage name</label>
                                <input type="text" id="popup:addBinaryPackageName"/>
                        </form>
                </div>
                <div align="right" style="font-size: 10px">
-                       <a href="#adminProject" onClick="addBinaryProject()" data-role="button" data-inline="true" data-icon="gear">Save</a>
+                       <a href="#" onClick="adminProjectAddBinaryProject()" data-role="button" data-inline="true" data-icon="gear">Save</a>
                </div>
        </div><!-- /page -->
        
                </div>
                <div data-role="content">
                        <form method="post" style="font-size: 12px">
-                               <label for="popup:modifyBinaryOldProjectName"> Project name </label>
-                               <input type="text" id="popup:modifyBinaryOldProjectName" disabled="disabled"/> 
+                               <input type="hidden" id="popup:modifyBinaryOldProjectName" disabled="disabled"/> 
                                <br>
                                <label for="popup:modifyBinaryNewProjectName"> New Project name </label>
                                <input type="text" id="popup:modifyBinaryNewProjectName"/> 
                        </form>
                </div>
                <div align="right" style="font-size: 10px">
-                       <a href="javascript:modifyBinaryProject()" data-role="button" data-inline="true" data-icon="gear">Save</a>
+                       <a href="#" onClick="adminProjectModfyBinaryProject()" data-role="button" data-inline="true" data-icon="gear">Save</a>
                </div>
        </div><!-- /page -->
 
                </div>
                <div data-role="content">
                        <form method="post" style="font-size: 12px">
-                               <label for="popup:modifyGitOldProjectName"> Project name </label>
-                               <input type="text" id="popup:modifyGitOldProjectName" disabled="disabled"/> 
+                               <input type="hidden" id="popup:modifyGitOldProjectName" disabled="disabled"/> 
                                <br>
                                <label for="popup:modifyGitNewProjectName"> New Project name </label>
                                <input type="text" id="popup:modifyGitNewProjectName"/> 
                        </form>
                </div>
                <div align="right" style="font-size: 10px">
-                       <a href="javascript:modifyGitProject()" data-role="button" data-inline="true" data-icon="gear">Save</a>
+                       <a href="#" onClick="adminProjectModfyGitProject()" data-role="button" data-inline="true" data-icon="gear">Save</a>
                </div>
        </div><!-- /page -->
 
-       <div data-role="page" id="addGroup" style="height: 800px; width: 800px">
+       <div data-role="page" id="adminGroupAddPopup" style="height: 800px; width: 800px">
                <div data-role="header" >
                        <h1>Add Group</h1>
                </div>
                <div data-role="content">
                        <form method="post" style="font-size: 12px">
-                               <label for="popup:groupName"> Group name </label>
-                               <input type="text" id="popup:addGroupName"/>
+                               <label for="adminGroupAddPopup-Name"> Group name </label>
+                               <input type="text" id="adminGroupAddPopup-Name"/>
+                               <br>
+                               <div data-role="fieldcontain">
+                                       <label for="adminGroupAddPopup-Admin"> Admin Flag </label>
+                                       <br>
+                                       <select id="adminGroupAddPopup-Admin">
+                                               <option value="TRUE">True</option>
+                                               <option value="FALSE" selected="selected">False</option>
+                                       </select>
+                               </div>
+                               <br>
+                               <label for="adminGroupAddPopup-Description"> Description </label>
+                               <input type="text" id="adminGroupAddPopup-Description"/>
                                <br>
                                <div data-role="fieldcontain">
                                        <fieldset data-role="controlgroup" data-mini="true" id="popup:addProjectCheckbox">
                        </form>
                </div>
                <div align="right" style="font-size: 10px">
-                       <a href=#adminGroup onClick="addGroup()" data-role="button" data-inline="true" data-icon="gear">Save</a>
+                       <a href=# onClick="adminGroupAddGroup()" data-role="button" data-inline="true" data-icon="gear">Save</a>
                </div>
        </div><!-- /page -->
        
-       <div data-role="page" id="modifyGroup" style="height: 800px; width: 800px">
+       <div data-role="page" id="adminGroupModifyPopup" style="height: 800px; width: 800px">
                <div data-role="header" >
                        <h1>modify Group</h1>
                </div>
                <div data-role="content" data-role="fieldcontain">
                        <form method="post" style="font-size: 12px">
-                               <label for="popup:modifyOldGroupName"> Old group name </label>
-                               <input type="text" id="popup:modifyOldGroupName" disabled="disabled"/>
-                               <label for="popup:modifyGroupName"> New group name </label>
-                               <input type="text" id="popup:modifyGroupName"/>
+                               <label for="adminGroupModifyPopup-Name"> Old group name </label>
+                               <input type="text" id="adminGroupModifyPopup-Name" disabled="disabled"/>
+                               <label for="adminGroupModifyPopup-NewName"> New group name </label>
+                               <input type="text" id="adminGroupModifyPopup-NewName"/>
+                               <br>
+                               <div data-role="fieldcontain">
+                                       <label for="adminGroupModifyPopup-Admin"> Admin Flag </label>
+                                       <br>
+                                       <select id="adminGroupModifyPopup-Admin">
+                                       </select>
+                               </div>
+                               <br>
+                               <label for="adminGroupModifyPopup-Description"> Description </label>
+                               <input type="text" id="adminGroupModifyPopup-Description"/>
                                <br>
                                <div>
                                        <fieldset data-role="controlgroup" data-mini="true" data-role="fieldcontain" id="popup:modifyProjectSelect">
                        </form>
                </div>
                <div align="right" style="font-size: 10px">
-                       <a href=#adminGroup onClick="modifyGroup()" data-role="button" data-inline="true" data-icon="gear">Save</a>
+                       <a href="#" onClick="adminGroupModifyGroup()" data-role="button" data-inline="true" data-icon="gear">Save</a>
                </div>
        </div><!-- /page -->
        
-       <div data-role="page" id="addServer" style="height: 800px; width: 800px">
+       <div data-role="page" id="adminServerAddRemoteBuildServer" style="height: 800px; width: 800px">
                <div data-role="header" >
-                       <h1>Add server </h1>
+                       <h1>Add remote build server</h1>
                </div>
                <div data-role="content" data-role="fieldcontain">
                        <form method="post" style="font-size: 12px">
-                               <label for="popup:addServerAddress"> Add server address </label>
-                               <input type="text" id="popup:addServerAddress"/>
+                               <label for="adminServer-AddRemoteBuildServer-Address"> Server address </label>
+                               <input type="text" id="adminServer-AddRemoteBuildServer-Address"/>
+                               <br>
+                               <label for="adminServer-AddRemoteBuildServer-Description"> Server description</label>
+                               <input type="text" id="adminServer-AddRemoteBuildServer-Description"/>
                        </form>
                </div>
                <div align="right" style="font-size: 10px">
-                       <a href=#adminServer onClick="addServer()" data-role="button" data-inline="true" data-icon="gear">Save</a>
+                       <a href=# onClick="adminServerAddRemoteBuildServer()" data-role="button" data-inline="true" data-icon="gear">Save</a>
                </div>
        </div><!-- /page -->
        
-       <div data-role="page" id="modifyServer" style="height: 800px; width: 800px">
-               <div data-role="header" >
+       <div data-role="page" id="adminServerModifyRemoteBuildServer" style="height: 800px; width: 800px"> <div data-role="header" >
                        <h1>Modify server </h1>
                </div>
                <div data-role="content" data-role="fieldcontain">
                        <form method="post" style="font-size: 12px">
-                               <label for="popup:modifyServerOldAddress"> Old server address </label>
-                               <input type="text" id="popup:modifyServerOldAddress" disabled="disabled"/>
+                               <input type="hidden" id="adminServer-modifyRemoteBuildServer-OldAddress"/>
+                               <br>
+                               <label for="adminServer-modifyRemoteBuildServer-newAddress"> New server address </label>
+                               <input type="text" id="adminServer-modifyRemoteBuildServer-newAddress"/>
+                               <br>
+                               <label for="adminServer-modifyRemoteBuildServer-description"> Description </label>
+                               <input type="text" id="adminServer-modifyRemoteBuildServer-description"/>
+                       </form>
+               </div>
+               <div align="right" style="font-size: 10px">
+                       <a href=# onClick="adminServerModifyRemoteBuildServer()" data-role="button" data-inline="true" data-icon="gear">Save</a>
+                       <a href=# onClick="adminServerRemoveRemoteBuildServer()" data-role="button" data-inline="true" data-icon="minus">Delete</a>
+               </div>
+       </div><!-- /page -->
+
+       <div data-role="page" id="userModifyPopup" style="height: 800px; width: 800px"> 
+               <div data-role="header" >
+                       <h1>User information</h1>
+               </div>
+               <div data-role="content" data-role="fieldcontain">
+                       <form method="post" style="font-size: 12px">
+                               <label for="popup-user-info-email">Email</label>
+                               <input type="text" id="popup-user-info-email" disabled="disabled"/>
+                               <br>
+                               <label for="popup-user-info-name">Name</label>
+                               <input type="text" id="popup-user-info-name"/>
+                               <br>
+                               <label for="popup-user-info-password">Password</label>
+                               <input type="password" id="popup-user-info-password"/>
                                <br>
-                               <label for="popup:modifyServerNewAddress"> New server address </label>
-                               <input type="text" id="popup:modifyServerNewAddress"/>
+                               <label for="popup-user-info-password-confirm">Password confirmation</label>
+                               <input type="password" id="popup-user-info-password-confirm"/>
                        </form>
                </div>
                <div align="right" style="font-size: 10px">
-                       <a href=#adminServer onClick="modifyServer()" data-role="button" data-inline="true" data-icon="gear">Save</a>
+                       <a href="#" onClick="userModifyUserInfo()" data-role="button" data-inline="true" data-icon="gear">Save</a>
                </div>
        </div><!-- /page -->
        
-       <div data-role="page" id="common" style="height: 800px; width: 800px">
-               <div data-role="header" id="header" data-theme="a">
-                       <a href=#index data-icon="home" data-iconpos="notext" data-direction="reverse" class="ui-btn-right jqm-home">Home</a>
-                       <h1>DIBS Web 2.0</h1>
-                       <div data-role="controlgroup" data-type="horizontal" class="ui-btn-right ui-btn-corner-all">
-                               <a href=#signup data-direction="reverse" data-role="button" data-rel="dialog">Sign up</a>
-                               <a href=#login data-direction="reverse" data-role="button" data-rel="dialog">Log in</a>
-                       </div>
+       <div data-role="page" id="adminServerAddSupportedOs" style="height: 800px; width: 800px"> 
+               <div data-role="header" >
+                       <h1>Add supported os</h1>
                </div>
-               <div data-role="footer" id="footer" data-position="fixed">
-                       <p>&copy; S-Core</p>
-               </div><!-- /footer -->
-       </div>
+               <div data-role="content" data-role="fieldcontain">
+                       <form method="post" style="font-size: 12px">
+                               <label for="adminServer-AddSupportedOs-OsName">Supported os name</label>
+                               <input type="text" id="adminServer-AddSupportedOs-OsName"/>
+                               <br>
+                               <div data-role="fieldcontain">
+                                       <label for="adminServer-AddSupportedOs-OsCategory"> Os category </label>
+                                       <br>
+                                       <select id="adminServer-AddSupportedOs-OsCategory">
+                                       </select>
+                               </div>
+                       </form>
+               </div>
+               <div align="right" style="font-size: 10px">
+                       <a href="#" onClick="adminServerAddSupportedOs()" data-role="button" data-inline="true" data-icon="gear">Save</a>
+               </div>
+       </div><!-- /page -->
+
+       <div data-role="page" id="adminServerModifySupportedOS" style="height: 800px; width: 800px"> 
+               <div data-role="header" >
+                       <h1>Modify supported os</h1>
+               </div>
+               <div data-role="content" data-role="fieldcontain">
+                       <form method="post" style="font-size: 12px">
+                               <input type="hidden" id="adminServer-ModifySupportedOs-OldOsName" disabled="disabled"/>
+                               <label for="adminServer-ModifySupportedOs-OsName">Supported os name</label>
+                               <input type="text" id="adminServer-MoidfySupportedOs-OsName"/>
+                               <br>
+                               <div data-role="fieldcontain">
+                                       <label for="adminServer-ModifySupportedOs-OsCategory"> Os category </label>
+                                       <br>
+                                       <select id="adminServer-ModifySupportedOs-OsCategory">
+                                       </select>
+                               </div>
+                       </form>
+               </div>
+               <div align="right" style="font-size: 10px">
+                       <a href="#" onClick="adminServerRemoveSupportedOS()" data-role="button" data-inline="true" data-icon="minus">Remove</a>
+                       <a href="#" onClick="adminServerModifySupportedOS()" data-role="button" data-inline="true" data-icon="gear">Save</a>
+               </div>
+       </div><!-- /page -->
+
+       <div data-role="page" id="adminServerAddOSCategory" style="height: 800px; width: 800px"> 
+               <div data-role="header" >
+                       <h1>Add os category</h1>
+               </div>
+               <div data-role="content" data-role="fieldcontain">
+                       <form method="post" style="font-size: 12px">
+                               <label for="adminServer-AddOsCategory-Name">OS category name</label>
+                               <input type="text" id="adminServer-AddOsCategory-Name"/>
+                       </form>
+               </div>
+               <div align="right" style="font-size: 10px">
+                       <a href="#" onClick="adminServerAddOSCategory()" data-role="button" data-inline="true" data-icon="gear">Save</a>
+               </div>
+       </div><!-- /page -->
+
+       <div data-role="page" id="adminServerRemoveOSCategory" style="height: 800px; width: 800px"> 
+               <div data-role="header" >
+                       <h1>Add os category</h1>
+               </div>
+               <div data-role="content" data-role="fieldcontain">
+                       <form method="post" style="font-size: 12px">
+                               <div data-role="fieldcontain">
+                                       <label for="adminServer-RemoveOSCategory-CategorySelect"> Os category </label>
+                                       <br>
+                                       <select id="adminServer-RemoveOSCategory-CategorySelect">
+                                       </select>
+                               </div>
+                       </form>
+               </div>
+               <div align="right" style="font-size: 10px">
+                       <a href="#" onClick="adminServerRemoveOSCategory()" data-role="button" data-inline="true" data-icon="minus">Delete</a>
+               </div>
+       </div><!-- /page -->
+
+       <div data-role="page" id="adminServerAddServerInfo" style="height: 800px; width: 800px"> <div data-role="header" >
+                       <h1>Add server config </h1>
+               </div>
+               <div data-role="content" data-role="fieldcontain">
+                       <form method="post" style="font-size: 12px">
+                               <label for="adminServer-addServerInfo-property"> Property</label>
+                               <input type="text" id="adminServer-addServerInfo-property"/>
+                               <br>
+                               <label for="adminServer-addServerInfo-value"> Value </label>
+                               <input type="text" id="adminServer-addServerInfo-value"/>
+                       </form>
+               </div>
+               <div align="right" style="font-size: 10px">
+                       <a href=# onClick="adminServerAddServerInfo()" data-role="button" data-inline="true" data-icon="gear">Save</a>
+               </div>
+       </div><!-- /page -->
+
+       <div data-role="page" id="adminServerModifyServerInfo" style="height: 800px; width: 800px"> <div data-role="header" >
+                       <h1>Modify server config </h1>
+               </div>
+               <div data-role="content" data-role="fieldcontain">
+                       <form method="post" style="font-size: 12px">
+                               <label for="adminServer-modifyServerInfo-property"> Property</label>
+                               <input type="text" id="adminServer-modifyServerInfo-property" disabled="disabled"/>
+                               <br>
+                               <label for="adminServer-modifyServerInfo-value"> Value </label>
+                               <input type="text" id="adminServer-modifyServerInfo-value"/>
+                       </form>
+               </div>
+               <div align="right" style="font-size: 10px">
+                       <a href=# onClick="adminServerModifyServerInfo()" data-role="button" data-inline="true" data-icon="gear">Save</a>
+                       <a href=# onClick="adminServerRemoveServerInfo()" data-role="button" data-inline="true" data-icon="minus">Delete</a>
+               </div>
+       </div><!-- /page -->
+
 </body>
 
        <script src="javascripts/post-process.js"></script>
diff --git a/dibs-web/public/javascripts/admin-distribution-add.js b/dibs-web/public/javascripts/admin-distribution-add.js
new file mode 100644 (file)
index 0000000..e4d7623
--- /dev/null
@@ -0,0 +1,34 @@
+function adminDistributionAdd() {
+       var changeInfoList = [];
+       var changeInfoItem;
+       var name = document.getElementById("adminDistributionAddPopup-DistirubtionName").value;
+       var url = document.getElementById("adminDistributionAddPopup-PackageServerUrl").value;
+       var address = document.getElementById("adminDistributionAddPopup-PackageServerAddress").value;
+       var description = document.getElementById("adminDistributionAddPopup-DistributionDescription").value;
+       var distStatus = $("#adminDistributionAddPopup-DistributionStatus option:selected").val();
+
+       var sync_pkg_svr_url = document.getElementById("adminDistributionAddPopup-SyncPackageServer-Url").value;
+       var sync_pkg_svr_period = document.getElementById("adminDistributionAddPopup-SyncPackageServer-period").value;
+       var sync_pkg_svr_description = document.getElementById("adminDistributionAddPopup-SyncPackageServer-Description").value;
+
+       if(name == "" || url == "" || address == ""){
+               alert("You must input full data");
+               return;
+       }
+
+       changeInfoItem = {"DistributionName":name, "URL":url, "Address":address, "DistStatus":distStatus, "Description":description, "SyncPkgSvrUrl":sync_pkg_svr_url, "SyncPkgSvrPeriod":sync_pkg_svr_period, "SyncPkgSvrDescription":sync_pkg_svr_description};
+       changeInfoList.push(changeInfoItem);
+       
+       addDistribution(changeInfoList, function () {
+               document.getElementById("adminDistributionAddPopup-DistirubtionName").value = "";
+               document.getElementById("adminDistributionAddPopup-PackageServerUrl").value = "";
+               document.getElementById("adminDistributionAddPopup-PackageServerAddress").value = "";
+               document.getElementById("adminDistributionAddPopup-DistributionDescription").value = "";
+               document.getElementById("adminDistributionAddPopup-SyncPackageServer-Url").value = "";
+               document.getElementById("adminDistributionAddPopup-SyncPackageServer-period").value = "";
+               document.getElementById("adminDistributionAddPopup-SyncPackageServer-Description").value = "";
+
+               $.mobile.changePage("#adminDistribution"); 
+       });
+}
+
diff --git a/dibs-web/public/javascripts/admin-distribution-modify.js b/dibs-web/public/javascripts/admin-distribution-modify.js
new file mode 100644 (file)
index 0000000..5928d88
--- /dev/null
@@ -0,0 +1,82 @@
+function adminDistributionModifyPopupInit() {
+       var distName = $("#adminDistributionSelect option:selected").val();
+       var packageServerUrl = document.getElementById("adminDistribution:packageServerUrl").innerHTML;
+       var packageServeraddress = document.getElementById("adminDistribution:packageServerAddress").innerHTML;
+       var serverStatusText = document.getElementById("adminDistribution:distributionStatus").innerHTML;
+       var serverDescription = document.getElementById("adminDistribution:distributionDescription").innerHTML;
+
+       var syncPkgSvrUrl = document.getElementById("adminDistribution-SyncPackageServer-Url").innerHTML;
+       var syncPkgSvrPeriod = document.getElementById("adminDistribution-SyncPackageServer-period").innerHTML;
+       var syncPkgSvrDescription = document.getElementById("adminDistribution-SyncPackageServer-Description").innerHTML;
+
+       if (syncPkgSvrUrl) {
+               syncPkgSvrUrl = syncPkgSvrUrl.replace("Package server url : ", "");
+       } else {
+               syncPkgSvrUrl = ""
+       }
+
+       if (syncPkgSvrPeriod) {
+               syncPkgSvrPeriod = syncPkgSvrPeriod.replace("Period : ", "");
+       } else {
+               syncPkgSvrPeriod = ""
+       }
+       if (syncPkgSvrDescription) {
+               syncPkgSvrDescription = syncPkgSvrDescription.replace("Description : ", "");
+       } else {
+               syncPkgSvrDescription = ""
+       }
+
+       document.getElementById('adminDistributionModifyPopup-PackageServerUrl').value = packageServerUrl;
+       document.getElementById('adminDistributionModifyPopup-PackageServerAddress').value = packageServeraddress;
+       document.getElementById('adminDistributionModifyPopup-Description').value = serverDescription;
+       document.getElementById('adminDistributionModifyPopup-SyncPackageServer-Url').value = syncPkgSvrUrl;
+       document.getElementById('adminDistributionModifyPopup-SyncPackageServer-Period').value = syncPkgSvrPeriod;
+       document.getElementById('adminDistributionModifyPopup-SyncPackageServer-Description').value = syncPkgSvrDescription;
+
+       $("#adminDistributionModifyPopup-Status").empty();
+       var option; 
+       if(serverStatusText.toUpperCase() == "OPEN") {
+               option = '<option value="OPEN" selected="selected">OPEN</option>';
+       } else {
+               option = '<option value="OPEN">OPEN</option>';
+       }
+       $("#adminDistributionModifyPopup-Status").append(option);
+       
+       if(serverStatusText.toUpperCase() == "CLOSE") {
+               option = '<option value="CLOSE" selected="selected">CLOSE</option>';
+       } else {
+               option = '<option value="CLOSE">FALSE</option>';
+       }
+       $("#adminDistributionModifyPopup-Status").append(option);
+       $("#adminDistributionModifyPopup-Status").selectmenu("refresh");
+}
+
+function adminDistributionModify() {
+       var changeInfoList = [];
+       var changeInfoItem;
+       var distName = $("#adminDistributionSelect option:selected").val();
+       var url = document.getElementById("adminDistributionModifyPopup-PackageServerUrl").value;
+       var address = document.getElementById("adminDistributionModifyPopup-PackageServerAddress").value;
+       var description = document.getElementById("adminDistributionModifyPopup-Description").value;
+       var distStatus = $("#adminDistributionModifyPopup-Status option:selected").val();
+       var syncPkgSvrUrl = document.getElementById("adminDistributionModifyPopup-SyncPackageServer-Url").value;
+       var syncPkgSvrPeriod = document.getElementById("adminDistributionModifyPopup-SyncPackageServer-Period").value;
+       var syncPkgSvrDescription = document.getElementById("adminDistributionModifyPopup-SyncPackageServer-Description").value;
+
+       if(distName == "" || url == "" || address == ""){
+               alert("You must input full data");
+               return;
+       }
+
+       if(distStatus == "") {
+               distStatus = "OPEN";
+       }
+
+       changeInfoItem = {"DistributionName":distName, "URL":url, "Address":address, "DistStatus":distStatus, "Description":description, "SyncPkgSvrUrl":syncPkgSvrUrl, "SyncPkgSvrPeriod":syncPkgSvrPeriod, "SyncPkgSvrDescription":syncPkgSvrDescription};
+       changeInfoList.push(changeInfoItem);
+       
+       modifyDistribution( changeInfoList, function () {
+               $.mobile.changePage("#adminDistribution"); 
+       });
+}
+
diff --git a/dibs-web/public/javascripts/admin-distribution.js b/dibs-web/public/javascripts/admin-distribution.js
new file mode 100644 (file)
index 0000000..1d550f1
--- /dev/null
@@ -0,0 +1,83 @@
+function adminDistributionInit() {
+       queryAllDistribution( function (xml) {
+               var oldDistName = $("#adminDistributionSelect option:selected").val();
+               var find = false;
+               var distributionList = $(xml).find("Data").find("DistributionName");
+
+               // remove old select options
+               $("#adminDistributionSelect").empty();
+
+               distributionList.each(function(){
+                       var name = $(this).text();
+       
+                       if( oldDistName == name ) {
+                               $("#adminDistributionSelect").append("<option value=\'"+name+"\' selected=\"selected\">"+name+"</option>");
+                               find = true;
+                               
+                       } else {
+                               $("#adminDistributionSelect").append("<option value=\'"+name+"\'>"+name+"</option>");
+                       }
+               });
+       
+               /* default distribution selection */
+               if(!find) {
+                       $("#adminDistributionSelect option:eq(0)").attr("selected", "selected");
+               }
+
+               $("#adminDistributionSelect").selectmenu('refresh');
+
+               // set distribution info
+               adminDistributionSetInfo();
+       });
+}
+
+function adminDistributionSetInfo() {
+       var distName = $("#adminDistributionSelect option:selected").val();
+
+       queryDistributionInfo( distName, function (xml) {
+               var data = $(xml).find("Data").find("DistributionInfo");
+               var syncPackageServer = $(xml).find("Data").find("SyncPackageServer");
+               var name = data.find("DistributionName").text();
+               var url = data.find("PackageServerUrl").text();
+               var address = data.find("PackageServerAddress").text();
+               var distStatus = data.find("Status").text();
+               var distDescription = data.find("Description").text();
+
+               $("#adminDistribution\\:packageServerUrl").text(url);
+               $("#adminDistribution\\:packageServerAddress").text(address);
+               $("#adminDistribution\\:distributionStatus").text(distStatus);
+               $("#adminDistribution\\:distributionDescription").text(distDescription);
+
+               adminDistributionInitSyncPackageServer(syncPackageServer);
+       });
+}
+
+function adminDistributionRemove() {
+       var changeInfoList = [];
+       var changeInfoItem;
+       var distName = $("#adminDistributionSelect option:selected").val();
+
+       changeInfoItem = {"DistributionName":distName};
+       changeInfoList.push(changeInfoItem);
+       
+       var r=confirm("Distribution ["+distName+"] will be removed!!!");
+       if (r==false)
+       {
+               return;
+       }
+
+       removeDistribution( changeInfoList, function (xml) {
+               $.mobile.changePage("#adminDistribution"); 
+       });
+}
+
+function adminDistributionInitSyncPackageServer(serverInfo){
+       $("#adminDistribution-SyncPackageServer").empty();
+
+       var info = '<h3 style="font-size: 16px" id="adminDistribution-SyncPackageServer-Url">Package server url : '+serverInfo.find("Url").text()+'</h3>';
+       info += '<p style="font-size: 14px" id="adminDistribution-SyncPackageServer-period">Period : '+serverInfo.find("Period").text()+'</p>';
+       info += '<p style="font-size: 14px" id="adminDistribution-SyncPackageServer-Description">Description : '+serverInfo.find("Description").text()+'</p>';
+               
+       $("#adminDistribution-SyncPackageServer").append(info);
+}
+
diff --git a/dibs-web/public/javascripts/admin-group-add.js b/dibs-web/public/javascripts/admin-group-add.js
new file mode 100644 (file)
index 0000000..ec47eef
--- /dev/null
@@ -0,0 +1,73 @@
+function adminGroupAddInit() {
+       document.getElementById('adminGroupAddPopup-Name').value = "";
+       document.getElementById('adminGroupAddPopup-Description').value = "";
+
+       queryAllProject( function(xml) {
+               var fullProjectList = $(xml).find("Data").find("Project");
+
+               adminGroupAddGenerateProjectSelect(fullProjectList);
+       });
+}
+
+function adminGroupAddGenerateProjectSelect(projectList) {
+       fieldset = document.getElementById('popup:addProjectCheckbox');
+
+       /* remove all table rows */
+       while(fieldset.hasChildNodes())
+       {
+               fieldset.removeChild(fieldset.firstChild);
+       }
+
+       legend = document.createElement('legend');
+       legend.innerHTML = "Project list";
+       fieldset.appendChild(legend);
+
+       projectList.each(function(){
+               var projectName = $(this).find("Name").text();
+               var projectId = $(this).find("Id").text();
+               var projectDistName = $(this).find("DistName").text();
+
+               var input = document.createElement('input');
+               input.type = 'checkbox';
+               input.id = 'popup:addGroupProjectCheckbox:'+projectId;
+               input.name = 'popup:addGroupProjectCheckbox';
+               input.value = projectName;
+
+               var label = document.createElement('label');
+               label.setAttribute('for', 'popup:addGroupProjectCheckbox:'+projectId);
+               label.innerHTML = projectName + "[" + projectDistName + "]";
+               
+               fieldset.appendChild(input);
+               fieldset.appendChild(label);
+       });
+
+       $("[name='popup\\:addGroupProjectCheckbox']").checkboxradio();
+}
+
+function adminGroupAddGroup() {
+       var selectArray = document.getElementsByName('popup:addGroupProjectCheckbox');
+       var groupName = document.getElementById('adminGroupAddPopup-Name').value;
+       var adminFlag = $("#adminGroupAddPopup-Admin option:selected").val();
+       var description = document.getElementById('adminGroupAddPopup-Description').value;
+       var selectProjectIdList = "";
+       var changeInfoList = [];
+       
+       for(var i = 0; i < selectArray.length; i++) {
+               if (selectArray[i].checked == true) {
+                       var projectId = selectArray[i].id.split(":")[2];
+                       selectProjectIdList = selectProjectIdList + "," + projectId;
+               }
+       }
+
+       if(selectProjectIdList.length > 0) {
+               selectProjectIdList = selectProjectIdList.substring(1,selectProjectIdList.length);
+       }
+               
+       changeItem = {"GroupName" : groupName, "AdminFlag":adminFlag, "Description":description, "ProjectList" : selectProjectIdList};
+       changeInfoList.push(changeItem);
+
+       addGroup(changeInfoList, function() {
+               $.mobile.changePage("#adminGroup"); 
+       });
+}
+
diff --git a/dibs-web/public/javascripts/admin-group-modify.js b/dibs-web/public/javascripts/admin-group-modify.js
new file mode 100644 (file)
index 0000000..6b9246e
--- /dev/null
@@ -0,0 +1,101 @@
+function adminGroupModifyInit() {
+       var index = localStorage.groupTableIndex;
+       var groupName = document.getElementById("groupTableName:"+index).innerHTML;
+       var description = document.getElementById("groupTableDescription:"+index).innerHTML;
+       var adminFlagText = document.getElementById("groupTableAdminFlag:"+index).innerHTML;
+
+       document.getElementById('adminGroupModifyPopup-Name').value = groupName;
+       document.getElementById('adminGroupModifyPopup-NewName').value = groupName;
+       document.getElementById('adminGroupModifyPopup-Description').value = description;
+       $("#adminGroupModifyPopup-Admin").empty();
+       var option; 
+       if(adminFlagText.toUpperCase() == "TRUE") {
+               option = '<option value="TRUE" selected="selected">TRUE</option>';
+       } else {
+               option = '<option value="TRUE">TRUE</option>';
+       }
+       $("#adminGroupModifyPopup-Admin").append(option);
+       
+       if(adminFlagText.toUpperCase() == "FALSE") {
+               option = '<option value="FALSE" selected="selected">FALSE</option>';
+       } else {
+               option = '<option value="FALSE">FALSE</option>';
+       }
+       $("#adminGroupModifyPopup-Admin").append(option);
+       $("#adminGroupModifyPopup-Admin").selectmenu("refresh");
+
+       queryGroupInfo(groupName, function(xml) {
+               var fullProjectList = $(xml).find("Data").find("Project");
+               var projectIdList = $(xml).find("Data").find("Group").find("ProjectList").text().split(",");
+
+               adminGroupModifyGenerateProjectSelect(fullProjectList, projectIdList);
+       });
+}
+
+function adminGroupModifyGenerateProjectSelect(fullProjectList, projectIdList) {
+       fieldset = document.getElementById('popup:modifyProjectSelect');
+       /* remove all table rows */
+       while(fieldset.hasChildNodes())
+       {
+               fieldset.removeChild(fieldset.firstChild);
+       }
+
+       legend = document.createElement('legend');
+       legend.innerHTML = "Project list";
+       fieldset.appendChild(legend);
+
+       fullProjectList.each(function(){
+               var projectName = $(this).find("Name").text();
+               var projectId = $(this).find("Id").text();
+               var projectDistName = $(this).find("DistName").text();
+
+               var input = document.createElement('input');
+               input.type = 'checkbox';
+               input.id = 'popup:modifyProjectCheckbox:'+projectId;
+               input.name = 'popup:modifyProjectCheckbox';
+               input.value = projectName;
+
+               if(contains(projectIdList, projectId))
+               {
+                       input.setAttribute('checked', 'checked');
+               }
+
+               var label = document.createElement('label');
+               label.setAttribute('for', 'popup:modifyProjectCheckbox:'+projectId);
+               label.innerHTML = projectName + "[" + projectDistName + "]";
+               
+               fieldset.appendChild(input);
+               fieldset.appendChild(label);
+       });
+
+       $("[name='popup\\:modifyProjectCheckbox']").checkboxradio();
+}
+
+function adminGroupModifyGroup() {
+       var selectArray = document.getElementsByName('popup:modifyProjectCheckbox');
+       var oldGroupName = document.getElementById('adminGroupModifyPopup-Name').value;
+       var groupName = document.getElementById('adminGroupModifyPopup-NewName').value;
+       var description = document.getElementById('adminGroupModifyPopup-Description').value;
+       var adminFlag = $("#adminGroupModifyPopup-Admin option:selected").val();
+       var selectProjectIdList = "";
+       var changeInfoList = [];
+       
+       for(var i = 0; i < selectArray.length; i++) {
+               if (selectArray[i].checked == true) {
+                       var projectId = selectArray[i].id.split(":")[2];
+                       selectProjectIdList = selectProjectIdList + "," + projectId;
+               }
+       }
+
+       if(selectProjectIdList.length > 0) {
+               selectProjectIdList = selectProjectIdList.substring(1,selectProjectIdList.length);
+       }
+               
+       changeItem = {"GroupName" : oldGroupName, "NewGroupName":groupName, "AdminFlag":adminFlag, "Description":description, "ProjectList" : selectProjectIdList};
+       changeInfoList.push(changeItem);
+
+       changeGroup(changeInfoList, function() {
+               $.mobile.changePage("#adminGroup"); 
+       });
+}
+
index 130638f88a3ecadb3a4935a9b609c306f0d981a4..549e6861748bfc673c7e0daab2d26c40aee78377 100644 (file)
-function generateProjectList(fullProjectList, projectIdList) {
-       var div = document.createElement('div');
-       div.setAttribute('data-role', 'collapsible');
-       div.setAttribute('data-mini', 'true');
-       div.setAttribute('data-content-theme', 'b');
-       div.setAttribute('class', 'groupProjectList');
+function adminGroupInit() {
+       adminGroupInitTable();
 
-       var header = document.createElement('h3');
-       header.innerHTML = "Project list";
-       div.appendChild(header);
-
-       var ul = document.createElement('ul');
+       queryAllGroup( function(xml) {
+               var header = $(xml).find("Header");
+               var groupList = $(xml).find("Data").find("Group");
 
-       fullProjectList.each(function(){
-               var projectName = $(this).find("Name").text();
-               var projectId = $(this).find("Id").text();
-               var projectDistName = $(this).find("DistName").text();
-               
-               if(contains(projectIdList, projectId))
-               {
-                       var item = document.createElement('li');
-                       item.innerHTML = projectName+"["+projectDistName+"]";
-                       ul.appendChild(item);
-               }
+               adminGroupFillTableInfo(groupList);
        });
-
-       div.appendChild(ul);
-       return div;
 }
 
-function generateModifyGroupProjectSelect(fullProjectList, projectIdList) {
-       fieldset = document.getElementById('popup:modifyProjectSelect');
-       /* remove all table rows */
-       while(fieldset.hasChildNodes())
-       {
-               fieldset.removeChild(fieldset.firstChild);
-       }
-
-       legend = document.createElement('legend');
-       legend.innerHTML = "Project list";
-       fieldset.appendChild(legend);
-
-       fullProjectList.each(function(){
-               var projectName = $(this).find("Name").text();
-               var projectId = $(this).find("Id").text();
-               var projectDistName = $(this).find("DistName").text();
-
-               var input = document.createElement('input');
-               input.type = 'checkbox';
-               input.id = 'popup:modifyProjectCheckbox:'+projectId;
-               input.name = 'popup:modifyProjectCheckbox';
-               input.value = projectName;
-
-               if(contains(projectIdList, projectId))
-               {
-                       input.setAttribute('checked', 'checked');
-               }
-
-               var label = document.createElement('label');
-               label.setAttribute('for', 'popup:modifyProjectCheckbox:'+projectId);
-               label.innerHTML = projectName + "[" + projectDistName + "]";
-               
-               fieldset.appendChild(input);
-               fieldset.appendChild(label);
-       });
-
-       $("[name='popup\\:modifyProjectCheckbox']").checkboxradio();
-}
+function adminGroupInitTable() {
+       var groupTable = document.getElementById("groupTable");
 
-function generateAddGroupProjectSelect(projectList) {
-       fieldset = document.getElementById('popup:addProjectCheckbox');
        /* remove all table rows */
-       while(fieldset.hasChildNodes())
+       while(groupTable.hasChildNodes())
        {
-               fieldset.removeChild(fieldset.firstChild);
-       }
-
-       legend = document.createElement('legend');
-       legend.innerHTML = "Project list";
-       fieldset.appendChild(legend);
-
-       projectList.each(function(){
-               var projectName = $(this).find("Name").text();
-               var projectId = $(this).find("Id").text();
-               var projectDistName = $(this).find("DistName").text();
-
-               var input = document.createElement('input');
-               input.type = 'checkbox';
-               input.id = 'popup:addGroupProjectCheckbox:'+projectId;
-               input.name = 'popup:addGroupProjectCheckbox';
-               input.value = projectName;
-
-               var label = document.createElement('label');
-               label.setAttribute('for', 'popup:addGroupProjectCheckbox:'+projectId);
-               label.innerHTML = projectName + "[" + projectDistName + "]";
-               
-               fieldset.appendChild(input);
-               fieldset.appendChild(label);
-       });
-
-       $("[name='popup\\:addGroupProjectCheckbox']").checkboxradio();
-}
-
-function modifyGroup() {
-       var selectArray = document.getElementsByName('popup:modifyProjectCheckbox');
-       var oldGroupName = document.getElementById('popup:modifyOldGroupName').value;
-       var groupName = document.getElementById('popup:modifyGroupName').value;
-       var selectProjectIdList = "";
-       var changeInfoList = [];
-       
-       for(var i = 0; i < selectArray.length; i++) {
-               if (selectArray[i].checked == true) {
-                       var projectId = selectArray[i].id.split(":")[2];
-                       selectProjectIdList = selectProjectIdList + "," + projectId;
-               }
-       }
-
-       if(selectProjectIdList.length > 0) {
-               selectProjectIdList = selectProjectIdList.substring(1,selectProjectIdList.length);
-       }
-               
-       changeItem = {"Type":"ChangeGroup", "Name" : oldGroupName, "NewGroupName":groupName, "ProjectList" : selectProjectIdList};
-       changeInfoList.push(changeItem);
-
-       $.ajax({
-               type: "POST",
-               url: baseUrl+"/admin/changeAdminGroup",
-               data: JSON.stringify({ ChangeInfoList: changeInfoList }),
-               contentType: "application/json; charset=utf-8",
-               dataType: "json",
-               error: function(jqXHR) {
-                       switch (jqXHR.status) {
-                       case 401:
-                               expireSession();
-                               break;
-                       default:
-                               alert(jqXHR);
-                       }
-               }
-       });
-}
-
-function addGroup() {
-       var selectArray = document.getElementsByName('popup:addGroupProjectCheckbox');
-       var groupName = document.getElementById('popup:addGroupName').value;
-       var selectProjectIdList = "";
-       var changeInfoList = [];
-       
-       for(var i = 0; i < selectArray.length; i++) {
-               if (selectArray[i].checked == true) {
-                       var projectId = selectArray[i].id.split(":")[2];
-                       selectProjectIdList = selectProjectIdList + "," + projectId;
-               }
-       }
-
-       if(selectProjectIdList.length > 0) {
-               selectProjectIdList = selectProjectIdList.substring(1,selectProjectIdList.length);
+               groupTable.removeChild(groupTable.firstChild);
        }
-               
-       changeItem = {"Type":"AddGroup", "Name" : groupName, "ProjectList" : selectProjectIdList};
-       changeInfoList.push(changeItem);
-
-       $.ajax({
-               type: "POST",
-               url: baseUrl+"/admin/changeAdminGroup",
-               data: JSON.stringify({ ChangeInfoList: changeInfoList }),
-               contentType: "application/json; charset=utf-8",
-               dataType: "json",
-               error: function(jqXHR) {
-                       switch (jqXHR.status) {
-                       case 401:
-                               expireSession();
-                               break;
-                       default:
-                               alert(jqXHR);
-                       }
-               }
-       });
 }
 
-function fillGroupTable(fullProjectList, groupList) {
+function adminGroupFillTableInfo(groupList) {
        var groupTable = document.getElementById("groupTable");
 
        /* remove all table rows */
@@ -189,8 +30,7 @@ function fillGroupTable(fullProjectList, groupList) {
 
        /* create table header */
        var row = groupTable.insertRow(-1);
-       var tableHeader = "";
-       tableHeader = "<tr><th> Group name </th><th> Project list </th><th> Modify </th><th> Delete </th></tr>";
+       var tableHeader = "<tr><th> Group name </th><th> Project list </th><th> Admin </th><th> Description </th><th> Modify </th><th> Delete </th></tr>";
        
        $("#groupTable").append(tableHeader);
 
@@ -199,8 +39,10 @@ function fillGroupTable(fullProjectList, groupList) {
        groupList.each(function(){
                var row = groupTable.insertRow(-1);
                var cell;
-               var groupName = $(this).find("Name").text();
-               var projectIdList = $(this).find("ProjectList").text().split(",");
+               var groupName = $(this).find("GroupName").text();
+               var adminFlag = $(this).find("AdminFlag").text();
+               var description = $(this).find("Description").text();
+               var projectList = $(this).find("AccessableProject");
 
                row.setAttribute('id', 'table:'+index);
 
@@ -209,17 +51,23 @@ function fillGroupTable(fullProjectList, groupList) {
                cell.innerHTML = groupName
 
                cell = row.insertCell(-1);
-               div = generateProjectList(fullProjectList, projectIdList);
+               div = adminGroupGenerateProjectListCell(projectList);
                cell.appendChild(div);
 
+               cell = row.insertCell(-1);
+               cell.setAttribute('id', 'groupTableAdminFlag:'+index);
+               cell.innerHTML = adminFlag;
+
+               cell = row.insertCell(-1);
+               cell.setAttribute('id', 'groupTableDescription:'+index);
+               cell.innerHTML = description;
+
                cell = row.insertCell(-1);
                var button = document.createElement('a');
-               button.setAttribute('href','#modifyGroup');
+               button.setAttribute('href','#adminGroupModifyPopup');
                button.setAttribute('data-role','button');
                button.setAttribute('data-rel','dialog');
-               button.setAttribute('data-mini','true');
-               button.setAttribute('onClick','popupModifyGroup(\"'+index+'\")');
-               button.setAttribute('id',"input:modifyGroup:"+index);
+               button.setAttribute('onClick','adminGroupModifyPopupSetup(\"'+index+'\")');
                button.setAttribute('class','groupTableCellButton');
                button.innerHTML = " "
                cell.appendChild(button);
@@ -227,10 +75,7 @@ function fillGroupTable(fullProjectList, groupList) {
                cell = row.insertCell(-1);
                var button = document.createElement('input');
                button.setAttribute('type','button');
-               button.setAttribute('id','groupDeleteButton'+':'+index);
-               button.setAttribute('name',groupName);
-               button.setAttribute('data-mini','true');
-               button.setAttribute('onClick','removeGroup('+index+')');
+               button.setAttribute('onClick','adminGroupRemoveGroup('+index+')');
                button.setAttribute('class','groupTableCellButton');
                cell.appendChild(button);
 
@@ -241,34 +86,40 @@ function fillGroupTable(fullProjectList, groupList) {
        $(".groupTableCellButton").button();
 }
 
-function queryAdminGroup() {
-       $.ajax({
-               url: baseUrl+'/admin/queryAdminGroups',
-               type: 'GET',
-               dataType: 'xml',
-               timeout: 1000,
-               success: function(xml) {
-                       var projectList = $(xml).find("Groups").find("AllProject");
-                       var groupList = $(xml).find("Groups").find("Group");
+function adminGroupModifyPopupSetup(index) {
+       localStorage.groupTableIndex = index;
+}
+
+function adminGroupGenerateProjectListCell(projectList) {
+       var div = document.createElement('div');
+       div.setAttribute('data-role', 'collapsible');
+       div.setAttribute('data-content-theme', 'b');
+       div.setAttribute('class', 'groupProjectList');
+       div.setAttribute('style', 'text-align: left');
+
+       var header = document.createElement('h3');
+       header.innerHTML = "Project list";
+       div.appendChild(header);
 
-                       fillGroupTable(projectList, groupList);
-               },
-               error: function(jqXHR) {
-                       switch (jqXHR.status) {
-                       case 401:
-                               expireSession();
-                               break;
-                       default:
-                               alert(jqXHR);
-                       }
-               }
+       var ul = document.createElement('ul');
+
+       projectList.each(function(){
+               var projectName = $(this).find("ProjectName").text();
+               var projectDistName = $(this).find("ProjectDistribution").text();
+               var item = document.createElement('li');
+
+               item.innerHTML = projectName+"["+projectDistName+"]";
+               ul.appendChild(item);
        });
+
+       div.appendChild(ul);
+       return div;
 }
 
-function removeGroup(index) {
-       var groupName = document.getElementById("groupDeleteButton:"+index).name;
+function adminGroupRemoveGroup(index) {
+       var groupName = document.getElementById("groupTableName:"+index).innerHTML;
 
-       var r=confirm("User ["+email+"] is removed!!!");
+       var r=confirm("User ["+groupName+"] will be removed!!!");
        if (r==false)
        {
                return;
@@ -276,80 +127,11 @@ function removeGroup(index) {
 
        var changeInfoList = [];
        var changeInfoItem;
-       changeInfoItem = {"Type":"RemoveGroup", "Name":groupName};
+       changeInfoItem = {"GroupName":groupName};
        changeInfoList.push(changeInfoItem);
 
-       $.ajax({
-               type: "POST",
-               url: baseUrl+"/admin/changeAdminGroup",
-               data: JSON.stringify({ ChangeInfoList: changeInfoList }),
-               contentType: "application/json; charset=utf-8",
-               dataType: "json",
-               error: function(jqXHR) {
-                       switch (jqXHR.status) {
-                       case 401:
-                               expireSession();
-                               break;
-                       default:
-                               alert(jqXHR);
-                       }
-               }
+       removeGroup(changeInfoList, function() {
+               $.mobile.changePage("#adminGroup"); 
        });
 }
 
-function popupModifyGroup(index) {
-       localStorage.groupTableIndex = index;
-}
-
-function setupModifyGroup() {
-       var index = localStorage.groupTableIndex;
-       var groupName = document.getElementById("groupTableName:"+index).innerHTML;
-
-       document.getElementById('popup:modifyOldGroupName').value = groupName;
-       document.getElementById('popup:modifyGroupName').value = groupName;
-
-       $.ajax({
-               url: baseUrl+'/admin/queryAdminGroupInfo/' + groupName,
-               type: 'GET',
-               dataType: 'xml',
-               timeout: 1000,
-               success: function(xml) {
-                       var fullProjectList = $(xml).find("GroupInfo").find("AllProject");
-                       var projectIdList = $(xml).find("GroupInfo").find("Group").find("ProjectList").text().split(",");
-
-                       generateModifyGroupProjectSelect(fullProjectList, projectIdList);
-               },
-               error: function(jqXHR) {
-                       switch (jqXHR.status) {
-                       case 401:
-                               expireSession();
-                               break;
-                       default:
-                               alert(jqXHR);
-                       }
-               }
-       });
-}
-
-function setupAddGroup() {
-       $.ajax({
-               url: baseUrl+'/admin/queryAdminAllProject',
-               type: 'GET',
-               dataType: 'xml',
-               timeout: 1000,
-               success: function(xml) {
-                       var fullProjectList = $(xml).find("AllProject").find("Project");
-
-                       generateAddGroupProjectSelect(fullProjectList);
-               },
-               error: function(jqXHR) {
-                       switch (jqXHR.status) {
-                       case 401:
-                               expireSession();
-                               break;
-                       default:
-                               alert(jqXHR);
-                       }
-               }
-       });
-}
diff --git a/dibs-web/public/javascripts/admin-project-add.js b/dibs-web/public/javascripts/admin-project-add.js
new file mode 100644 (file)
index 0000000..7318cea
--- /dev/null
@@ -0,0 +1,102 @@
+function adminProjectAddInit() {
+       queryAllOS( function (xml) {
+               var osList = $(xml).find("Data").find("OsName");
+
+               fieldset = document.getElementById('popup:addGitProjectOs');
+               /* remove all table rows */
+               while(fieldset.hasChildNodes())
+               {
+                       fieldset.removeChild(fieldset.firstChild);
+               }
+        
+               legend = document.createElement('legend');
+               legend.innerHTML = "Project os list";
+               fieldset.appendChild(legend);
+        
+               osList.each(function(){
+                       var osName = $(this).text();
+        
+                       var input = document.createElement('input');
+                       input.type = 'checkbox';
+                       input.id = 'popup:addGitProjectOsCheckbox:'+osName;
+                       input.name = 'popup:addGitProjectOsCheckbox';
+                       input.value = osName;
+                       input.setAttribute('class', 'popup:addGitProjectOsCheckbox');
+                       input.setAttribute('checked', 'checked');
+        
+                       var label = document.createElement('label');
+                       label.setAttribute('for', 'popup:addGitProjectOsCheckbox:'+osName);
+                       label.innerHTML = osName;
+                       
+                       fieldset.appendChild(input);
+                       fieldset.appendChild(label);
+               });
+        
+               $('.popup\\:addGitProjectOsCheckbox').checkboxradio();
+       });
+}
+
+function adminProjectAddGitProject() {
+       var distName = $("#adminProjectDistributionSelect option:selected").val();
+       var changeInfoList = [];
+       var changeInfoItem;
+       var type = "GIT";
+       var name = document.getElementById("popup:addGitProjectName").value;
+       var password = document.getElementById("popup:addGitProjectPassword").value;
+       var address = document.getElementById("popup:addGitAddress").value;
+       var branch = document.getElementById("popup:addGitBranch").value;
+       var selectArray = document.getElementsByName('popup:addGitProjectOsCheckbox');
+       var selectOsList = [];
+
+       for(var i = 0; i < selectArray.length; i++) {
+               if (selectArray[i].checked == true) {
+                       var osName = selectArray[i].id.split(":")[2];
+                       selectOsList.push(osName);
+               }
+       }
+
+
+       if(name == "" || password == "" || address == "" || branch == ""){
+               alert("You must input full data(Project name, Git password, Git address, Branch)");
+               return;
+       }
+
+       changeInfoItem = {"Distribution":distName, "Name":name, "ProjectType":type, "ProjectPass":password, "Address":address, "Branch":branch, "OSNameList":selectOsList.toString()};
+       changeInfoList.push(changeInfoItem);
+       
+       addProject(changeInfoList, function () {
+               document.getElementById("popup:addGitProjectName").value = "";
+               document.getElementById("popup:addGitProjectPassword").value = "";
+               document.getElementById("popup:addGitAddress").value = "";
+               document.getElementById("popup:addGitBranch").value = "";
+
+               $.mobile.changePage("#adminProject"); 
+       });
+}
+
+function adminProjectAddBinaryProject() {
+       var distName = $("#adminProjectDistributionSelect option:selected").val();
+       var changeInfoList = [];
+       var changeInfoItem;
+       var type = "BINARY";
+       var name = document.getElementById("popup:addBinaryProjectName").value;
+       var password = document.getElementById("popup:addBinaryProjectPassword").value;
+       var pkgName = document.getElementById("popup:addBinaryPackageName").value;
+
+       if(name == "" || pkgName == ""){
+               alert("You must input full data(Project name, Package name");
+               return;
+       }
+
+       changeInfoItem = {"Distribution":distName, "Name":name, "ProjectType":type, "ProjectPass":password, "PackageName":pkgName};
+       changeInfoList.push(changeInfoItem);
+       
+       addProject(changeInfoList, function () {
+               document.getElementById("popup:addBinaryProjectName").value = "";
+               document.getElementById("popup:addBinaryProjectPassword").value = "";
+               document.getElementById("popup:addBinaryPackageName").value = "";
+
+               $.mobile.changePage("#adminProject"); 
+       });
+}
+
diff --git a/dibs-web/public/javascripts/admin-project-modify.js b/dibs-web/public/javascripts/admin-project-modify.js
new file mode 100644 (file)
index 0000000..3769bba
--- /dev/null
@@ -0,0 +1,129 @@
+function adminProjectModifyBinaryProjectInit() {
+       var projectName = localStorage.projectName;
+       var packageName = document.getElementById('modifyBinaryPackageName:'+projectName).innerHTML;
+
+       document.getElementById('popup:modifyBinaryOldProjectName').value = projectName;
+       document.getElementById('popup:modifyBinaryNewProjectName').value = projectName;
+       document.getElementById('popup:modifyBinaryProjectPassword').value = "";
+       document.getElementById('popup:modifyBinaryPackageName').value = packageName;
+}
+
+function adminProjectModifyGitProjectInit() {
+       var projectName = localStorage.projectName;
+       var projectAddress = document.getElementById('modifyGitProjectAddress:'+projectName).innerHTML;
+       var projectBranch = document.getElementById('modifyGitProjectBranch:'+projectName).innerHTML;
+
+       document.getElementById('popup:modifyGitOldProjectName').value = projectName;
+       document.getElementById('popup:modifyGitNewProjectName').value = projectName;
+       document.getElementById('popup:modifyGitProjectPassword').value = "";
+       document.getElementById('popup:modifyGitProjectAddress').value = projectAddress;
+       document.getElementById('popup:modifyGitProjectBranch').value = projectBranch;
+
+       queryAllOS( function (xml) {
+               var osList = $(xml).find("Data").find("OsName");
+               var selectedOsList = [];
+               var projectName = localStorage.projectName;
+       
+               var osListElement = document.getElementById('adminGitProjectTableOsList:'+projectName);
+               for(var i = 0; i < osListElement.childNodes.length; i++)
+               {
+                       selectedOsList.push(osListElement.childNodes[i].innerHTML);
+               }
+
+               fieldset = document.getElementById('popup:modifyGitProjectOs');
+               /* remove all table rows */
+               while(fieldset.hasChildNodes())
+               {
+                       fieldset.removeChild(fieldset.firstChild);
+               }
+        
+               legend = document.createElement('legend');
+               legend.innerHTML = "Project os list";
+               fieldset.appendChild(legend);
+        
+               osList.each(function(){
+                       var osName = $(this).text();
+        
+                       var input = document.createElement('input');
+                       input.type = 'checkbox';
+                       input.id = 'popup:modifyGitProjectOs:'+osName;
+                       input.name = 'popup:modifyGitProjectOs'
+                       input.value = osName;
+                       input.setAttribute('class', 'popup:modifyGitProjectOs');
+                       if(contains(selectedOsList, osName))
+                       {
+                               input.setAttribute('checked', 'checked');
+                       }
+        
+                       var label = document.createElement('label');
+                       label.setAttribute('for', 'popup:modifyGitProjectOs:'+osName);
+                       label.innerHTML = osName;
+                       
+                       fieldset.appendChild(input);
+                       fieldset.appendChild(label);
+               });
+        
+               $('.popup\\:modifyGitProjectOs').checkboxradio();
+       });
+}
+
+function adminProjectModfyBinaryProject() {
+       var distName = $("#adminProjectDistributionSelect option:selected").val();
+       var changeInfoList = [];
+       var changeInfoItem;
+       var oldProjectName = document.getElementById('popup:modifyBinaryOldProjectName').value;
+       var newProjectName = document.getElementById('popup:modifyBinaryNewProjectName').value;
+       var projectType = document.getElementById('popup:modifyBinaryProjectType').value;
+       var projectPassword = document.getElementById('popup:modifyBinaryProjectPassword').value;
+       var packageName = document.getElementById('popup:modifyBinaryPackageName').value;
+
+       if(oldProjectName == "" || newProjectName == "" || projectPassword == "" || projectType == "" || packageName == ""){
+               alert("You must input full data");
+               return;
+       }
+               
+       changeInfoItem = {"Distribution":distName, "Name":oldProjectName, "NewProjectName":newProjectName, "ProjectType":projectType, "ProjectPass":projectPassword, "PackageName":packageName};
+       changeInfoList.push(changeInfoItem);
+
+       modifyProject(changeInfoList, function () {
+               $.mobile.changePage("#adminProject"); 
+       });
+}
+
+function adminProjectModfyGitProject() {
+       var distName = $("#adminProjectDistributionSelect option:selected").val();
+       var changeInfoList = [];
+       var changeInfoItem;
+       var oldProjectName = document.getElementById('popup:modifyGitOldProjectName').value;
+       var newProjectName = document.getElementById('popup:modifyGitNewProjectName').value;
+       var projectType = document.getElementById('popup:modifyGitProjectType').value;
+       var projectPassword = document.getElementById('popup:modifyGitProjectPassword').value;
+       var projectAddress = document.getElementById('popup:modifyGitProjectAddress').value;
+       var projectBranch = document.getElementById('popup:modifyGitProjectBranch').value;
+       var selectArray = document.getElementsByName('popup:modifyGitProjectOs');
+       var selectOsList = "";
+
+       for(var i = 0; i < selectArray.length; i++) {
+               if (selectArray[i].checked == true) {
+                       var osName = selectArray[i].id.split(":")[2];
+                       selectOsList = selectOsList + "," + osName;
+               }
+       }
+
+       if(selectOsList.length > 0) {
+               selectOsList = selectOsList.substring(1,selectOsList.length);
+       }
+               
+       if(oldProjectName == "" || newProjectName == "" || projectPassword == "" || projectType == "" || projectAddress == "" || projectBranch == ""){
+               alert("You must input full data");
+               return;
+       }
+               
+       changeInfoItem = {"Distribution":distName, "Name":oldProjectName, "NewProjectName":newProjectName, "ProjectType":projectType, "ProjectPass":projectPassword, "ProjectAddress":projectAddress, "ProjectBranch":projectBranch, "OSNameList":selectOsList};
+       changeInfoList.push(changeInfoItem);
+
+       modifyProject(changeInfoList, function () {
+               $.mobile.changePage("#adminProject"); 
+       });
+}
+
index ccd1dbeb84c832b80aad86d70a753dc63a00bf90..b8705e12b40862f3d91339831d0975544931b8af 100644 (file)
-function addDistribution() {
-       var changeInfoList = [];
-       var changeInfoItem;
-       var name = document.getElementById("popup:addDistributionName").value;
-       var url = document.getElementById("popup:addPackageServerUrl").value;
-       var address = document.getElementById("popup:addPackageServerAddress").value;
-       var distStatus = $("#popup\\:addDistributionStatus option:selected").val();
+function adminProjectInit() {
+       queryAllDistribution( function (xml) {
+               var oldDistName = $("#adminProjectDistributionSelect option:selected").val();
+               var find = false;
+               var distributionList = $(xml).find("Data").find("DistributionName");
 
-       if(name == "" || url == "" || address == ""){
-               alert("You must input full data");
-               return;
-       }
+               // remove old select options
+               $("#adminProjectDistributionSelect").empty();
 
-       changeInfoItem = {"Type":"AddDistribution", "Name":name, "URL":url, "Address":address, "DistStatus":distStatus};
-       changeInfoList.push(changeInfoItem);
+               distributionList.each(function(){
+                       var name = $(this).text();
        
-       $.ajax({
-               type: "POST",
-               url: baseUrl+"/admin/changeAdminProject",
-               data: JSON.stringify({ ChangeInfoList: changeInfoList }),
-               contentType: "application/json; charset=utf-8",
-               dataType: "json",
-               success: function() {
-                       $.mobile.changePage("#adminProject"); 
-               },
-               error: function(jqXHR) {
-                       switch (jqXHR.status) {
-                       case 401:
-                               expireSession();
-                               break;
-                       default:
-                               alert(jqXHR);
-                               $.mobile.changePage("#adminProject"); 
+                       if( oldDistName == name ) {
+                               $("#adminProjectDistributionSelect").append("<option value=\'"+name+"\' selected=\"selected\">"+name+"</option>");
+                               find = true;
+                               
+                       } else {
+                               $("#adminProjectDistributionSelect").append("<option value=\'"+name+"\'>"+name+"</option>");
                        }
-               }
-       });
-}
-
-function modifyDistribution() {
-       var changeInfoList = [];
-       var changeInfoItem;
-       var distName = $("#select-admin-distribution option:selected").val();
-       var url = document.getElementById("popup:modifyPackageServerUrl").value;
-       var address = document.getElementById("popup:modifyPackageServerAddress").value;
-       var distStatus = $("#popup\\:modifyDistributionStatus option:selected").val();
-
-       if(distName == "" || url == "" || address == ""){
-               alert("You must input full data");
-               return;
-       }
-
-       if(distStatus == "") {
-               distStatus = "OPEN";
-       }
-
-       changeInfoItem = {"Type":"ModifyDistribution", "Name":distName, "URL":url, "Address":address, "DistStatus":distStatus};
-       changeInfoList.push(changeInfoItem);
-       
-       $.ajax({
-               type: "POST",
-               url: baseUrl+"/admin/changeAdminProject",
-               data: JSON.stringify({ ChangeInfoList: changeInfoList }),
-               contentType: "application/json; charset=utf-8",
-               dataType: "json",
-               success: function() {
-                       $.mobile.changePage("#adminProject"); 
-               },
-               error: function(errMsg) {
-                       alert('Error loading XML document');
-                       $.mobile.changePage("#adminProject"); 
-               }
-       });
-}
-
-function removeDistribution() {
-       var distName = $("#select-admin-distribution option:selected").val();
-
-       var r = confirm("Distribution ["+distName+"] is removed!!!");
-       if (r == false)
-       {
-               return;
-       }
-
-       var changeInfoList = [];
-       var changeInfoItem;
-       changeInfoItem = {"Type":"RemoveDistribution", "Name":distName};
-       changeInfoList.push(changeInfoItem);
+               });
        
-       $.ajax({
-               type: "POST",
-               url: baseUrl+"/admin/changeAdminProject",
-               data: JSON.stringify({ ChangeInfoList: changeInfoList }),
-               contentType: "application/json; charset=utf-8",
-               dataType: "json",
-               success: function() {
-                       $.mobile.changePage("#adminProject"); 
-               },
-               error: function(errMsg) {
-                       alert('Error loading XML document');
-                       $.mobile.changePage("#adminProject"); 
+               /* default distribution selection */
+               if(!find) {
+                       $("#adminProjectDistributionSelect option:eq(0)").attr("selected", "selected");
                }
-       });
-}
-
-function addGitProject() {
-       var distName = $("#select-admin-distribution option:selected").val();
-
-       var changeInfoList = [];
-       var changeInfoItem;
-
-       var type = "GIT";
-       var name = document.getElementById("popup:addGitProjectName").value;
-       var password = document.getElementById("popup:addGitProjectPassword").value;
-       var address = document.getElementById("popup:addGitAddress").value;
-       var branch = document.getElementById("popup:addGitBranch").value;
 
-       if(name == "" || password == "" || address == "" || branch == ""){
-               alert("You must input full data(Project name, Git password, Git address, Branch)");
-               return;
-       }
+               $("#adminProjectDistributionSelect").selectmenu('refresh');
 
-       changeInfoItem = {"Type":"AddProject", "Distribution":distName, "Name":name, "ProjectType":type, "ProjectPass":password, "Address":address, "Branch":branch};
-       changeInfoList.push(changeInfoItem);
-       
-       $.ajax({
-               type: "POST",
-               url: baseUrl+"/admin/changeAdminProject",
-               data: JSON.stringify({ ChangeInfoList: changeInfoList }),
-               contentType: "application/json; charset=utf-8",
-               dataType: "json",
-               success: function() {
-                       document.getElementById("popup:addGitProjectName").value = "";
-                       document.getElementById("popup:addGitProjectPassword").value = "";
-                       document.getElementById("popup:addGitAddress").value = "";
-                       document.getElementById("popup:addGitBranch").value = "";
-                       $.mobile.changePage("#adminProject"); 
-               },
-               error: function(errMsg) {
-                       alert(errMsg.responseText);
-               }
+               // set project info
+               adminProjectSetProjectInfo();
        });
 }
 
-function addBinaryProject() {
-       var distName = $("#select-admin-distribution option:selected").val();
-
-       var changeInfoList = [];
-       var changeInfoItem;
+function adminProjectSetProjectInfo() {
+       var distName = $("#adminProjectDistributionSelect option:selected").val();
 
-       var type = "BINARY";
-       var name = document.getElementById("popup:addBinaryProjectName").value;
-       var pkgName = document.getElementById("popup:addBinaryPackageName").value;
-
-       if(name == "" || pkgName == ""){
-               alert("You must input full data(Project name, Package name");
-               return;
-       }
-
-       changeInfoItem = {"Type":"AddProject", "Distribution":distName, "Name":name, "ProjectType":type, "ProjectPass":password, "PackageName":pkgName};
-       changeInfoList.push(changeInfoItem);
+       queryProjectsInDistributionForAdmin( distName, function (xml) {
+               var projectList = $(xml).find("Data").find("Project");
        
-       $.ajax({
-               type: "POST",
-               url: baseUrl+"/admin/changeAdminProject",
-               data: JSON.stringify({ ChangeInfoList: changeInfoList }),
-               contentType: "application/json; charset=utf-8",
-               dataType: "json",
-               success: function() {
-                       document.getElementById("popup:addBinaryProjectName").value = "";
-                       document.getElementById("popup:addBinaryPackageName").value = "";
-                       $.mobile.changePage("#adminProject"); 
-               },
-               error: function(errMsg) {
-                       alert(errMsg.responseText);
-               }
+               // update project info
+               adminProjectUpdateTable(projectList);
        });
 }
 
@@ -180,90 +46,8 @@ function popupModifyProject(projectName) {
        localStorage.projectName = projectName;
 }
 
-function modifyBinaryProject() {
-       var distName = $("#select-admin-distribution option:selected").val();
-       var changeInfoList = [];
-       var changeInfoItem;
-       var oldProjectName = document.getElementById('popup:modifyBinaryOldProjectName').value;
-       var newProjectName = document.getElementById('popup:modifyBinaryNewProjectName').value;
-       var projectType = document.getElementById('popup:modifyBinaryProjectType').value;
-       var projectPassword = document.getElementById('popup:modifyBinaryProjectPassword').value;
-       var packageName = document.getElementById('popup:modifyBinaryPackageName').value;
-
-       if(oldProjectName == "" || newProjectName == "" || projectPassword == "" || projectType == "" || packageName == ""){
-               alert("You must input full data");
-               return;
-       }
-               
-       changeInfoItem = {"Type":"ModifyProject", "Distribution":distName, "Name":oldProjectName, "NewProjectName":newProjectName, "ProjectType":projectType, "ProjectPass":projectPassword, "PackageName":packageName};
-       changeInfoList.push(changeInfoItem);
-
-       $.ajax({
-               type: "POST",
-               url: baseUrl+"/admin/changeAdminProject",
-               data: JSON.stringify({ ChangeInfoList: changeInfoList }),
-               contentType: "application/json; charset=utf-8",
-               dataType: "json",
-               success: function() {
-                       $.mobile.changePage("#adminProject"); 
-               },
-               error: function(errMsg) {
-                       alert(errMsg);
-                       $.mobile.changePage("#adminProject"); 
-               }
-       });
-}
-
-function modifyGitProject() {
-       var distName = $("#select-admin-distribution option:selected").val();
-       var changeInfoList = [];
-       var changeInfoItem;
-       var oldProjectName = document.getElementById('popup:modifyGitOldProjectName').value;
-       var newProjectName = document.getElementById('popup:modifyGitNewProjectName').value;
-       var projectType = document.getElementById('popup:modifyGitProjectType').value;
-       var projectPassword = document.getElementById('popup:modifyGitProjectPassword').value;
-       var projectAddress = document.getElementById('popup:modifyGitProjectAddress').value;
-       var projectBranch = document.getElementById('popup:modifyGitProjectBranch').value;
-       var selectArray = document.getElementsByName('popup:modifyGitProjectOs');
-       var selectOsList = "";
-
-       for(var i = 0; i < selectArray.length; i++) {
-               if (selectArray[i].checked == true) {
-                       var osName = selectArray[i].id.split(":")[2];
-                       selectOsList = selectOsList + "," + osName;
-               }
-       }
-
-       if(selectOsList.length > 0) {
-               selectOsList = selectOsList.substring(1,selectOsList.length);
-       }
-               
-       if(oldProjectName == "" || newProjectName == "" || projectPassword == "" || projectType == "" || projectAddress == "" || projectBranch == ""){
-               alert("You must input full data");
-               return;
-       }
-               
-       changeInfoItem = {"Type":"ModifyProject", "Distribution":distName, "Name":oldProjectName, "NewProjectName":newProjectName, "ProjectType":projectType, "ProjectPass":projectPassword, "ProjectAddress":projectAddress, "ProjectBranch":projectBranch, "OSNameList":selectOsList};
-       changeInfoList.push(changeInfoItem);
-
-       $.ajax({
-               type: "POST",
-               url: baseUrl+"/admin/changeAdminProject",
-               data: JSON.stringify({ ChangeInfoList: changeInfoList }),
-               contentType: "application/json; charset=utf-8",
-               dataType: "json",
-               success: function() {
-                       $.mobile.changePage("#adminProject"); 
-               },
-               error: function(errMsg) {
-                       alert(errMsg);
-                       $.mobile.changePage("#adminProject"); 
-               }
-       });
-}
-
-function removeProject(projectType, tableIndex, projectName ) {
-       var distName = $("#select-admin-distribution option:selected").val();
+function adminProjectRemoveProject(projectType, projectName ) {
+       var distName = $("#adminProjectDistributionSelect option:selected").val();
 
        var r=confirm("Project ["+projectName+"] is removed!!!");
        if (r==false)
@@ -273,37 +57,15 @@ function removeProject(projectType, tableIndex, projectName ) {
 
        var changeInfoList = [];
        var changeInfoItem;
-       changeInfoItem = {"Type":"RemoveProject", "Distribution":distName, "ProjectType":projectType, "Name":projectName};
+       changeInfoItem = {"Distribution":distName, "ProjectType":projectType, "Name":projectName};
        changeInfoList.push(changeInfoItem);
        
-       if(projectType == "GIT")
-       {
-               var table = document.getElementById("adminProjectTable");
-               table.deleteRow(tableIndex);
-       }
-       else if (projectType == "BINARY")
-       {
-               var table = document.getElementById("adminBinaryProjectTable");
-               table.deleteRow(tableIndex);
-       }
-       else
-       {
-               alert("Project type is invalid");
-               return;
-       }
-       
-       $.ajax({
-               type: "POST",
-               url: baseUrl+"/admin/changeAdminProject",
-               data: JSON.stringify({ ChangeInfoList: changeInfoList }),
-               contentType: "application/json; charset=utf-8",
-               dataType: "json",
-               error: function(errMsg) {
-               }
+       removeProject(changeInfoList, function () {
+               $.mobile.changePage("#adminProject"); 
        });
 }
 
-function updateProjectInfo(projectList) {
+function adminProjectUpdateTable(projectList) {
        /* project table */
        var projectTable = document.getElementById("adminProjectTable");
 
@@ -320,9 +82,6 @@ function updateProjectInfo(projectList) {
                binaryProjectTable.removeChild(binaryProjectTable.firstChild);
        }
 
-       var projectTable = document.getElementById("adminProjectTable");
-       var binaryProjectTable = document.getElementById("adminBinaryProjectTable");
-       
        // Project table header
        var tableHeader = "<tr><th>Project</th><th>Git repos</th><th>Branch</th><th>OS list</th><th>Modify</th><th>Delete</th>";
        $("#adminProjectTable").append(tableHeader);
@@ -360,7 +119,7 @@ function updateProjectInfo(projectList) {
                        cell.innerHTML = $(this).find("GitBranch").text();
 
                        cell = row.insertCell(-1);
-                       div = generateProjectOsList(osList, name);
+                       div = adminProjectApendOsCell(osList, name);
                        cell.appendChild(div);
 
                        cell = row.insertCell(-1);
@@ -381,7 +140,7 @@ function updateProjectInfo(projectList) {
                        button.setAttribute('data-mini','true');
                        button.setAttribute('name',name);
                        button.setAttribute('class','binaryProjectTableButton');
-                       button.setAttribute('onClick','removeProject(\"GIT\",'+binaryProjectIdx+',\"'+name+'\"'+')');
+                       button.setAttribute('onClick','adminProjectRemoveProject(\"GIT\"'+',\"'+name+'\"'+')');
                        cell.appendChild(button);
 
                        projectIdx = projectIdx + 1;
@@ -418,7 +177,7 @@ function updateProjectInfo(projectList) {
                        button.setAttribute('class','binaryProjectTableButton');
                        button.setAttribute('data-mini','true');
                        button.setAttribute('name',name);
-                       button.setAttribute('onClick','removeProject(\"BINARY\",'+binaryProjectIdx+',\"'+name+'\"'+')');
+                       button.setAttribute('onClick','adminProjectRemoveProject(\"BINARY\"'+',\"'+name+'\"'+')');
                        cell.appendChild(button);
 
                        binaryProjectIdx = binaryProjectIdx + 1;
@@ -432,7 +191,7 @@ function updateProjectInfo(projectList) {
        $(".groupProjectList").collapsible();
 }
 
-function generateProjectOsList(osList, projectName) {
+function adminProjectApendOsCell(osList, projectName) {
        var div = document.createElement('div');
        div.setAttribute('data-role', 'collapsible');
        div.setAttribute('data-mini', 'true');
@@ -456,209 +215,4 @@ function generateProjectOsList(osList, projectName) {
        return div;
 }
 
-function queryDistributionInfo() {
-       var distName = $("#select-admin-distribution option:selected").val();
-
-       $.ajax({
-               url: baseUrl+'/admin/queryDistributionInfo/' + distName,
-               type: 'GET',
-               dataType: 'xml',
-               timeout: 1000,
-               error: function() {
-                       alert('Error loading XML document');
-               },
-               success: function(xml) {
-                       var distribution = $(xml).find("Distribution");
-                       var name = distribution.find("DistributionName").text();
-                       var url = distribution.find("PackageServerUrl").text();
-                       var address = distribution.find("PackageServerAddress").text();
-                       var distStatus = distribution.find("Status").text();
-                       var projectList = distribution.find("Project");
-
-                       $("#ProjectTable\\:packageServerUrl").text(url);
-                       $("#ProjectTable\\:packageServerAddress").text(address);
-                       $("#ProjectTable\\:distributionStatus").text(distStatus);
-       
-                       // update project info
-                       updateProjectInfo(projectList);
-               }
-       });
-}
-
-function queryAdminProject() {
-       $.ajax({
-               url: baseUrl+'/admin/queryDistributions',
-               type: 'GET',
-               dataType: 'xml',
-               timeout: 1000,
-               error: function() {
-                       alert('Error loading XML document');
-               },
-               success: function(xml) {
-                       var oldDistName = $("#select-admin-distribution option:selected").val();
-                       var find = false;
-
-                       // remove old select options
-                       $("#select-admin-distribution").empty();
-
-                       $(xml).find("Distribution").find("Name").each(function(){
-                               var name = $(this).text();
-       
-                               if( oldDistName == name ) {
-                                       $("#select-admin-distribution").append("<option value=\'"+name+"\' selected=\"selected\">"+name+"</option>");
-                                       find = true;
-                                       
-                               } else {
-                                       $("#select-admin-distribution").append("<option value=\'"+name+"\'>"+name+"</option>");
-                               }
-                       });
-       
-                       /* default distribution selection */
-                       if(!find) {
-                               $("#select-admin-distribution option:eq(0)").attr("selected", "selected");
-                       }
-
-                       $("#select-admin-distribution").selectmenu('refresh');
-       
-                       // query distributino info
-                       queryDistributionInfo();
-               }
-       });
-}
-
-function setupModifyBinaryProject() {
-       var projectName = localStorage.projectName;
-       var packageName = document.getElementById('modifyBinaryPackageName:'+projectName).innerHTML;
-
-       document.getElementById('popup:modifyBinaryOldProjectName').value = projectName;
-       document.getElementById('popup:modifyBinaryNewProjectName').value = projectName;
-       document.getElementById('popup:modifyBinaryProjectPassword').value = "";
-       document.getElementById('popup:modifyBinaryPackageName').value = packageName;
-}
-
-function setupModifyGitProject() {
-       var projectName = localStorage.projectName;
-       var projectAddress = document.getElementById('modifyGitProjectAddress:'+projectName).innerHTML;
-       var projectBranch = document.getElementById('modifyGitProjectBranch:'+projectName).innerHTML;
-
-       document.getElementById('popup:modifyGitOldProjectName').value = projectName;
-       document.getElementById('popup:modifyGitNewProjectName').value = projectName;
-       document.getElementById('popup:modifyGitProjectPassword').value = "";
-       document.getElementById('popup:modifyGitProjectAddress').value = projectAddress;
-       document.getElementById('popup:modifyGitProjectBranch').value = projectBranch;
-
-       $.ajax({
-               url: baseUrl+'/admin/queryAdminAllOS',
-               type: 'GET',
-               dataType: 'xml',
-               timeout: 1000,
-               error: function() {
-                       alert('Error loading XML document');
-               },
-               success: function(xml) {
-                       var osList = $(xml).find("AllOS").find("Name");
-                       var selectedOsList = [];
-                       var projectName = localStorage.projectName;
-       
-                       var osListElement = document.getElementById('adminGitProjectTableOsList:'+projectName);
-                       for(var i = 0; i < osListElement.childNodes.length; i++)
-                       {
-                               selectedOsList.push(osListElement.childNodes[i].innerHTML);
-                       }
-
-                       fieldset = document.getElementById('popup:modifyGitProjectOs');
-                       /* remove all table rows */
-                       while(fieldset.hasChildNodes())
-                       {
-                               fieldset.removeChild(fieldset.firstChild);
-                       }
-        
-                       legend = document.createElement('legend');
-                       legend.innerHTML = "Project os list";
-                       fieldset.appendChild(legend);
-        
-                       osList.each(function(){
-                               var osName = $(this).text();
-        
-                               var input = document.createElement('input');
-                               input.type = 'checkbox';
-                               input.id = 'popup:modifyGitProjectOs:'+osName;
-                               input.name = 'popup:modifyGitProjectOs'
-                               input.value = osName;
-                               input.setAttribute('class', 'popup:modifyGitProjectOs');
-                               if(contains(selectedOsList, osName))
-                               {
-                                       input.setAttribute('checked', 'checked');
-                               }
-        
-                               var label = document.createElement('label');
-                               label.setAttribute('for', 'popup:modifyGitProjectOs:'+osName);
-                               label.innerHTML = osName;
-                               
-                               fieldset.appendChild(input);
-                               fieldset.appendChild(label);
-                       });
-        
-                       $('.popup\\:modifyGitProjectOs').checkboxradio();
-               }
-       });
-}
-
-function setupModifyDistribution() {
-       var distName = $("#select-admin-distribution option:selected").val();
-       var packageServerUrl = document.getElementById("ProjectTable:packageServerUrl").innerHTML;
-       var packageServeraddress = document.getElementById("ProjectTable:packageServerAddress").innerHTML;
-       var serverStatus = document.getElementById("ProjectTable:distributionStatus").innerHTML;
-
-       document.getElementById('popup:modifyPackageServerUrl').value = packageServerUrl;
-       document.getElementById('popup:modifyPackageServerAddress').value = packageServeraddress;
-       document.getElementById('popup:modifyDistributionStatus').value = serverStatus; 
-}
-
-function setupAddGitProject() {
-       $.ajax({
-               url: baseUrl+'/admin/queryAdminAllOS',
-               type: 'GET',
-               dataType: 'xml',
-               timeout: 1000,
-               error: function() {
-                       alert('Error loading XML document');
-               },
-               success: function(xml) {
-                       var osList = $(xml).find("AllOS").find("Name");
-
-                       fieldset = document.getElementById('popup:addGitProjectOs');
-                       /* remove all table rows */
-                       while(fieldset.hasChildNodes())
-                       {
-                               fieldset.removeChild(fieldset.firstChild);
-                       }
-        
-                       legend = document.createElement('legend');
-                       legend.innerHTML = "Project os list";
-                       fieldset.appendChild(legend);
-        
-                       osList.each(function(){
-                               var osName = $(this).text();
-        
-                               var input = document.createElement('input');
-                               input.type = 'checkbox';
-                               input.id = 'popup:addGitProjectOsCheckbox:'+osName;
-                               input.value = osName;
-                               input.setAttribute('class', 'popup:addGitProjectOsCheckbox');
-                               input.setAttribute('checked', 'checked');
-        
-                               var label = document.createElement('label');
-                               label.setAttribute('for', 'popup:addGitProjectOsCheckbox:'+osName);
-                               label.innerHTML = osName;
-                               
-                               fieldset.appendChild(input);
-                               fieldset.appendChild(label);
-                       });
-        
-                       $('.popup\\:addGitProjectOsCheckbox').checkboxradio();
-               }
-       });
-}
-
 
diff --git a/dibs-web/public/javascripts/admin-server-add.js b/dibs-web/public/javascripts/admin-server-add.js
new file mode 100644 (file)
index 0000000..ca5e508
--- /dev/null
@@ -0,0 +1,105 @@
+function adminServerAddSupportedOsInit() {
+       // Remove select option
+       $('#adminServer-AddSupportedOs-OsCategory').empty();
+
+       queryAllOSCategory(function(xml){
+               $(xml).find("Data").find("OsCategoryName").each(function(){
+                       var name = $(this).text();
+
+                       $('#adminServer-AddSupportedOs-OsCategory').append("<option value=\'"+name+"\'>"+name+"</option>");
+       
+                       $('#adminServer-AddSupportedOs-OsCategory').selectmenu('refresh');
+               });
+       });
+}
+
+function adminServerAddRemoteBuildServer() {
+       var changeInfoList = [];
+       var changeInfoItem;
+
+       var address = document.getElementById("adminServer-AddRemoteBuildServer-Address").value;
+       var description = document.getElementById("adminServer-AddRemoteBuildServer-Description").value;
+
+       if(address == ""){
+               alert("You must input server address");
+               return;
+       }
+
+       changeInfoItem = {"Address":address, "Description":description};
+       changeInfoList.push(changeInfoItem);
+       
+       addRemoteBuildServer(changeInfoList, function () {
+               document.getElementById('adminServer-AddRemoteBuildServer-Address').value = "";
+               document.getElementById('adminServer-AddRemoteBuildServer-Description').value = "";
+
+               $.mobile.changePage("#adminServer"); 
+       });
+}
+
+function adminServerAddSupportedOs() {
+       var changeInfoList = [];
+       var changeInfoItem;
+
+       var osName = document.getElementById("adminServer-AddSupportedOs-OsName").value;
+       var osCategory = $("#adminServer-AddSupportedOs-OsCategory option:selected").val();
+
+       if(osName == ""){
+               alert("You must input server address");
+               return;
+       }
+
+       changeInfoItem = {"Name":osName, "OsCategory":osCategory};
+       changeInfoList.push(changeInfoItem);
+       
+       addSupportedOS(changeInfoList, function () {
+               document.getElementById('adminServer-AddSupportedOs-OsName').value = "";
+
+               $.mobile.changePage("#adminServer"); 
+       });
+}
+
+function adminServerAddOSCategory() {
+       var changeInfoList = [];
+       var changeInfoItem;
+
+       var categoryName = document.getElementById("adminServer-AddOsCategory-Name").value;
+
+       if(categoryName == ""){
+               alert("You must input category name");
+               return;
+       }
+
+       changeInfoItem = {"Name":categoryName};
+       changeInfoList.push(changeInfoItem);
+       
+       addOSCategory(changeInfoList, function () {
+               document.getElementById('adminServer-AddOsCategory-Name').value = "";
+
+               $.mobile.changePage("#adminServer"); 
+       }); 
+} 
+
+function adminServerAddServerInfo() {
+       var property = document.getElementById('adminServer-addServerInfo-property').value;
+       var value = document.getElementById('adminServer-addServerInfo-value').value;
+       var changeInfoList = [];
+       var changeInfoItem;
+
+       if(property == ""){
+               alert("property is empty");
+               return;
+       }
+
+       if(value == ""){
+               alert("value is empty");
+               return;
+       }
+
+       changeInfoItem = {"Property":property, "Value":value};
+       changeInfoList.push(changeInfoItem);
+       
+       addServerInfo(changeInfoList, function () {
+               $.mobile.changePage("#adminServer"); 
+       });
+}
+
diff --git a/dibs-web/public/javascripts/admin-server-modify.js b/dibs-web/public/javascripts/admin-server-modify.js
new file mode 100644 (file)
index 0000000..324b797
--- /dev/null
@@ -0,0 +1,97 @@
+function adminServerModifyRemoteBuildServerInit() {
+       var serverAddress = localStorage.remoteBuildServerAddress;
+       var serverDescription = localStorage.remoteBuildServerDescription;
+
+       document.getElementById('adminServer-modifyRemoteBuildServer-OldAddress').value = serverAddress;
+       document.getElementById('adminServer-modifyRemoteBuildServer-newAddress').value = serverAddress;
+       document.getElementById('adminServer-modifyRemoteBuildServer-description').value = serverDescription 
+}
+
+function adminServerModifyServerInfoInit(property, value) {
+       document.getElementById('adminServer-modifyServerInfo-property').value = property;
+       document.getElementById('adminServer-modifyServerInfo-value').value = value;
+}
+
+function adminServerModifySupportedOSInit(osName, osCategory) {
+       // Remove select option
+       $('#adminServer-ModifySupportedOs-OsCategory').empty();
+
+       document.getElementById('adminServer-ModifySupportedOs-OldOsName').value = osName;
+       document.getElementById('adminServer-MoidfySupportedOs-OsName').value = osName;
+
+       queryAllOSCategory( function(xml){
+               $(xml).find("Data").find("OsCategoryName").each(function(){
+                       var name = $(this).text();
+                       var option = ""
+                       
+                       if(name == osCategory) {
+                               option = '<option value="'+name+'" selected="selected">'+name+'</option>'
+                       } else {
+                               option = '<option value="'+name+'">'+name+'</option>'
+                       }
+
+                       $('#adminServer-ModifySupportedOs-OsCategory').append(option);
+                       $('#adminServer-ModifySupportedOs-OsCategory').selectmenu("refresh");
+               });
+       });
+}
+
+function adminServerModifyRemoteBuildServer() {
+       var changeInfoList = [];
+       var changeInfoItem;
+       var serverAddress = document.getElementById('adminServer-modifyRemoteBuildServer-OldAddress').value;
+       var newServerAddress = document.getElementById('adminServer-modifyRemoteBuildServer-newAddress').value;
+       var description = document.getElementById('adminServer-modifyRemoteBuildServer-description').value;
+
+       if(serverAddress == ""){
+               alert("server address is invalid");
+               return;
+       }
+
+       changeInfoItem = {"Type":"ModifyServer", "Address":serverAddress, "NewAddress":newServerAddress, "Description":description};
+       changeInfoList.push(changeInfoItem);
+
+       modifyRemoteBuildServer(changeInfoList, function () {
+               $.mobile.changePage("#adminServer"); 
+       });
+}
+
+function adminServerModifySupportedOS() {
+       var changeInfoList = [];
+       var changeInfoItem;
+       var oldOsName = document.getElementById('adminServer-ModifySupportedOs-OldOsName').value;
+       var osName = document.getElementById('adminServer-MoidfySupportedOs-OsName').value;
+       var osCategory = $("#adminServer-ModifySupportedOs-OsCategory option:selected").val();
+
+       changeInfoItem = {"Name":oldOsName, "NewName":osName, "OsCategory":osCategory};
+       changeInfoList.push(changeInfoItem);
+
+       modifySupportedOS(changeInfoList, function () {
+               $.mobile.changePage("#adminServer"); 
+       });
+}
+
+function adminServerModifyServerInfo() {
+       var property = document.getElementById('adminServer-modifyServerInfo-property').value;
+       var value = document.getElementById('adminServer-modifyServerInfo-value').value;
+       var changeInfoList = [];
+       var changeInfoItem;
+
+       if(property == ""){
+               alert("property is empty");
+               return;
+       }
+
+       if(value == ""){
+               alert("value is empty");
+               return;
+       }
+
+       changeInfoItem = {"Property":property, "Value":value};
+       changeInfoList.push(changeInfoItem);
+       
+       modifyServerInfo(changeInfoList, function () {
+               $.mobile.changePage("#adminServer"); 
+       });
+}
+
diff --git a/dibs-web/public/javascripts/admin-server-remove.js b/dibs-web/public/javascripts/admin-server-remove.js
new file mode 100644 (file)
index 0000000..6a4b570
--- /dev/null
@@ -0,0 +1,70 @@
+function adminServerRemoveOSCategoryInit() {
+       // Remove select option
+       $('#adminServer-RemoveOSCategory-CategorySelect').empty();
+
+       queryAllOSCategory(function(xml){
+               $(xml).find("Data").find("OsCategoryName").each(function(){
+                       var name = $(this).text();
+
+                       $('#adminServer-RemoveOSCategory-CategorySelect').append("<option value=\'"+name+"\'>"+name+"</option>");
+                       
+                       $('#adminServer-RemoveOSCategory-CategorySelect').selectmenu('refresh');
+               });
+       });
+}
+
+function adminServerRemoveOSCategory() {
+       var changeInfoList = [];
+       var changeInfoItem;
+       var osCategory = $("#adminServer-RemoveOSCategory-CategorySelect option:selected").val();
+
+       if(osCategory == ""){
+               alert("Os category is invalid");
+               return;
+       }
+
+       changeInfoItem = {"Name":osCategory};
+       changeInfoList.push(changeInfoItem);
+
+       removeOSCategory(changeInfoList, function () {
+               $.mobile.changePage("#adminServer"); 
+       });
+}
+
+function adminServerRemoveSupportedOS() {
+       var changeInfoList = [];
+       var changeInfoItem;
+       var oldOsName = document.getElementById('adminServer-ModifySupportedOs-OldOsName').value;
+       var osName = document.getElementById('adminServer-MoidfySupportedOs-OsName').value;
+
+       if(oldOsName != osName ){
+               alert("Remove command must be same to original os name");
+               return;
+       }
+
+       changeInfoItem = {"Name":osName};
+       changeInfoList.push(changeInfoItem);
+
+       removeSupportedOS(changeInfoList, function () {
+               $.mobile.changePage("#adminServer"); 
+       });
+}
+
+function adminServerRemoveServerInfo() {
+       var property = document.getElementById('adminServer-modifyServerInfo-property').value;
+       var changeInfoList = [];
+       var changeInfoItem;
+
+       if(property == ""){
+               alert("property is empty");
+               return;
+       }
+
+       changeInfoItem = {"Property":property};
+       changeInfoList.push(changeInfoItem);
+       
+       removeServerInfo(changeInfoList, function () {
+               $.mobile.changePage("#adminServer"); 
+       });
+}
+
index f45323eb1b27c3cf58da3ecd27303006da5bd3ba..e6068d6aea20ae6987eb594b7d8a8d4382c1fc23 100644 (file)
+function adminServerInit() {
+       $('#adminServer-RemoteBuildServer').collapsible();
+
+       queryAllServer( function (xml) {
+               var serverConfig = $(xml).find("Data").find("ServerConfig");
+               var buildServerList = $(xml).find("Data").find("RemoteBuildServer");
+               var syncPackageServerList = $(xml).find("Data").find("SyncPackageServer");
+               adminServerInitServerInfo(serverConfig);
+               adminServerRemoteInitRemoteBuildServer(buildServerList);
+       });
 
-function fillServerTable(serverList){
-       var serverTable = document.getElementById("serverTable");
+       queryAllOS( function (xml) {
+               $("#adminServer-SupportedOS").empty();
 
-       /* remove all table rows */
-       while(serverTable.hasChildNodes())
-       {
-               serverTable.removeChild(serverTable.firstChild);
-       }
+               $(xml).find("Data").find("OS").each(function(){
+                       var osName = $(this).find("OsName").text();
+                       var osCategory = $(this).find("OsCategory").text();
 
-       /* create table header */
-       var row = groupTable.insertRow(-1);
-       var tableHeader = "";
-       tableHeader = "<tr><th> Server Address </th><th> Modify </th><th> Delete </th></tr>";
-       $("#serverTable").append(tableHeader);
-  
-       var index = 2;
+                       var li = '<li><a href="#adminServerModifySupportedOS" ';
+                       li += 'onClick="adminServerModifySupportedOSInit(\''+osName+'\',\''+osCategory+'\')" ';
+                       li += 'data-rel="dialog">';
+                       li += '<h3>'+osName+'</h3>';
+                       li += '<p>OS category : '+osCategory+'</p>';
+                       li += '</a></li>';
 
-       serverList.each(function(){
-               var address = $(this).find("Address").text();
-               var row = serverTable.insertRow(-1);
-
-               cell = row.insertCell(-1);
-               cell.setAttribute('id','serverAddressTable'+':'+index);
-               cell.innerHTML = address
-
-               cell = row.insertCell(-1);
-               var button = document.createElement('a');
-               button.setAttribute('href','#modifyServer');
-               button.setAttribute('data-role','button');
-               button.setAttribute('data-rel','dialog');
-               button.setAttribute('data-mini','true');
-               button.setAttribute('onClick','popupModifyServer(\"'+index+'\")');
-               button.setAttribute('class','serverTableCellButton');
-               button.setAttribute('name', address);
-               button.innerHTML = " "
-               cell.appendChild(button);
-
-               cell = row.insertCell(-1);
-               var button = document.createElement('a');
-               button.setAttribute('href','#adminServer');
-               button.setAttribute('data-role','button');
-               button.setAttribute('data-mini','true');
-               button.setAttribute('onClick','removeServer(\"'+index+'\")');
-               button.setAttribute('class','serverTableCellButton');
-               button.setAttribute('name', address);
-               button.innerHTML = " "
-               cell.appendChild(button);
-        
-               index = index + 1;
-       });
-       
-       $(".serverTableCellButton").button();
-}
+                       $("#adminServer-SupportedOS").append(li);
+               });
 
-function addServer() {
-       var changeInfoList = [];
-       var changeInfoItem;
-
-       var serverAddress = document.getElementById("popup:addServerAddress").value;
-
-       if(serverAddress == ""){
-               alert("You must input server address");
-               return;
-       }
-
-       changeInfoItem = {"Type":"AddServer", "Address":serverAddress};
-       changeInfoList.push(changeInfoItem);
-       
-       $.ajax({
-               type: "POST",
-               url: baseUrl+"/admin/changeAdminServer",
-               data: JSON.stringify({ ChangeInfoList: changeInfoList }),
-               contentType: "application/json; charset=utf-8",
-               dataType: "json",
-               success: function() {
-                       document.getElementById("popup:addServerAddress").value = "";
-                       $.mobile.changePage("#adminServer"); 
-               },
-               error: function(errMsg) {
-                       alert(errMsg.responseText);
-                       $.mobile.changePage("#adminServer"); 
-               }
+               $("#adminServer-SupportedOS").listview('refresh');
        });
 }
 
-function removeServer(index) {
-       var serverAddress = document.getElementById("serverAddressTable:"+index).innerHTML;
-       var changeInfoList = [];
-       var changeInfoItem;
-
-       if(serverAddress == ""){
-               alert("server address is invalid");
-               return;
-       }
-
-       changeInfoItem = {"Type":"RemoveServer", "Address":serverAddress};
-       changeInfoList.push(changeInfoItem);
-       
-       $.ajax({
-               type: "POST",
-               url: baseUrl+"/admin/changeAdminServer",
-               data: JSON.stringify({ ChangeInfoList: changeInfoList }),
-               contentType: "application/json; charset=utf-8",
-               dataType: "json",
-               success: function() {
-                       document.getElementById("popup:addServerAddress").value = "";
-                       $.mobile.changePage("#adminServer"); 
-               },
-               error: function(errMsg) {
-                       alert(errMsg.responseText);
-                       $.mobile.changePage("#adminServer"); 
-               }
-       });
-}
+function adminServerInitServerInfo(serverConfig){
+       $("#adminServer-ServerInfo").empty();
 
-function popupModifyServer(index) {
-       localStorage.serverTableIndex = index;
-}
+       serverConfig.each(function(){
+               var property = $(this).find("Property").text();
+               var value = $(this).find("Value").text();
 
-function setupModifyServer() {
-       var index = localStorage.serverTableIndex;
-       var serverAddress = document.getElementById("serverAddressTable:"+index).innerHTML;
+               var li = '<li><a href="#adminServerModifyServerInfo" ';
+               li += 'onClick="adminServerModifyServerInfoInit(\''+property+'\',\''+value+'\')" ';
+               li += 'data-rel="dialog">';
+               li += '<p>'+property+' : '+value+'</p>';
+               li += '</a></li>';
+               $("#adminServer-ServerInfo").append(li);
+       });
 
-       document.getElementById('popup:modifyServerOldAddress').value = serverAddress;
-       document.getElementById('popup:modifyServerNewAddress').value = serverAddress;
+       $("#adminServer-ServerInfo").listview('refresh');
 }
 
-function modifyServer() {
-       var changeInfoList = [];
-       var changeInfoItem;
-       var serverAddress = document.getElementById('popup:modifyServerOldAddress').value;
-       var newServerAddress = document.getElementById('popup:modifyServerNewAddress').value;
-
-       if(serverAddress == ""){
-               alert("server address is invalid");
-               return;
-       }
-
-       changeInfoItem = {"Type":"ModifyServer", "Address":serverAddress, "NewAddress":newServerAddress};
-       changeInfoList.push(changeInfoItem);
-       
-       $.ajax({
-               type: "POST",
-               url: baseUrl+"/admin/changeAdminServer",
-               data: JSON.stringify({ ChangeInfoList: changeInfoList }),
-               contentType: "application/json; charset=utf-8",
-               dataType: "json",
-               success: function() {
-                       $.mobile.changePage("#adminServer"); 
-               },
-               error: function(errMsg) {
-                       alert(errMsg.responseText);
-                       $.mobile.changePage("#adminServer"); 
-               }
+function adminServerRemoteInitRemoteBuildServer(serverList){
+       $("#adminServer-RemoteBuildServer").empty();
+
+       serverList.each(function(){
+               var address = $(this).find("Address").text();
+               var description = $(this).find("Description").text();
+
+               var li = '<li><a href="#adminServerModifyRemoteBuildServer" ';
+               li += 'onClick="popupModifyRemoteBuildServerInfo(\''+address+'\',\''+description+'\')" ';
+               li += 'data-rel="dialog">';
+               li += '<h3>'+address+'</h3>';
+               li += '<p>Description : '+$(this).find("Description").text()+'</p>';
+               li += '</a></li>';
+                       
+               $("#adminServer-RemoteBuildServer").append(li);
        });
+
+       $("#adminServer-RemoteBuildServer").listview('refresh');
 }
 
-function queryAdminServer() {
-       $.ajax({
-               url: baseUrl+'/admin/queryAdminServer',
-               type: 'GET',
-               dataType: 'xml',
-               timeout: 1000,
-               error: function() {
-                       alert('Error loading XML document');
-               },
-               success: function(xml) {
-                       var serverList = $(xml).find("Servers").find("Server");
-                       fillServerTable(serverList);
-               }
-       });
+function popupModifyRemoteBuildServerInfo(address, description) {
+       localStorage.remoteBuildServerAddress = address;
+       localStorage.remoteBuildServerDescription = description;
 }
+
diff --git a/dibs-web/public/javascripts/admin-user-modify.js b/dibs-web/public/javascripts/admin-user-modify.js
new file mode 100644 (file)
index 0000000..e950655
--- /dev/null
@@ -0,0 +1,43 @@
+function adminUserModifyPopupInit() {
+       var index = localStorage.userTableIndex;
+       var userName = document.getElementById("userTableName:"+index).innerHTML;
+       var email = document.getElementById("userTableEmail:"+index).innerHTML;
+       var group = document.getElementById("userTableGroup:"+index).innerHTML;
+
+       document.getElementById('popup:modifyUserName').value = userName;
+       mailElement = document.getElementById('popup:modifyUserEmail');
+       mailElement.value = email;
+       mailElement.setAttribute('disabled', 'disabled');
+
+       queryAllGroup( function(xml) {
+               var groupList = $(xml).find("Data").find("GroupName");
+               
+               $("#popup\\:modifyUserGroup").empty();
+
+               groupList.each( function(){
+                       var groupName = $(this).text();
+                       if( groupName == group ) {
+                               $("#popup\\:modifyUserGroup").append("<option value=\'"+groupName+"\' selected=\"selected\">"+groupName+"</option>");
+                       } else {
+                               $("#popup\\:modifyUserGroup").append("<option value=\'"+groupName+"\'>"+groupName+"</option>");
+                       }
+
+                       $("#popup\\:modifyUserGroup").selectmenu('refresh');
+               });
+       });
+}
+
+function adminUserModifyPopupModify() {
+       var userName = document.getElementById("popup:modifyUserName").value;
+       var email = document.getElementById("popup:modifyUserEmail").value;
+       var groupName = $("#popup\\:modifyUserGroup option:selected").val();
+
+       var changeInfoList = [];
+       var changeInfoItem;
+       changeInfoItem = {"Type":"ModifyUser", "Email":email, "UserName":userName, "GroupName":groupName};
+       changeInfoList.push(changeInfoItem);
+
+       changeUser(changeInfoList, function () {
+       });
+}
+
index 0c3a88f4c7d939820a560313ad6009a1296c042a..9e84e2303f409cf8544f4d75e65ea59d64e6b761 100644 (file)
@@ -1,4 +1,4 @@
-function fillUserTable(userList) {
+function adminUserInit() {
        var userTable = document.getElementById("adminUserTable");
 
        /* remove all table rows */
@@ -8,11 +8,18 @@ function fillUserTable(userList) {
        }
 
        /* create table header */
-       var row = userTable.insertRow(-1);
-       var tableHeader = "";
-       tableHeader = "<tr><th>User name</th><th>Email</th><th>Group</th><th>Modify</th><th>Delete</th></tr>";
+       var tableHeader = "<tr><th>User name</th><th>Email</th><th>Group</th><th>Modify</th><th>Delete</th></tr>";
        $("#adminUserTable").append(tableHeader);
 
+       queryAllUser( function(xml) {
+               var userList = $(xml).find("Data").find("User");
+
+               adminUserFillTable(userList);
+       });
+}
+
+function adminUserFillTable(userList) {
+       var userTable = document.getElementById("adminUserTable");
        var index = 2;
 
        userList.each(function(idx){
@@ -37,102 +44,34 @@ function fillUserTable(userList) {
 
                cell = row.insertCell(-1);
                var button = document.createElement('a');
-               button.setAttribute('href','#modifyUser');
+               button.setAttribute('href','#adminUserModifyPopup');
                button.setAttribute('data-role','button');
                button.setAttribute('data-rel','dialog');
-               button.setAttribute('data-mini','true');
-               button.setAttribute('onClick','popupModifyUser(\"'+index+'\")');
-               button.setAttribute('id',"input:modifyUser:"+index);
+               button.setAttribute('class','adminUserTableButton');
+               button.setAttribute('onClick','adminUserModifyPopupSetup(\"'+index+'\")');
                button.innerHTML = " "
                cell.appendChild(button);
-               $("#input\\:modifyUser\\:"+index).button();
 
                cell = row.insertCell(-1);
-               var checkbox= document.createElement('input');
-               checkbox.setAttribute('type','button');
-               checkbox.setAttribute('id','userDeleteButton'+':'+index);
-               checkbox.setAttribute('name',email);
-               checkbox.setAttribute('data-mini','true');
-               checkbox.setAttribute('onClick','removeUser('+index+')');
-               cell.appendChild(checkbox);
-               $("#userDeleteButton\\:"+index).button();
+               var button = document.createElement('input');
+               button.setAttribute('type','button');
+               button.setAttribute('name',email);
+               button.setAttribute('class','adminUserTableButton');
+               button.setAttribute('onClick','adminUserRemoveUser('+index+')');
+               cell.appendChild(button);
 
                index = index + 1;
        });
-}
 
-function popupModifyUser(index) {
-       localStorage.userTableIndex = index;
+       $(".adminUserTableButton").button();
 }
 
-function changeUserInfo() {
-       var userTable = document.getElementById("adminUserTable");
-       var changeInfoList = [];
-
-       var deleteArray = [];
-       deleteArray = document.getElementsByName('deleteCheckbox');
-       for(var i = 0; i < deleteArray.length; i++) {
-               if (deleteArray[i].checked) {
-                       var rowLine = deleteArray[i].id.split(":")[1];
-                       var email = deleteArray[i].id.split(":")[2];
-
-                       changeItem = {"Type":"RemoveUser", "Email" : email};
-                       changeInfoList.push(changeItem);
-                       userTable.deleteRow(rowLine);
-               }
-       }
-
-       var selectArray = [];
-       selectArray = document.getElementsByName('groupSelect');
-       for(var i = 0; i < selectArray.length; i++) {
-               email = selectArray[i].id.split(":")[1];
-               group = selectArray[i].value;
-               changeItem = {"Type":"ChangeGroup", "Email" : email, "groupName" : group};
-               changeInfoList.push(changeItem);
-       }
-       $.ajax({
-               type: "POST",
-               url: baseUrl+"/admin/changeAdminUser",
-               data: JSON.stringify({ ChangeInfoList: changeInfoList }),
-               contentType: "application/json; charset=utf-8",
-               dataType: "json",
-               success: function(succMsg) {
-                       queryAdminUser();
-               },
-               error: function(errMsg) {
-                       alert(errMsg);
-               }
-       });
-}
-
-function modifyUser() {
-       var userName = document.getElementById("popup:modifyUserName").value;
-       var email = document.getElementById("popup:modifyUserEmail").value;
-       var groupName = $("#popup\\:modifyUserGroup option:selected").val();
-
-       var changeInfoList = [];
-       var changeInfoItem;
-       changeInfoItem = {"Type":"ModifyUser", "Email":email, "UserName":userName, "GroupName":groupName};
-       changeInfoList.push(changeInfoItem);
-
-       $.ajax({
-               type: "POST",
-               url: baseUrl+"/admin/changeAdminUser",
-               data: JSON.stringify({ ChangeInfoList: changeInfoList }),
-               contentType: "application/json; charset=utf-8",
-               dataType: "json",
-               success: function() {
-                       $.mobile.changePage("#adminUser"); 
-               },
-               error: function(errMsg) {
-                       alert(errMsg);
-                       $.mobile.changePage("#adminUser"); 
-               }
-       });
+function adminUserModifyPopupSetup(index) {
+       localStorage.userTableIndex = index;
 }
 
-function removeUser(index) {
-       var email = document.getElementById("userDeleteButton:"+index).name;
+function adminUserRemoveUser(index) {
+       var email = document.getElementById("userTableEmail:"+index).innerHTML;
 
        var r=confirm("User ["+email+"] is removed!!!");
        if (r==false)
@@ -145,72 +84,8 @@ function removeUser(index) {
        changeInfoItem = {"Type":"RemoveUser", "Email":email};
        changeInfoList.push(changeInfoItem);
 
-       $.ajax({
-               type: "POST",
-               url: baseUrl+"/admin/changeAdminUser",
-               data: JSON.stringify({ ChangeInfoList: changeInfoList }),
-               contentType: "application/json; charset=utf-8",
-               dataType: "json",
-               success: function() {
-                       $.mobile.changePage("#adminUser"); 
-               },
-               error: function(errMsg) {
-                       alert(errMsg);
-                       $.mobile.changePage("#adminUser"); 
-               }
-       });
-}
-
-function queryAdminUser() {
-       $.ajax({
-               url: baseUrl+'/admin/queryAdminUser',
-               type: 'GET',
-               dataType: 'xml',
-               timeout: 1000,
-               error: function() {
-                       alert('Error loading XML document');
-               },
-               success: function(xml) {
-                       var userList = $(xml).find("Users").find("User");
-
-                       fillUserTable(userList);
-               }
+       removeUser(changeInfoList, function () {
+               $.mobile.changePage("#adminUser");
        });
 }
 
-function setupModifyUser() {
-       var index = localStorage.userTableIndex;
-       var userName = document.getElementById("userTableName:"+index).innerHTML;
-       var email = document.getElementById("userTableEmail:"+index).innerHTML;
-       var group = document.getElementById("userTableGroup:"+index).innerHTML;
-
-       document.getElementById('popup:modifyUserName').value = userName;
-       mailElement = document.getElementById('popup:modifyUserEmail');
-       mailElement.value = email;
-       mailElement.setAttribute('disabled', 'disabled');
-
-       $.ajax({
-               url: baseUrl+'/admin/queryAdminAllGroupName',
-               type: 'GET',
-               dataType: 'xml',
-               timeout: 1000,
-               error: function() {
-                       alert('Error loading XML document');
-               },
-               success: function(xml) {
-                       var groupList  = $(xml).find("AllGroup").find("Name");
-                       $("#popup\\:modifyUserGroup").empty();
-
-                       groupList.each(function(){
-                               var groupName = $(this).text();
-                               if( groupName == group ) {
-                                       $("#popup\\:modifyUserGroup").append("<option value=\'"+groupName+"\' selected=\"selected\">"+groupName+"</option>");
-                               } else {
-                                       $("#popup\\:modifyUserGroup").append("<option value=\'"+groupName+"\'>"+groupName+"</option>");
-                               }
-                       });
-
-                       $("#popup\\:modifyUserGroup").selectmenu('refresh');
-               }
-       });
-}
diff --git a/dibs-web/public/javascripts/build.js b/dibs-web/public/javascripts/build.js
new file mode 100644 (file)
index 0000000..88b1426
--- /dev/null
@@ -0,0 +1,259 @@
+function buildInit() {
+       queryDistribution( function(xml) {
+               // remove old select options
+               $("#select-distribution").empty();
+       
+               $(xml).find("Data").find("DistributionName").each(function(){
+                       var name = $(this).text();
+       
+                       $("#select-distribution").append("<option value=\'"+name+"\'>"+name+"</option>");
+               });
+       
+               /* default distribution selection */
+               $("#select-distribution option:eq(0)").attr("selected", "selected");
+               $("#select-distribution").selectmenu('refresh');
+       
+               // query Project list
+               buildQueryProjectList();
+       });
+}
+
+function buildQueryProjectList() {
+       var distName = $("#select-distribution option:selected").val();
+
+       queryProjectsInDistribution( distName, function(xml) {
+               buildInitTable();
+               var xmlBody = $(xml).find("Data");
+               buildAddTableRow( xmlBody.find("BuildServerInfo").find("supportedOs"),
+                                        xmlBody.find("Project"),
+                                        xmlBody.find("OtherProject"));
+               buildAddBinaryTableRow( xmlBody.find("BinaryProject"),
+                                        xmlBody.find("OtherBinaryProject"));
+       });
+}
+
+
+function buildSelectAll(element) {
+       var checkboxes = document.getElementsByName(element.id);
+       var checked = element.checked;
+       for(var i in checkboxes) {
+               if(!checkboxes[i].disabled) { 
+                       checkboxes[i].checked = checked;
+               } 
+       }
+}
+
+function contains(a, obj) {
+       for (var i = 0; i < a.length; i++) {
+               if (a[i] == obj) {
+                       return true; 
+               }
+       }
+       return false; 
+}
+
+function buildInitTable() {
+       /* project table */
+       var projectTable = document.getElementById("projectTable");
+       
+       /* binary project table */
+       var binaryProjectTable = document.getElementById("binaryProjectTable");
+       
+       /* remove all table rows */
+       while(projectTable.hasChildNodes())
+       {
+               projectTable.removeChild(projectTable.firstChild);
+       }
+       while(binaryProjectTable.hasChildNodes())
+       {
+               binaryProjectTable.removeChild(binaryProjectTable.firstChild);
+       }
+}
+
+function buildAddTableRow(supportedOs, projectList, otherProjectList) {
+       // Table header
+       var idx = 0;
+       var tableHeader = "";
+       var osArray = new Array();
+       var projectTable = document.getElementById("projectTable");
+
+       // Project table header
+       tableHeader = "<tr><th>Project</th>";
+       supportedOs.each(function(){
+               var osName = $(this).text();
+               tableHeader = tableHeader + "<th>"+osName+"</th>";
+
+               osArray[idx] = osName;
+               idx++;
+       });
+
+       tableHeader = tableHeader + "<th>ALL</th></tr>";
+       $("#projectTable").append(tableHeader);
+
+       // table row - projectList
+       var index = 2;
+
+       projectList.each(function(){
+               var name = $(this).find("ProjectName").text();
+               var osLists = $(this).find("OsList").text();
+               var osList = osLists.split(",");
+       
+               var row = projectTable.insertRow(-1);
+               
+               var cell = row.insertCell(0);
+               cell.setAttribute('style', 'text-align: left');
+               cell.setAttribute('bgcolor', '#dcddc0');
+               cell.innerHTML = name;
+               
+               for (i=0;i<osArray.length;i++)
+               {
+                       var cell = row.insertCell(-1);
+                       var os = osArray[i];
+       
+                       cell.setAttribute('id', "table"+":"+name+":"+os);
+                       cell.setAttribute('style', 'text-align: center');
+                       cell.setAttribute('bgcolor', '#dcddc0');
+       
+                       var buttonnode = document.createElement('input');
+                       buttonnode.setAttribute('type','checkbox');
+                       buttonnode.setAttribute('id',"table"+":"+name+':'+os);
+                       buttonnode.setAttribute('name','projectBuildCheckbox'+":"+name);
+                       buttonnode.setAttribute('class','projectTableBuildButton');
+                       cell.appendChild(buttonnode);
+
+                       if(!contains(osList, os))
+                       {
+                               buttonnode.setAttribute('disabled','disabled');
+                       }
+               }
+       
+               /* append all checkbox */
+               var cell = row.insertCell(-1);
+               cell.setAttribute('style', 'text-align: center');
+               cell.setAttribute('bgcolor', '#dcddc0');
+       
+               var buttonnode = document.createElement('input');
+               buttonnode.setAttribute('type','checkbox');
+               buttonnode.setAttribute('id','projectBuildCheckbox'+":"+name);
+               buttonnode.setAttribute('name','all-checkbox');
+               buttonnode.setAttribute('class','projectTableAllButton');
+               buttonnode.setAttribute('onClick','buildSelectAll(this)');
+               cell.appendChild(buttonnode);
+       });
+
+       otherProjectList.each(function(){
+               var name =  $(this).find("ProjectName").text();
+               var row = projectTable.insertRow(-1);
+               
+               var cell = row.insertCell(0);
+               cell.setAttribute('style', 'text-align: left');
+               cell.setAttribute('bgcolor', '#c0c0c0');
+               cell.innerHTML = name;
+       
+               /* add empty cell for status */
+               for (i=0;i<osArray.length;i++)
+               {
+                       cell = row.insertCell(-1);
+                       cell.setAttribute('id', "table"+":"+name+"-"+osArray[i]);
+                       cell.setAttribute('style', 'text-align: left');
+                       cell.setAttribute('bgcolor', '#c0c0c0');
+                       cell.innerHTML = ""; 
+               }
+       
+               /* add empty cell for all*/
+               cell = row.insertCell(-1);
+               cell.setAttribute('style', 'text-align: left');
+               cell.setAttribute('bgcolor', '#c0c0c0');
+               cell.innerHTML = "";
+       });
+}
+
+function buildAddBinaryTableRow(binaryProjectList, otherProjectList) {
+       var binaryProjectTable = document.getElementById("binaryProjectTable");
+       var row = binaryProjectTable.insertRow(-1);
+       var thCell = document.createElement('th');
+       thCell.innerHTML = "Project";
+       row.appendChild(thCell);
+       thCell = document.createElement('th');
+       thCell.innerHTML = "Package name";
+       row.appendChild(thCell);
+       thCell = document.createElement('th');
+       thCell.innerHTML = "Register";
+       row.appendChild(thCell);
+
+       /* insert binary project in binary project table */
+       binaryProjectList.each(function(){
+               var name =  $(this).find("ProjectName").text();
+               var packageName =  $(this).find("PackageName").text();
+               var row = '<tr><td bgcolor="#dcddc0" style="text-align:left">'+name+'</td>';
+               row += '<td bgcolor="#dcddc0" style="text-align:left">' + packageName + '</td>'
+               row += '<td bgcolor="#dcddc0" style="text-align:left"><a href="upload.html" onClick="buildUploadBinaryName(\'' +name+'\')" class="binary_project_button" data-role="button" data-ajax="false" data-mini="true">REGISTER</a>';
+               row += '</tr>'
+               
+               $("#binaryProjectTable tr:last").after(row);
+       });
+
+       otherProjectList.each(function(){
+               var name =  $(this).find("ProjectName").text();
+               var packageName =  $(this).find("PackageName").text();
+               var row = binaryProjectTable.insertRow(-1);
+               
+               /* add project name */
+               var cell = row.insertCell(0);
+               cell.setAttribute('style', 'text-align: left');
+               cell.setAttribute('bgcolor', '#c0c0c0');
+               cell.innerHTML = name;
+       
+               /* add package name */
+               cell = row.insertCell(-1);
+               cell.setAttribute('style', 'text-align: left');
+               cell.setAttribute('bgcolor', '#c0c0c0');
+               cell.innerHTML = packageName; 
+       
+               /* add empty cell for register */
+               cell = row.insertCell(-1);
+               cell.setAttribute('style', 'text-align: left');
+               cell.setAttribute('bgcolor', '#c0c0c0');
+               cell.innerHTML = "";
+       });
+
+       $('.binary_project_button').button();
+       $('.binary_project_button').popupWindow({ 
+               height:200, 
+               width:400, 
+               top:50, 
+               left:50 
+       });
+}
+
+function buildBuildProject(type) {
+       var distName = $("#select-distribution option:selected").val();
+       var buildProjectList = [];
+
+       //var node_list = document.getElementsByTagName('input');
+       var node_list = $("#build input")
+       for (var i = 0; i < node_list.length; i++) {
+               var node = node_list[i];
+       
+               if (node.getAttribute('type') == "checkbox") {
+                       if (node.checked == true) {
+                               if (node.getAttribute('name') != "all-checkbox") {
+                                       var prjName = node.id.split(":")[1];
+                                       var osName = node.id.split(":")[2];
+                                       var buildData = { "distribution":distName, "buildType":type, "projectName" : prjName, "os" : osName };
+                                       buildProjectList.push(buildData);
+                               }
+                       }
+               }
+       }
+       
+       buildProject(buildProjectList, function () {
+               alert("Build started! Move to jobs page");
+               $.mobile.changePage("#jobs"); 
+       });
+}
+
+function buildUploadBinaryName(project_name) {
+       localStorage.distibutionName = $("#select-distribution option:selected").val();
+       localStorage.uploadBinaryProjectName = project_name;
+}
diff --git a/dibs-web/public/javascripts/dibs-api.js b/dibs-web/public/javascripts/dibs-api.js
new file mode 100644 (file)
index 0000000..0451011
--- /dev/null
@@ -0,0 +1,253 @@
+// controller: Users
+function signUp(infoList, successFunction) {
+       var url = '/users/signup';
+       postForServer(url, infoList, successFunction);
+}
+
+function queryUserInfo(successFunction) {
+       var url = '/users/query';
+       getInfoFromServer(url, successFunction);
+}
+
+function modifyUserInfo(changeInfoList, successFunction) {
+       var url = '/users/modify';
+       postForServer(url, changeInfoList, successFunction);
+}
+
+// controller: Sessions
+function login(infoList, successFunction) {
+       var url = '/sessions/login';
+       postForServer(url, infoList, successFunction);
+}
+
+// controller: projects
+function queryDistribution(successFunction) {
+       var url = '/projects/queryDistribution';
+       getInfoFromServer(url, successFunction);
+}
+
+// controller : projects
+function buildProject(changeInfoList, successFunction) {
+       var url = '/projects/buildProject';
+       postForServer(url, changeInfoList, successFunction);
+}
+
+function queryProjectsInDistribution(distName, successFunction) {
+       var url = '/projects/queryProjectsInDistribution/' + distName;
+       getInfoFromServer(url, successFunction);
+}
+
+function queryProjectsInfoInDistribution(distName, successFunction) {
+       var url = '/projects/queryProjectsInfoInDistribution/' + distName;
+       getInfoFromServer(url, successFunction);
+}
+
+// controller : admin_group
+function queryAllGroup(successFunction) {
+       var url = '/admin_group/queryAllGroup';
+       getInfoFromServer(url, successFunction);
+}
+
+function queryGroupInfo(groupName, successFunction) {
+       var url = '/admin_group/queryGroupInfo/' + groupName;
+       getInfoFromServer(url, successFunction);
+}
+
+function addGroup(changeInfoList, successFunction) {
+       var url = '/admin_group/addGroup';
+       postForServer(url, changeInfoList, successFunction);
+}
+
+function removeGroup(changeInfoList, successFunction) {
+       var url = '/admin_group/removeGroup';
+       postForServer(url, changeInfoList, successFunction);
+}
+
+function changeGroup(changeInfoList, successFunction) {
+       var url = '/admin_group/modifyGroup';
+       postForServer(url, changeInfoList, successFunction);
+}
+
+// controller : admin_user
+function queryAllUser(successFunction) {
+       var url = '/admin_user/queryAllUser';
+       getInfoFromServer(url, successFunction);
+}
+
+function changeUser(changeInfoList, successFunction) {
+       var url = '/admin_user/modifyUser';
+       postForServer(url, changeInfoList, successFunction);
+}
+
+function removeUser(changeInfoList, successFunction) {
+       var url = '/admin_user/removeUser';
+       postForServer(url, changeInfoList, successFunction);
+}
+
+// controller : admin_server
+function queryServerInfo(successFunction) {
+       var url = '/admin_server/queryServerInfo';
+       getInfoFromServer(url, successFunction);
+}
+
+function queryAllServer(successFunction) {
+       var url = '/admin_server/queryAllServer';
+       getInfoFromServer(url, successFunction);
+}
+
+function addRemoteBuildServer(changeInfoList, successFunction) {
+       var url = '/admin_server/addRemoteBuildServer';
+       postForServer(url, changeInfoList, successFunction);
+}
+
+function removeRemoteBuildServer(changeInfoList, successFunction) {
+       var url = '/admin_server/removeRemoteBuildServer';
+       postForServer(url, changeInfoList, successFunction);
+}
+
+function modifyRemoteBuildServer(changeInfoList, successFunction) {
+       var url = '/admin_server/modifyRemoteBuildServer';
+       postForServer(url, changeInfoList, successFunction);
+}
+
+function addOSCategory(changeInfoList, successFunction) {
+       var url = '/admin_server/addOsCategory';
+       postForServer(url, changeInfoList, successFunction);
+}
+
+function removeOSCategory(changeInfoList, successFunction) {
+       var url = '/admin_server/removeOsCategory';
+       postForServer(url, changeInfoList, successFunction);
+}
+
+function modifyOSCategory(changeInfoList, successFunction) {
+       var url = '/admin_server/modifyOsCategory';
+       postForServer(url, changeInfoList, successFunction);
+}
+
+function addSupportedOS(changeInfoList, successFunction) {
+       var url = '/admin_server/addSupportedOS';
+       postForServer(url, changeInfoList, successFunction);
+}
+
+function removeSupportedOS(changeInfoList, successFunction) {
+       var url = '/admin_server/removeSupportedOS';
+       postForServer(url, changeInfoList, successFunction);
+}
+
+function modifySupportedOS(changeInfoList, successFunction) {
+       var url = '/admin_server/modifySupportedOS';
+       postForServer(url, changeInfoList, successFunction);
+}
+
+function addServerInfo(changeInfoList, successFunction) {
+       var url = '/admin_server/addServerInfo';
+       postForServer(url, changeInfoList, successFunction);
+}
+
+function removeServerInfo(changeInfoList, successFunction) {
+       var url = '/admin_server/removeServerInfo';
+       postForServer(url, changeInfoList, successFunction);
+}
+
+function modifyServerInfo(changeInfoList, successFunction) {
+       var url = '/admin_server/modifyServerInfo';
+       postForServer(url, changeInfoList, successFunction);
+}
+
+// controller : admin_project
+function queryAllProject(successFunction) {
+       var url = '/admin_project/queryAllProject';
+       getInfoFromServer(url, successFunction);
+}
+
+function queryProjectsInDistributionForAdmin(distName, successFunction) {
+       var url = '/admin_project/queryProjectsInDistribution/' + distName;
+       getInfoFromServer(url, successFunction);
+}
+
+function addProject(changeInfoList, successFunction) {
+       var url = '/admin_project/addProject';
+       postForServer(url, changeInfoList, successFunction);
+}
+
+function removeProject(changeInfoList, successFunction) {
+       var url = '/admin_project/removeProject';
+       postForServer(url, changeInfoList, successFunction);
+}
+
+function modifyProject(changeInfoList, successFunction) {
+       var url = '/admin_project/modifyProject';
+       postForServer(url, changeInfoList, successFunction);
+}
+
+// controller : admin_distribution
+function queryAllDistribution(successFunction) {
+       var url = '/admin_distribution/queryAllDistribution';
+       getInfoFromServer(url, successFunction);
+}
+
+function queryDistributionInfo(distName, successFunction) {
+       var url = '/admin_distribution/queryDistributionInfo/' + distName;
+       getInfoFromServer(url, successFunction);
+}
+
+function addDistribution(changeInfoList, successFunction) {
+       var url = '/admin_distribution/addDistribution';
+       postForServer(url, changeInfoList, successFunction);
+}
+
+function removeDistribution(changeInfoList, successFunction) {
+       var url = '/admin_distribution/removeDistribution';
+       postForServer(url, changeInfoList, successFunction);
+}
+
+function modifyDistribution(changeInfoList, successFunction) {
+       var url = '/admin_distribution/modifyDistribution';
+       postForServer(url, changeInfoList, successFunction);
+}
+
+// controller : admin
+function queryAllOS(successFunction) {
+       var url = '/admin/queryAllOS';
+       getInfoFromServer(url, successFunction);
+}
+
+function queryAllOSCategory(successFunction) {
+       var url = '/admin/queryAllOSCategory';
+       getInfoFromServer(url, successFunction);
+}
+
+function getInfoFromServer(url, successFunction) {
+       $.ajax({
+               url: baseUrl+url,
+               type: 'GET',
+               dataType: 'xml',
+               timeout: 10000,
+               success: function(xml) {
+                       setSessionInfo(xml);
+                       successFunction(xml);
+               },
+               error: function(jqXHR) {
+                       errorProcess(jqXHR);
+               }
+       });
+}
+
+function postForServer(url, changeInfoList, successFunction) {
+       $.ajax({
+               url: baseUrl+url,
+               type: 'POST',
+               data: JSON.stringify({ ChangeInfoList: changeInfoList }),
+               dataType: 'json',
+               contentType: "application/json; charset=utf-8",
+               timeout: 10000,
+               success: function(xml) {
+                       successFunction(xml);
+               },
+               error: function(jqXHR) {
+                       errorProcess(jqXHR);
+               }
+       });
+}
+
index c17ec1b1a0d7f7e98715d182f7c131b1bdbd4fe0..e8925521e377f2c32cf087330a9417ddd84bd644 100644 (file)
+var suggestion_list = new Array();
+
+$(function() {
+       $('#jobSearchSelect input[type="radio"]').checkboxradio().click(function() {
+               jobsQuerySelected();
+       });
+
+       $("#jobSearchInputText").on("input", function(e) {
+               var selectedValue = $('#jobSearchSelect').find("input[type='radio']:checked").val();
+               switch(selectedValue) {
+                       case "GROUP":
+                       case "PROJECT":
+                               suggestJobSearchList($(this).val());
+                               break;
+                       default:
+                               return;
+               }
+       });
+
+       $('#jobSearchInputText').keypress(function() {
+               if(event.keyCode == '13') {
+                       searchJobInput();
+               }
+       });
+
+       $('#jobSearchDate').keypress(function() {
+               if(event.keyCode == '13') {
+                       searchJobDate();
+               }
+       });
+});
+
+function jobsInit() {
+       jobQueryDistribution();
+}
+
+function jobsQuerySelected() {
+       clearSuggestJobSearchList();
+
+       var selectedValue = $('#jobSearchSelect').find("input[type='radio']:checked").val();
+       switch(selectedValue) {
+               case "ALL":
+                       selectJobAll();
+                       break;
+               case "JOBID":
+                       selectJobId();
+                       break;
+               case "USER":
+                       selectUser();
+                       break;
+               case "GROUP":
+                       selectGroup();
+                       break;
+               case "PROJECT":
+                       selectProject();
+                       break;
+               case "DATE":
+                       selectDate();
+                       break;
+               default:
+                       alert("Sorry. Please, report bug.");
+                       break;
+       }
+}
+
+function searchJobInput() {
+       var searchText = $("#jobSearchInputText").val()
+       searchJob(searchText);
+}
+
+function searchJobDate() {
+       var searchText = $("#jobSearchDate").val()
+       searchJob(searchText);
+}
+
+function searchJob(searchText) {
+       var distribution = $("#jobSelectDistribution option:selected").val(); 
+       var selectedValue = $('#jobSearchSelect').find("input[type='radio']:checked").val();
+       console.log(searchText);
+       switch(selectedValue) {
+               case "ALL":
+                       alert("Can't search on ALL!!");
+                       break;
+               case "JOBID":
+                       queryJobListJobId(distribution, searchText);
+                       break;
+               case "USER":
+                       queryJobListUserName(distribution, searchText);
+                       break;
+               case "GROUP":
+                       queryJobListUserGroup(distribution, searchText);
+                       break;
+               case "PROJECT":
+                       queryJobListProject(distribution, searchText);
+                       break;
+               case "DATE":
+                       queryJobListDate(distribution, searchText);
+                       break;
+               default:
+                       alert("Sorry. Please, report bug.");
+                       break;
+       }
+}
+
+function selectJobAll() {
+       var distribution = $("#jobSelectDistribution option:selected").val(); 
+       $("#jobDivSearchDate").attr("hidden", "true");
+       $("#jobDivSearchInput").attr("hidden", "true");
+       queryJobListAll(distribution);
+}
+
+function selectJobId() {
+       $("#jobDivSearchDate").attr("hidden", "true");
+       $("#jobDivSearchInput").removeAttr("hidden");
+       $("#jobSearchInputText").val("").textinput();
+       clearJobList();
+}
+
+function selectUser() {
+       var distribution = $("#jobSelectDistribution option:selected").val(); 
+       $("#jobDivSearchDate").attr("hidden", "true");
+       $("#jobDivSearchInput").removeAttr("hidden");
+
+       var name = localStorage.sessionInfoName;
+       $("#jobSearchInputText").val(name).textinput();
+
+       queryJobListUserName(distribution, name);
+}
+
+function selectGroup() {
+       var distribution = $("#jobSelectDistribution option:selected").val(); 
+       $("#jobDivSearchDate").attr("hidden", "true");
+       $("#jobDivSearchInput").removeAttr("hidden");
+
+       var group = localStorage.sessionInfoGroup;
+       $("#jobSearchInputText").val(group).textinput();
+
+       jobsQueryGroupList("JOBS");
+
+       queryJobListUserGroup(distribution, group);
+}
+
+function selectProject() {
+       var distribution = $("#jobSelectDistribution option:selected").val(); 
+       $("#jobDivSearchDate").attr("hidden", "true");
+       $("#jobDivSearchInput").removeAttr("hidden");
+       clearJobList();
+
+       $("#jobSearchInputText").val("").textinput();
+
+       jobsQueryProjectsList(distribution);
+}
+
+function selectDate() {
+       var distribution = $("#jobSelectDistribution option:selected").val(); 
+       var today = new Date();
+       var yyyy = today.getFullYear();
+       var mm = today.getMonth()+1; //January is 0!
+       var dd = today.getDate(); //January is 0!
+       if(dd<10) {
+               dd='0'+dd;
+       } 
+       if(mm<10) {
+               mm='0'+mm;
+       } 
+
+       var date = yyyy+'-'+mm+'-'+dd;
+       $('#jobSearchDate').val(date);
+
+       $("#jobDivSearchInput").attr("hidden", "true");
+       $("#jobDivSearchDate").removeAttr("hidden");
+       clearJobList();
+       queryJobListDate(distribution, date);
+}
+
 function clearJobList() {
-       //$("#jobList").children.remove('li');
        $("#jobList").empty();
 }
 
-function queryJobList(requestUrl) {
+function queryJobListAll(distribution) {
+       clearJobList();
+       queryJobList(baseUrl+"/jobs/list", distribution, "LATEST");
+}
+
+function queryJobListJobId(distribution, jobId) {
+       var distribution = $("#jobSelectDistribution option:selected").val(); 
+       clearJobList();
+       queryJobList(baseUrl+"/jobs/list", distribution, eval(parseInt(jobId) + 1));
+}
+function queryJobListUserName(distribution, name) {
+       var distribution = $("#jobSelectDistribution option:selected").val(); 
+       clearJobList();
+       queryJobList(baseUrl+"/jobs/listSearchUser/"+name, distribution, "LATEST");
+}
+
+function queryJobListUserGroup(distribution, group) {
+       clearJobList();
+       queryJobList(baseUrl+"/jobs/listSearchGroup/"+group, distribution, "LATEST");
+}
+
+function queryJobListProject(distribution, project) {
+       clearJobList();
+       queryJobList(baseUrl+"/jobs/listSearchProject/"+project, distribution, "LATEST");
+}
+
+function queryJobListDate(distribution, date) {
+       clearJobList();
+       queryJobList(baseUrl+"/jobs/listSearchDate/"+date, distribution, "LATEST");
+}
+
+function jobQueryDistribution() {
+       queryDistribution( function(xml) {
+               // remove old select options
+               $("#jobSelectDistribution").empty();
+               $("#jobSelectDistribution").append("<option value='ALL'>ALL</option>");
+       
+               $(xml).find("Data").find("DistributionName").each(function(){
+                       var name = $(this).text();
+       
+                       $("#jobSelectDistribution").append("<option value=\'"+name+"\'>"+name+"</option>");
+               });
+       
+               /* default distribution selection */
+               $("#jobSelectDistribution option:eq(0)").attr("selected", "selected");
+               $("#jobSelectDistribution").selectmenu('refresh');
+
+               selectJobAll();
+       }, errorProcess);
+}
+
+function queryJobList(requestUrl, distribution, jobId) {
+               var url = requestUrl+"/"+ distribution +"/"+ jobId;
+console.log(url);
+console.log(escape(url));
+console.log(encodeURI(url));
+console.log(encodeURIComponent(url));
+console.log(jobId);
        $.ajax({
-               url: requestUrl,
+               url: url,
                type: 'GET',
                dataType: 'xml',
-               timeout: 1000,
+               crossDomain: true,
+               timeout: 10000,
                error: function(jqXHR) {
-                       errorProcess(jqXHR.status);
+                       errorProcess(jqXHR);
                },
                success: function(xml) {
-                       $("#jobtable tr:not(:first)").remove();
-                       $("#pagetable tr:not(:first)").remove();
                        var lastJobId = 0;
                        $(xml).find("JobList").find("Job").each(function(){
                                var id = $(this).find("Id").text();
@@ -27,14 +257,13 @@ function queryJobList(requestUrl) {
                                var userName = $(this).find("UserName").text();
                                var startTime = $(this).find("StartTime").text();
                                var endTime = $(this).find("EndTime").text();
-                               var logLink = baseUrl + $(this).find("LogLink").text();
                                var li = "";
        
                                if(jobAttribute == "SINGLE")
                                {
                                        li = '<li data-role="list-divider">'
                                                + id+ ' ' +projectName+ '</li>'
-                                               + '<li><a href=' +logLink+ ' class="logWindow" data-ajax="false">'
+                                               + '<li><a href=log.html?jobid='+id+' class="logWindow" data-ajax="false">'
                                                + '<h3>' +projectName+ '</h3>'
                                                + '<p>ID : <strong>' +id+ '</strong></p>'
                                                + '<p>TYPE : <strong>' +jobType+ '</strong></p>'
@@ -46,17 +275,20 @@ function queryJobList(requestUrl) {
                                }
                                else if(jobAttribute == "MULTI")
                                {
-                                       li = '<li data-role="list-divider">'
-                                               +id+ ' ' +projectName+ '</li>';
+                                       li = '<li data-role="list-divider">' +id+ ' ' +jobType+ '</li>'
+                                               + '<li><a href=log.html?jobid='+id+' class="logWindow" data-ajax="false">'
+                                               + '<p>USER : <strong>' +userName+ '</strong></p>'
+                                               + '<p>TIME: <strong>' +startTime+ ' ~ '+endTime+ '</strong></p>'
+                                               + '<p class="ui-li-aside"><strong>' +jobStatus+ '</strong></p>'
+                                               + '</a></li>';
                                }
                                else if(jobAttribute == "CHILD")
                                {
-                                       li = '<li><a href=' +logLink+ ' class="logWindow" data-ajax="false">'
+                                       li = '<li><a href=log.html?jobid='+id+' class="logWindow" data-ajax="false">'
                                                + '<h3>' +projectName+ '</h3>'
                                                + '<p>ID : <strong>' +id+ '</strong></p>'
                                                + '<p>TYPE : <strong>' +jobType+ '</strong></p>'
                                                + '<p>OS : <strong>' +os+ '</strong></p>'
-                                               + '<p>USER : <strong>' +userName+ '</strong></p>'
                                                + '<p>TIME: <strong>' +startTime+ ' ~ '+endTime+ '</strong></p>'
                                                + '<p class="ui-li-aside"><strong>' +jobStatus+ '</strong></p>'
                                                + '</a></li>';
@@ -66,15 +298,107 @@ function queryJobList(requestUrl) {
                                $("#jobList").append(li).listview('refresh');
                        });
        
+                       console.log(lastJobId);
                        if(lastJobId > 0)
                        {
-                               $('#moreJobList').attr("onClick", "queryJobList(\""+ baseUrl+"/jobs/job_list/"+lastJobId+"\")");
+                               var moreJobListUrl = 'queryJobList("'+requestUrl+'", "'+distribution+'", "'+lastJobId+'")';
+                               $('#moreJobList').attr("onClick", moreJobListUrl);
+                               $('#moreJobList').removeClass('ui-disabled');
                        }
                        else
                        {
                                $('#moreJobList').addClass('ui-disabled');
                        }
+                       $('#moreJobList').button('refresh');
                        applyStyleLogWindow();
                }
        });
 }
+
+function clearSuggestJobSearchList() {
+       $("#jobSearchList").empty();
+}
+
+function jobsQueryGroupList() {
+       suggestion_list = [];
+
+       queryAllGroup( function(xml) {
+               var idx = 0;
+
+               $(xml).find("Data").find("GroupName").each(function(){
+                       suggestion_list[idx]= $(this).text();
+                       idx++;
+               });
+       }, errorProcess);
+}
+
+function suggestJobSearchList(inputText) {
+       var sugList = $("#jobSearchList");
+
+       if(inputText.length < 1) {
+               sugList.html("");
+               sugList.listview("refresh");
+       } else {
+               var str = "";
+               var suggestion = "";
+               for(var i=0, len=suggestion_list.length; i<len; i++) {
+                       suggestion = suggestion_list[i];
+
+                       if(suggestion.search(inputText) >= 0)
+                       {
+                               str += "<li data-mini='true'><a href='#' onClick='jobSuggestListClick(\""+suggestion+"\")'>"+suggestion+"</a></li>";
+                       }
+               }
+               sugList.html(str);
+               sugList.listview("refresh");
+               console.log(inputText);
+               console.dir(suggestion_list);
+       }
+}
+
+function jobSuggestListClick(suggestText) {
+       $("#jobSearchInputText").val(suggestText);
+       $("#jobSearchList").empty();
+
+       var startIndex = suggestText.search(/\[/);
+       var endIndex = suggestText.search('\]');
+
+       console.log(startIndex);
+       console.log(endIndex);
+       if(startIndex > 0 && endIndex >0) {
+               project = suggestText.substr(0, startIndex);
+               distribution = suggestText.substr(startIndex+1, endIndex-startIndex-1);
+               queryJobListProject(distribution, project);
+       }
+       else {
+               searchJob(suggestText);
+       }
+}
+
+function jobsQueryProjectsList() {
+       var distribution = $("#jobSelectDistribution option:selected").val(); 
+       suggestion_list = [];
+
+       if(distribution == "ALL") {
+               queryAllProject(function(xml) {
+                       var idx = 0;
+       
+                       $(xml).find("Data").find("Project").each(function(){
+                               var projectName = $(this).find("Name").text();
+                               var distName = $(this).find("DistName").text();
+                               suggestion_list[idx]= projectName+"["+distName+"]"
+                               idx++;
+                       });
+               });
+       }
+       else {
+               queryProjectList(distribution, function(xml) {
+                       var idx = 0;
+       
+                       $(xml).find("Data").find("Project").each(function(){
+                               suggestion_list[idx]= $(this).find("ProjectName").text();
+                               idx++;
+                       });
+               });
+       }
+}
diff --git a/dibs-web/public/javascripts/log.js b/dibs-web/public/javascripts/log.js
new file mode 100644 (file)
index 0000000..c16f7d8
--- /dev/null
@@ -0,0 +1,103 @@
+var request;
+var stop = 1;
+
+var job_id;
+var last_line = 0;
+
+function logInit() {
+       var next_line = Number(last_line) + 1;
+       var url = "/jobs/log/"+ job_id + "/" + next_line;
+       request.open("GET", url, true);
+       request.onreadystatechange = updatePage;
+       request.send(null);
+}
+
+function receiveData() {
+       /* XML parsing */
+       var xmlDoc = request.responseXML;
+
+       /* pre-process */
+       var logElements = xmlDoc.getElementsByTagName("Log")[0];
+       var conti = Number(logElements.getAttribute("Continue"));
+       job_id = logElements.getAttribute("JobId");
+
+       /* Insert data */
+       var dataElements = xmlDoc.getElementsByTagName("Data");
+
+       for(var x=0 ; x < dataElements.length ; x++)
+       {
+               var insertTable = document.getElementById("logTable");
+               var insertRow = document.createElement("tr");
+               var insertCel1 = document.createElement("td");
+               var insertCel2 = document.createElement("td");
+
+               var line_number = dataElements[x].getAttribute("Line");
+               var line_data =  dataElements[x].childNodes[0].nodeValue;
+
+               insertCel1.width = '30';
+               insertCel1.style.textAlign = 'right';
+               insertCel1.style.cellpacing = '5';
+               insertCel1.innerHTML = line_number;
+               last_line = line_number;
+
+               insertCel2.style.textAlign = 'left';
+               insertCel2.innerHTML = line_data;
+
+               insertRow.appendChild(insertCel1);
+               insertRow.appendChild(insertCel2);
+
+               insertTable.appendChild(insertRow);
+
+       }
+       scrollToBottom();
+
+       if(conti && stop) {
+               requestLog();
+       }
+}
+
+function stopLog() {
+       stop = 0;
+}
+
+function moreLog() {
+       stop = 1;
+       requestLog();
+}
+
+function requestLog() {
+       createHttpRequest();
+       if(request) {
+       }
+}
+
+function updatePage() {
+       if (request.readyState == 4) {
+               if (request.status == 200) {
+                       receiveData();
+               }
+               else if (request.status == 404) {
+                       alert("Request URL does not exist");
+               }
+               else {
+                       alert("Error: status code is " + request.status);
+               }
+       }
+}
+
+function getYScroll()
+{
+       var yScroll;  
+       if (window.innerHeight && window.scrollMaxY) {                  
+               yScroll = window.innerHeight + window.scrollMaxY;
+       } else if (document.body.scrollHeight > document.body.offsetHeight){ // all but Explorer Mac
+               yScroll = document.body.scrollHeight;
+       } else { // Explorer Mac...would also work in Explorer 6 Strict, Mozilla and Safari
+               yScroll = document.body.offsetHeight;
+       }
+       return yScroll;
+}
+
+function scrollToBottom() {
+       window.scrollTo(0,getYScroll());
+}
index 46785dcd3a75f65f71b3cc47f53eaf7cdfac4bec..967687b686b647cb53449a85b24d6a2ff5002c95 100644 (file)
@@ -14,79 +14,93 @@ $.ajaxSetup({
 }); 
 
 
+$( document ).bind( "pageshow", function( event, data ){
+});
+
 $( document ).bind( "pagechange", function( event, data ){
-       if($.mobile.activePage.attr('id') == 'index')
-       {
-       }
-       else if($.mobile.activePage.attr('id') == 'signup')
-       {
-               clearFormData('signupForm');
-       }
-       else if($.mobile.activePage.attr('id') == 'login')
-       {
-               clearFormData('loginForm');
-       }
-       else if($.mobile.activePage.attr('id') == 'projects')
-       {
-               queryDistribution();
-       }
-       else if($.mobile.activePage.attr('id') == 'jobs')
-       {
-               clearJobList();
-               queryJobList(baseUrl+"/jobs/job_list/0");
-       }
-       else if($.mobile.activePage.attr('id') == 'adminUser')
-       {
-               queryAdminUser();
-       }
-       else if($.mobile.activePage.attr('id') == 'adminGroup')
-       {
-               queryAdminGroup();
-       }
-       else if($.mobile.activePage.attr('id') == 'adminServer')
-       {
-               queryAdminServer();
-       }
-       else if($.mobile.activePage.attr('id') == 'adminProject')
-       {
-               queryAdminProject();
-       }
-       else if($.mobile.activePage.attr('id') == 'modifyDistribution')
-       {
-               setupModifyDistribution();
-       }
-       else if($.mobile.activePage.attr('id') == 'modifyUser')
-       {
-               setupModifyUser();
-       }
-       else if($.mobile.activePage.attr('id') == 'modifyBinaryProject')
-       {
-               setupModifyBinaryProject();
-       }
-       else if($.mobile.activePage.attr('id') == 'modifyGitProject')
-       {
-               setupModifyGitProject();
-       }
-       else if($.mobile.activePage.attr('id') == 'addGroup')
-       {
-               setupAddGroup();
-       }
-       else if($.mobile.activePage.attr('id') == 'modifyGroup')
-       {
-               setupModifyGroup();
-       }
-       else if($.mobile.activePage.attr('id') == 'modifyServer')
-       {
-               setupModifyServer();
-       }
-       else if($.mobile.activePage.attr('id') == 'addGitProject')
-       {
-               setupAddGitProject();
+       var id = $.mobile.activePage.attr('id');
+
+       switch(id){
+               case "index":
+                       generateNavigationBar(id);
+                       break;
+               case "signup":
+                       clearFormData('signupForm');
+                       break;
+               case "login":
+                       clearFormData('loginForm');
+                       break;
+               case "projects":
+                       generateNavigationBar(id);
+                       projectsInit(id);
+                       break;
+               case "build":
+                       generateNavigationBar(id);
+                       buildInit(id);
+                       break;
+               case "jobs":
+                       generateNavigationBar(id);
+                       jobsInit();
+                       break;
+               case "log":
+                       logInit();
+                       break;
+               case "adminUser":
+                       generateNavigationBar(id);
+                       adminUserInit();
+                       break;
+               case "adminGroup":
+                       generateNavigationBar(id);
+                       adminGroupInit();
+                       break;
+               case "adminServer":
+                       generateNavigationBar(id);
+                       adminServerInit();
+                       break;
+               case "adminProject":
+                       generateNavigationBar(id);
+                       adminProjectInit();
+                       break;
+               case "adminDistribution":
+                       generateNavigationBar(id);
+                       adminDistributionInit();
+                       break;
+               case "modifyDistribution":
+                       adminDistributionModifyPopupInit();
+                       break;
+               case "adminUserModifyPopup":
+                       adminUserModifyPopupInit();
+                       break;
+               case "modifyBinaryProject":
+                       adminProjectModifyBinaryProjectInit();
+                       break;
+               case "modifyGitProject":
+                       adminProjectModifyGitProjectInit();
+                       break;
+               case "adminGroupAddPopup":
+                       adminGroupAddInit();
+                       break;
+               case "adminGroupModifyPopup":
+                       adminGroupModifyInit();
+                       break;
+               case "adminServerModifyRemoteBuildServer":
+                       adminServerModifyRemoteBuildServerInit();
+                       break;
+               case "addGitProject":
+                       adminProjectAddInit();
+                       break;
+               case "adminServerAddSupportedOs":
+                       adminServerAddSupportedOsInit();
+                       break;
+               case "adminServerRemoveOSCategory":
+                       adminServerRemoveOSCategoryInit();
+                       break;
+               case "signup":
+                       //queryGroupListForSignup();
+                       break;
+               default:
+                       break;
        }
-//     else if($.mobile.activePage.attr('id') == 'signup')
-//     {
-//             queryGroupListForSignup();
-//     }
        
        // Call check session info
        checkSessionInfo();
@@ -98,13 +112,16 @@ $( document ).bind( "mobileinit", function() {
        $.mobile.pushStateEnabled         = false;
 });
 
-function errorProcess(httpStatus){
-       switch (parseInt(httpStatus)) {
+function errorProcess(jqXHR){
+       switch (parseInt(jqXHR.status)) {
                case 401:       
                        expireSession();
                        break;
+               case 406:       
+                       alert("Internal server error : " + jqXHR.responseText);
+                       break;
                default:
-                       alert("Server error : "+httpStatus);
+                       alert("Server error : "+jqXHR.status);
                        break;
        }
 }
@@ -142,3 +159,42 @@ function clearFormData(elementId){
        });
 }
 
+function generateNavigationBar(id) {
+       var admin = localStorage.sessionInfoAdmin;
+       if(admin == "TRUE")
+       {
+               generateNavigationBarAdmin(id);
+       }
+       else
+       {
+               generateNavigationBarUser(id);
+       }
+}
+
+function generateNavigationBarUser(id) {
+       var naviHtml = ""
+       naviHtml = '<li data-role="list-divider">BUILD</li>';
+       naviHtml += '<li><a href="#projects">Projects</a></li>';
+       naviHtml += '<li><a href="#build">Build</a></li>';
+       naviHtml += '<li><a href="#jobs">Jobs</a></li>';
+
+       $("#"+id+"-navigationBar").empty();
+       $("#"+id+"-navigationBar").append(naviHtml).listview("refresh");
+}
+
+function generateNavigationBarAdmin(id) {
+       var naviHtml = ""
+       naviHtml = '<li data-role="list-divider">BUILD</li>';
+       naviHtml += '<li><a href="#projects">Projects</a></li>';
+       naviHtml += '<li><a href="#build">Build</a></li>';
+       naviHtml += '<li><a href="#jobs">Jobs</a></li>';
+       naviHtml += '<li data-role="list-divider">ADMIN</li>';
+       naviHtml += '<li><a href="#adminUser">User</a></li>';
+       naviHtml += '<li><a href="#adminGroup">Group</a></li>';
+       naviHtml += '<li><a href="#adminServer">Server</a></li>';
+       naviHtml += '<li><a href="#adminDistribution">Distribution</a></li>';
+       naviHtml += '<li><a href="#adminProject">Project</a></li>';
+
+       $("#"+id+"-navigationBar").empty();
+       $("#"+id+"-navigationBar").append(naviHtml).listview("refresh");
+}
index 379d455acd43eb69cfecbd0b6e3c49ee75aba62d..8326df8910f2221cb763897aefb5780403b1d35b 100644 (file)
-function selectAll(element) {
-       var checkboxes = document.getElementsByName(element.id);
-       var checked = element.checked;
-       for(var i in checkboxes) {
-               if(!checkboxes[i].disabled) { 
-                       checkboxes[i].checked = checked;
-               } 
-       }
-}
-
-function contains(a, obj) {
-       for (var i = 0; i < a.length; i++) {
-               if (a[i] == obj) {
-                       return true; 
-               }
-       }
-       return false; 
-}
-
-function initTable() {
-       /* project table */
-       var projectTable = document.getElementById("projectTable");
+function projectsInit() {
+       queryDistribution( function(xml) {
+               // remove old select options
+               $("#projects-select-distribution").empty();
        
-       /* binary project table */
-       var binaryProjectTable = document.getElementById("binaryProjectTable");
+               $(xml).find("Data").find("DistributionName").each(function(){
+                       var name = $(this).text();
        
-       /* remove all table rows */
-       while(projectTable.hasChildNodes())
-       {
-               projectTable.removeChild(projectTable.firstChild);
-       }
-       while(binaryProjectTable.hasChildNodes())
-       {
-               binaryProjectTable.removeChild(binaryProjectTable.firstChild);
-       }
-}
-
-function addTableRow(supportedOs, projectList, otherProjectList) {
-       // Table header
-       var idx = 0;
-       var tableHeader = "";
-       var osArray = new Array();
-       var projectTable = document.getElementById("projectTable");
-
-       // Project table header
-       tableHeader = "<tr><th>Project</th>";
-       supportedOs.each(function(){
-               var osName = $(this).text();
-               tableHeader = tableHeader + "<th>"+osName+"</th>";
-
-               osArray[idx] = osName;
-               idx++;
+                       $("#projects-select-distribution").append("<option value=\'"+name+"\'>"+name+"</option>");
+               });
+       
+               /* default distribution selection */
+               $("#projects-select-distribution option:eq(0)").attr("selected", "selected");
+               $("#projects-select-distribution").selectmenu('refresh');
+       
+               //query Project list
+               projectsQueryProjectList();
        });
+}
 
-       tableHeader = tableHeader + "<th>ALL</th></tr>";
-       $("#projectTable").append(tableHeader);
+function projectsQueryProjectList() {
+       var distName = $("#projects-select-distribution option:selected").val();
 
-       // table row - projectList
-       var index = 2;
+       queryProjectsInfoInDistribution( distName, function(xml) {
+               var projectList = document.getElementById("projects-project-list");
 
-       projectList.each(function(){
-               var name = $(this).find("ProjectName").text();
-               var osLists = $(this).find("OsList").text();
-               var osList = osLists.split(",");
-       
-               var row = projectTable.insertRow(-1);
-               
-               var cell = row.insertCell(0);
-               cell.setAttribute('style', 'text-align: left');
-               cell.setAttribute('bgcolor', '#dcddc0');
-               cell.innerHTML = name;
-               
-               for (i=0;i<osArray.length;i++)
+               /* remove all list */
+               while(projectList.hasChildNodes())
                {
-                       var cell = row.insertCell(-1);
-                       var os = osArray[i];
-       
-                       cell.setAttribute('id', "table"+":"+name+":"+os);
-                       cell.setAttribute('style', 'text-align: center');
-                       cell.setAttribute('bgcolor', '#dcddc0');
-       
-                       var buttonnode = document.createElement('input');
-                       buttonnode.setAttribute('type','checkbox');
-                       buttonnode.setAttribute('id',"table"+":"+name+':'+os);
-                       buttonnode.setAttribute('name','projectBuildCheckbox'+":"+name);
-                       buttonnode.setAttribute('class','projectTableBuildButton');
-                       cell.appendChild(buttonnode);
-
-                       if(!contains(osList, os))
-                       {
-                               buttonnode.setAttribute('disabled','disabled');
-                       }
+                       projectList.removeChild(projectList.firstChild);
                }
-       
-               /* append all checkbox */
-               var cell = row.insertCell(-1);
-               cell.setAttribute('style', 'text-align: center');
-               cell.setAttribute('bgcolor', '#dcddc0');
-       
-               var buttonnode = document.createElement('input');
-               buttonnode.setAttribute('type','checkbox');
-               buttonnode.setAttribute('id','projectBuildCheckbox'+":"+name);
-               buttonnode.setAttribute('name','all-checkbox');
-               buttonnode.setAttribute('class','projectTableAllButton');
-               buttonnode.setAttribute('onClick','selectAll(this)');
-               cell.appendChild(buttonnode);
-       });
 
-       otherProjectList.each(function(){
-               var name =  $(this).find("ProjectName").text();
-               var row = projectTable.insertRow(-1);
-               
-               var cell = row.insertCell(0);
-               cell.setAttribute('style', 'text-align: left');
-               cell.setAttribute('bgcolor', '#c0c0c0');
-               cell.innerHTML = name;
-       
-               /* add empty cell for status */
-               for (i=0;i<osArray.length;i++)
-               {
-                       cell = row.insertCell(-1);
-                       cell.setAttribute('id', "table"+":"+name+"-"+osArray[i]);
-                       cell.setAttribute('style', 'text-align: left');
-                       cell.setAttribute('bgcolor', '#c0c0c0');
-                       cell.innerHTML = ""; 
-               }
-       
-               /* add empty cell for all*/
-               cell = row.insertCell(-1);
-               cell.setAttribute('style', 'text-align: left');
-               cell.setAttribute('bgcolor', '#c0c0c0');
-               cell.innerHTML = "";
-       });
-}
-
-function addBinaryTableRow(binaryProjectList, otherProjectList) {
-       var binaryProjectTable = document.getElementById("binaryProjectTable");
-       var row = binaryProjectTable.insertRow(-1);
-       var thCell = document.createElement('th');
-       thCell.innerHTML = "Project";
-       row.appendChild(thCell);
-       thCell = document.createElement('th');
-       thCell.innerHTML = "Package name";
-       row.appendChild(thCell);
-       thCell = document.createElement('th');
-       thCell.innerHTML = "Register";
-       row.appendChild(thCell);
-
-       /* insert binary project in binary project table */
-       binaryProjectList.each(function(){
-               var name =  $(this).find("ProjectName").text();
-               var packageName =  $(this).find("PackageName").text();
-               var row = '<tr><td bgcolor="#dcddc0" style="text-align:left">'+name+'</td>';
-               row += '<td bgcolor="#dcddc0" style="text-align:left">' + packageName + '</td>'
-               row += '<td bgcolor="#dcddc0" style="text-align:left"><a href="upload.html" onClick="uploadBinaryName(\'' +name+'\')" class="binary_project_button" data-role="button" data-ajax="false" data-mini="true">REGISTER</a>';
-               row += '</tr>'
-               
-               $("#binaryProjectTable tr:last").after(row);
-       });
+               $(xml).find("Data").find("ProjectList").find("Project").each(function(){
+                       projectsAppendProjectList($(this), projectList);
+               });
 
-       otherProjectList.each(function(){
-               var name =  $(this).find("ProjectName").text();
-               var packageName =  $(this).find("PackageName").text();
-               var row = binaryProjectTable.insertRow(-1);
+               $('.projects-project-list-collapsible').collapsible();
+               $('.projects-project-list-listview').listview();
                
-               /* add project name */
-               var cell = row.insertCell(0);
-               cell.setAttribute('style', 'text-align: left');
-               cell.setAttribute('bgcolor', '#c0c0c0');
-               cell.innerHTML = name;
-       
-               /* add package name */
-               cell = row.insertCell(-1);
-               cell.setAttribute('style', 'text-align: left');
-               cell.setAttribute('bgcolor', '#c0c0c0');
-               cell.innerHTML = packageName; 
-       
-               /* add empty cell for register */
-               cell = row.insertCell(-1);
-               cell.setAttribute('style', 'text-align: left');
-               cell.setAttribute('bgcolor', '#c0c0c0');
-               cell.innerHTML = "";
-       });
-
-       $('.binary_project_button').button();
-       $('.binary_project_button').popupWindow({ 
-               height:200, 
-               width:400, 
-               top:50, 
-               left:50 
        });
 }
 
-function buildProject(type) {
-       var distName = $("#select-distribution option:selected").val();
-       var buildProjectList = [{ "distribution" : distName}];
-
-       var node_list = document.getElementsByTagName('input');
-       for (var i = 0; i < node_list.length; i++) {
-               var node = node_list[i];
-       
-               if (node.getAttribute('type') == "checkbox") {
-                       if (node.checked == true) {
-                               if (node.getAttribute('name') != "all-checkbox") {
-                                       var prjName = node.id.split(":")[1];
-                                       var osName = node.id.split(":")[2];
-                                       var buildData = { "project" : prjName, "os" : osName };
-                                       buildProjectList.push(buildData);
-                               }
-                       }
-               }
+function projectsAppendProjectList( project, projectList ) {
+       var name = project.find("Name").text();
+       var type = project.find("Type").text();
+       var groupAccess = project.find("GroupAccess").text();
+
+       var div = document.createElement('div');
+       div.setAttribute('data-role', 'collapsible');
+       div.setAttribute('data-inset', 'false');
+       div.setAttribute('data-mini', 'true');
+       div.setAttribute('class', 'projects-project-list-collapsible');
+       if(groupAccess == "TRUE") {
+               div.setAttribute('data-theme', "b");
        }
-       
-       $.ajax({
-               type: "POST",
-               url: baseUrl+"/projects/buildProject/" + type,
-               data: JSON.stringify({ BuildProjectList: buildProjectList }),
-               contentType: "application/json; charset=utf-8",
-               dataType: "json",
-               success: function() {
-                       alert("Build started! Move to jobs page");
-                       $.mobile.changePage("#jobs"); 
-               },
-               error: function(jqXHR) {
-                       switch (jqXHR.status) {
-                       case 401:
-                       expireSession();
+       else {
+               div.setAttribute('data-theme', "d");
+       }
+       projectList.appendChild(div);
+
+       var h2 = document.createElement('h2');
+       h2.innerHTML = "["+type+"]  "+name;
+       div.appendChild(h2);
+
+       var br = document.createElement('br');
+       div.appendChild(br);
+
+       var ul = document.createElement('ul');
+       ul.setAttribute('data-role', "listview");
+       ul.setAttribute('class', "projects-project-list-listview");
+       ul.setAttribute('data-filter-theme', "c");
+       ul.setAttribute('data-divider-theme', "c");
+       div.appendChild(ul);
+
+       project.find("ProjectOs").each(function(){
+               var osName = $(this).find("OsName").text();
+
+               var li = document.createElement('li');
+               li.setAttribute('style', 'font-size: 12px');
+               li.setAttribute('data-role', "list-divider")
+               li.innerHTML = "<strong>"+osName+"</strong>";
+               ul.appendChild(li);
+
+               $(this).find("Package").each(function(){
+                       var packageName = $(this).find("PackageName").text();
+                       var packageVersion = $(this).find("PackageVersion").text(); 
+                       var startTime = $(this).find("StartTime").text(); 
+                       var endTime= $(this).find("EndTime").text(); 
+                       var userName = $(this).find("UserName").text(); 
+                       var userEmail = $(this).find("UserEmail").text(); 
+            
+                       if(packageName != "")
+                       {
+                               var liInfo = document.createElement('li');
+                               liInfo.setAttribute('style', 'font-size: 12px');
+                               var info = "<h3>"+packageName+" "+packageVersion+"</h3>";
+                               info += "<p>Lastest build time : <strong>"+startTime+" ~ "+endTime+"</strong></p>";
+                               info += "<p>Lastest build user : <strong>"+userName+" ["+userEmail+"]</strong></p>";
+                               liInfo.innerHTML = info;
+                               ul.appendChild(liInfo);
                        }
-               }
-       });
-}
-
-function queryProjectList() {
-       var distName = $("#select-distribution option:selected").val();
-
-       $.ajax({
-               url: baseUrl+'/projects/queryProject/' + distName ,
-               type: 'GET',
-               dataType: 'xml',
-               timeout: 1000,
-               error: function(obj) {
-                       alert(obj);
-               },
-               success: function(xml) {
-                       initTable();
-                       addTableRow( $(xml).find("ProjectInfo").find("BuildServerInfo").find("supportedOs"),
-                                                $(xml).find("ProjectInfo").find("Project"),
-                                                $(xml).find("ProjectInfo").find("OtherProject"));
-                       addBinaryTableRow( $(xml).find("ProjectInfo").find("BinaryProject"),
-                                                $(xml).find("ProjectInfo").find("OtherProject"));
-               }
-       });
-}
-
-function queryDistribution() {
-       $.ajax({
-               headers: {'Cookie' : document.cookie },
-               url: (baseUrl+"/projects/queryDistribution"),
-               type: 'GET',
-               dataType: 'xml',
-               timeout: 1000,
-               error: function(obj) {
-                       errorProcess(obj);
-               },
-               success: function(xml) {
-                       // remove old select options
-                       $("#select-distribution").empty();
-
-                       $(xml).find("Distribution").find("Name").each(function(){
-                               var name = $(this).text();
-       
-                               $("#select-distribution").append("<option value=\'"+name+"\'>"+name+"</option>");
-                       });
-       
-                       /* default distribution selection */
-                       $("#select-distribution option:eq(0)").attr("selected", "selected");
-                       $("#select-distribution").selectmenu('refresh');
-       
-                       // query Project list
-                       queryProjectList();
-               }
+               });
        });
 }
-
-function uploadBinaryName(project_name) {
-       localStorage.distibutionName = $("#select-distribution option:selected").val();
-       localStorage.uploadBinaryProjectName = project_name;
-}
index 2b7ada86997f641debacfbc020f68c4236b7dd4d..832c2a60d3ab32c17c49b5107942d65c8499f090 100644 (file)
@@ -1,3 +1,23 @@
+function setSessionInfo(xml){
+       var email = $(xml).find("Header").find("UserInfo").find("Email").text();
+       var name = $(xml).find("Header").find("UserInfo").find("Name").text();
+       var admin = $(xml).find("Header").find("UserInfo").find("Admin").text();
+       var group;
+       var idx = 0;
+       $(xml).find("Header").find("UserInfo").find("GroupList").find("Group").each(function() {
+               if(idx == 0) {
+                       group = $(this).find("GroupName").text();
+               }
+       });
+
+       localStorage.sessionInfoEmail = email;
+       localStorage.sessionInfoName = name;
+       localStorage.sessionInfoGroup = group;
+       localStorage.sessionInfoAdmin = admin;
+       
+       checkSessionInfo();
+}
+
 function checkSessionInfo(){
        var email = localStorage.sessionInfoEmail;
        var name = localStorage.sessionInfoName;
@@ -5,7 +25,7 @@ function checkSessionInfo(){
        if(email)
        {
                sessionHtml = '<div data-role="controlgroup" style="text-align: left; font-size: 12px" data-type="horizontal" class="ui-btn-right ui-btn-corner-all">';
-               sessionHtml += '<p data-direction="reverse" >'+name+' logined. | ';
+               sessionHtml += '<p data-direction="reverse" ><a href="#userModifyPopup" onClick="userQueryUserInfo()" data-rel="dialog">'+name+'</a> | ';
                sessionHtml += '<a href=# onClick="logout()" data-direction="reverse">Log out</a></p></div>';
        }
        else
@@ -20,63 +40,57 @@ function checkSessionInfo(){
 function clearSessionInfo(){
        localStorage.sessionInfoEmail = "";
        localStorage.sessionInfoName = "";
+       localStorage.sessionInfoGroup = "";
+       localStorage.sessionInfoAdmin = "";
 }
 
 function expireSession(){
        clearSessionInfo();
        $.mobile.changePage("index.html"); 
+       generateNavigationBar("index");
 }
 
-$(function(){
-       $("#loginForm").submit(function(event){
-               // setup some local variables
-               var $form = $(this),
-               // let's select and cache all the fields
-               $inputs = $form.find("input, select, button, textarea"),
-               // serialize the data in the form
-               formData = $form.serialize();
-       
-               // let's disable the inputs for the duration of the ajax request
-               $inputs.attr("disabled", "disabled");
-               console.log(baseUrl);
-               $.ajax({
-                       url: baseUrl + "/sessions/login",
-                       type: 'POST',
-                       async: false,
-                       cache: false,
-                       dataType: 'xml',
-                       data: formData,
-                       timeout: 1000,
-                       error: function() {
-                               $inputs.removeAttr("disabled");
-                               alert('Error loading XML document');
-                       },
-                       success: function(xml) {
-                               $inputs.removeAttr("disabled");
-                               $(xml).find("LogInInfo").each(function(){ 
-                                       var succ = $(this).find("Success").text();
-                                       var email = $(this).find("UserInfo").find("Email").text();
-                                       var name = $(this).find("UserInfo").find("Email").text();
-                                       localStorage.sessionInfoEmail = email;
-                                       localStorage.sessionInfoName = name;
-
-                                       clearFormData('loginForm');
-
-                                       console.log(document.cookie);
-                                       var cookies = document.cookie.split(';');
-                                       for (var i = 0; i < cookies.length; i++) {
-                                               console.log(getCookie("name"));
-                                       }
-                                       
-                                       if(succ == "TRUE")
-                                       {
-                                               $.mobile.changePage("#projects"); 
-                                       } 
-                               });
+function sessionLogin() {
+       var infoList = [];
+       var infoItem;
+       var email = $('#login-email').val();
+       var password = $('#login-password').val();
+
+       if(email == ""){
+               alert("Email is invalid");
+               return false;
+       }
+
+       if(password == ""){
+               alert("Password is invalid");
+               return false;
+       }
+
+       changeInfoItem = {"Type":"ModifyUser", "Email":email, "Password":password };
+       infoList.push(changeInfoItem);
+
+       login(infoList, function (json) {
+               var result = json.Result;
+               var message = json.UserInfo.Message;
+               var email = json.UserInfo.Eamil;
+               var name = json.UserInfo.Name;
+               var group = json.UserInfo.GroupName;
+               var admin = json.UserInfo.Admin;
+
+               if(result == "SUCCESS")
+               {
+                       localStorage.sessionInfoEmail = email;
+                       localStorage.sessionInfoName = name;
+                       localStorage.sessionInfoGroup = group;
+                       localStorage.sessionInfoAdmin = admin;
+                       $.mobile.changePage("#index"); 
+               } 
+               else
+               {
+                       alert(message);
                        }
-               }); 
        });
-});
+} 
 
 function logout(){
        $.ajax({
@@ -95,89 +109,20 @@ function logout(){
        });
 }
 
-$(function(){
-       $("#signupForm").submit(function(event){
-               // setup some local variables
-               var $form = $(this),
-               // let's select and cache all the fields
-               $inputs = $form.find("input, select, button, textarea"),
-               // serialize the data in the form
-               formData = $form.serialize();
-       
-               // let's disable the inputs for the duration of the ajax request
-               $inputs.attr("disabled", "disabled");
-               console.log(baseUrl);
-               $.ajax({
-                       url: baseUrl + "/users/signup",
-                       type: 'POST',
-                       async: false,
-                       cache: false,
-                       dataType: 'xml',
-                       data: formData,
-                       timeout: 1000,
-                       error: function() {
-                               $inputs.removeAttr("disabled");
-                               alert('Error loading XML document');
-                       },
-                       success: function(xml) {
-                               $inputs.removeAttr("disabled");
-                               $(xml).find("SignUpInfo").each(function(){ 
-                                       var succ = $(this).find("Success").text();
-                                       var msg = $(this).find("Message").text();
-                                       
-                                       if(succ == "TRUE")
-                                       {
-                                               clearFormData('signupForm');
-                                               $.mobile.changePage("#index"); 
-                                       } 
-                                       else
-                                       {
-                                               $('#signupErrorMessage').text(msg).trigger('create');
-                                               console.log(msg);
-                                       }
-                               });
-                       }
-               }); 
-       });
-});
-
-function getCookie(name) {
-       var cookieValue = null;
-       if (document.cookie && document.cookie != '') {
-               var cookies = document.cookie.split(';');
-               for (var i = 0; i < cookies.length; i++) {
-                       var cookie = jQuery.trim(cookies[i]);
-                       // Does this cookie string begin with the name we want?
-                       if (cookie.substring(0, name.length + 1) == (name + '=')) {
-                               cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
-                               break;
-                       }
-               }
-       }
-       return cookieValue;
-}
 
-function queryGroupListForSignup() {
-       $.ajax({
-               url: baseUrl + "/admin/queryAdminAllGroupName",
-               type: 'GET',
-               dataType: 'xml',
-               timeout: 1000,
-               error: function() {
-                       alert('Error loading XML document');
-               },
-               success: function(xml) {
-                       $("#applyGroupRadio").children().remove();
-
-                       var newHtml ='<fieldset data-role="controlgroup" data-mini="true"><legend>Apply for group :</legend>';
-                       $(xml).find("Name").each(function(){
-                               var name = $(this).text();
-                               newHtml += '<input type="radio" name="group" id="group-'+name+'" value="'+name+'" />';
-                               newHtml += '<label for="group-'+name+'">'+name+'</label>';
-                       });
-                       console.log(newHtml);
-                       $("#applyGroupRadio").append(newHtml).trigger('create');
-                       $("#applyGroupRadio div[role='heading']").attr("style","text-align: left; font-size: 12px");
-               }
-       });
+function signupQueryGroupList() {
+       queryAllGroup( function(xml) {
+               $("#applyGroupRadio").children().remove();
+
+               var newHtml ='<fieldset data-role="controlgroup" data-mini="true"><legend>Apply for group :</legend>';
+               $(xml).find("Data").find("GroupName").each(function(){
+                       var name = $(this).text();
+                       newHtml += '<input type="radio" name="group" id="group-'+name+'" value="'+name+'" />';
+                       newHtml += '<label for="group-'+name+'">'+name+'</label>';
+               });
+               console.log(newHtml);
+               $("#applyGroupRadio").append(newHtml).trigger('create');
+               $("#applyGroupRadio div[role='heading']").attr("style","text-align: left; font-size: 12px");
+       }, errorProcess);
 }
+
diff --git a/dibs-web/public/javascripts/user.js b/dibs-web/public/javascripts/user.js
new file mode 100644 (file)
index 0000000..a0165cf
--- /dev/null
@@ -0,0 +1,79 @@
+function userSignUp() {
+       var infoList = [];
+       var infoItem;
+       var email = $('#user-email').val();
+       var name = $('#user-name').val();
+       var password = $('#user-password').val();
+       var password_confirm = $('#user-password-confirmation').val();
+
+       if(email == ""){
+               alert("Email is invalid");
+               return false;
+       }
+       if(name == ""){
+               alert("Name is invalid");
+               return false;
+       }
+
+       if(password == ""){
+               alert("Password is invalid");
+               return false;
+       }
+
+       if(password != password_confirm){
+               alert("Password is different");
+               return false;
+       }
+
+       changeInfoItem = {"Type":"ModifyUser", "Email":email, "Name":name, "Password":password, "PasswordConfirm":password_confirm};
+       infoList.push(changeInfoItem);
+
+       signUp(infoList, function (xml) {
+               alert("Success sign up");
+       });
+}
+
+function userQueryUserInfo() {
+       queryUserInfo( function (xml) {
+               var email = $(xml).find("Data").find("User").find("Email").text();
+               var name = $(xml).find("Data").find("User").find("Name").text();
+
+               $("#popup-user-info-email").val(email).textinput();
+               $("#popup-user-info-name").val(name).textinput();
+       });
+}
+
+function userModifyUserInfo() {
+       var changeInfoList = [];
+       var changeInfoItem;
+       var email = $('#popup-user-info-email').val();
+       var name = $('#popup-user-info-name').val();
+       var password = $('#popup-user-info-password').val();
+       var password_confirm = $('#popup-user-info-password-confirm').val();
+
+       if(email == ""){
+               alert("Email is invalid");
+               return false;
+       }
+       if(name == ""){
+               alert("Name is invalid");
+               return false;
+       }
+
+       if(password == ""){
+               alert("Password is invalid");
+               return false;
+       }
+
+       if(password != password_confirm){
+               alert("Password is different");
+               return false;
+       }
+
+       changeInfoItem = {"Type":"ModifyUser", "Email":email, "Name":name, "Password":password, "PasswordConfirm":password_confirm};
+       changeInfoList.push(changeInfoItem);
+
+       modifyUserInfo(changeInfoList, function (xml) {
+               alert("Success changed information");
+       });
+}
diff --git a/dibs-web/public/log.html b/dibs-web/public/log.html
new file mode 100644 (file)
index 0000000..f2023ff
--- /dev/null
@@ -0,0 +1,145 @@
+<script language="javascript" type="text/javascript">
+       var request;
+       var stop = 1;
+
+       var job_id;
+       var last_line = 0;
+
+       var myUrl = location.href;
+       var varCut = myUrl.indexOf("?");
+       var varCheck = myUrl.substring(varCut+1);
+       eval(varCheck);
+
+       job_id = jobid;
+
+       function createHttpRequest() {
+               request = false;
+               try {
+                       request = new XMLHttpRequest();
+               }
+               catch(trymicrosoft) {
+                       try {
+                               request = new ActiveXobject("Msxml2.XMLHTTP");
+                       }
+                       catch(othermicrosoft) {
+                               try {
+                                       request = new ActiveXobject("Microsoft.XMLHTTP");
+                               }
+                               catch(failed) {
+                                       request = false;
+                               }
+                       }
+               }
+       
+               if(!request) {
+                       alert("Error XMLHttpRequest");
+               }
+       }
+
+       function receiveData() {
+               /* XML parsing */
+               var xmlDoc = request.responseXML;
+
+               /* pre-process */
+               var logElements = xmlDoc.getElementsByTagName("Log")[0];
+               var conti = Number(logElements.getAttribute("Continue"));
+               job_id = logElements.getAttribute("JobId");
+
+               /* Insert data */
+               var dataElements = xmlDoc.getElementsByTagName("Data");
+
+               for(var x=0 ; x < dataElements.length ; x++)
+               {
+                       var insertTable = document.getElementById("logTable");
+                       var insertRow = document.createElement("tr");
+                       var insertCel1 = document.createElement("td");
+                       var insertCel2 = document.createElement("td");
+
+                       var line_number = dataElements[x].getAttribute("Line");
+                       var line_data =  dataElements[x].childNodes[0].nodeValue;
+
+                       insertCel1.width = '30';
+                       insertCel1.style.textAlign = 'right';
+                       insertCel1.style.cellpacing = '5';
+                       insertCel1.innerHTML = line_number;
+                       last_line = line_number;
+
+                       insertCel2.style.textAlign = 'left';
+                       insertCel2.innerHTML = line_data;
+
+                       insertRow.appendChild(insertCel1);
+                       insertRow.appendChild(insertCel2);
+
+                       insertTable.appendChild(insertRow);
+
+               }
+               scrollToBottom();
+
+               if(conti && stop) {
+                       requestLog();
+               }
+       }
+
+       function stopLog() {
+               stop = 0;
+       }
+
+       function moreLog() {
+               stop = 1;
+               requestLog();
+       }
+
+       function requestLog() {
+               createHttpRequest();
+               if(request) {
+                       var next_line = Number(last_line) + 1;
+                       var url = "/jobs/log/"+ job_id + "/" + next_line;
+                       request.open("GET", url, true);
+                       request.onreadystatechange = updatePage;
+                       request.send(null);
+               }
+       }
+
+       function updatePage() {
+               if (request.readyState == 4) {
+                       if (request.status == 200) {
+                               receiveData();
+                       }
+                       else if (request.status == 404) {
+                               alert("Request URL does not exist");
+                       }
+                       else {
+                               alert("Error: status code is " + request.status);
+                       }
+               }
+       }
+
+       function getYScroll()
+       {
+               var yScroll;  
+               if (window.innerHeight && window.scrollMaxY) {                  
+                       yScroll = window.innerHeight + window.scrollMaxY;
+               } else if (document.body.scrollHeight > document.body.offsetHeight){ // all but Explorer Mac
+                       yScroll = document.body.scrollHeight;
+               } else { // Explorer Mac...would also work in Explorer 6 Strict, Mozilla and Safari
+                       yScroll = document.body.offsetHeight;
+               }
+               return yScroll;
+       }
+       
+       function scrollToBottom() {
+               window.scrollTo(0,getYScroll());
+       }
+
+       requestLog();
+</script>
+
+<div data-role="page" id="jobs">
+       <table id="logTable" style="border: #000000 1px solid; font-size:9pt">
+       </table> 
+       <div data-role="controlgroup" data-type="horizontal">
+               <input type="button" value="More" onClick=moreLog() / > 
+               <input type="button" value="Stop" onClick=stopLog() / > 
+       </div>
+</div>
+
diff --git a/dibs-web/public/robots.txt b/dibs-web/public/robots.txt
new file mode 100644 (file)
index 0000000..085187f
--- /dev/null
@@ -0,0 +1,5 @@
+# See http://www.robotstxt.org/wc/norobots.html for documentation on how to use the robots.txt file
+#
+# To ban all spiders from the entire site uncomment the next two lines:
+# User-Agent: *
+# Disallow: /
index 138a01841b562a781cc3c4099ef15deadc79812f..61163739dca827f799f06de7deb29e898a4446cd 100644 (file)
@@ -1,42 +1,51 @@
 body {
        
 }
-.ui-dialog-contain {
-       width: 92.5%;
-       max-width: 500px;
-       margin: 10% auto 15px auto;
-       padding: 0;
-       position: relative;
-       top: -15px;
+
+div.content-primary {
+       width: 65%;
+}
+
+div.content-secondary {
+       width: 25%;
+}
+
+#jobDivSearchInput .ui-input-search {
+    width: 80%;
+    display: inline-block;
+}
+
+#jobDivSearchDate .ui-input-text {
+    width: 80%;
+    display: inline-block;
 }
 
-<style type="text/css">                                                                        
-    table.imagetable {                                                                         
-        font-family: verdana,arial,sans-serif;                                                 
-        font-size:11px;                                                                        
-        color:#333333;                                                                         
-        border-width: 1px;                                                                     
-        border-color: #999999;                                                                 
-        border-collapse: collapse;                                                             
-        text-align : center;                                                                   
-    }                                                                                          
-    table.imagetable th {                                                                      
-        background:#b5cfd2;                                                                    
-        border-width: 1px;                                                                     
-        padding: 8px;                                                                          
-        border-style: solid;                                                                   
-        border-color: #999999;                                                                 
-        text-align: center;                                                                    
-    }                                                                                          
-    table.imagetable td {                                                                      
-        background:#dcddc0;                                                                    
-        border-width: 1px;                                                                     
-        padding: 8px;                                                                          
-        border-style: solid;                                                                   
-        border-color: #999999;                                                                 
-        max-width: 500px;                                                                      
-    }     
-#for projects page
+table.imagetable {                                                                         
+    font-family: verdana,arial,sans-serif;                                                 
+    font-size:11px;                                                                        
+    color:#333333;                                                                         
+    border-width: 1px;                                                                     
+    border-color: #999999;                                                                 
+    border-collapse: collapse;                                                             
+    text-align : center;                                                                   
+}                                                                                          
+table.imagetable th {                                                                      
+    background:#b5cfd2;                                                                    
+    border-width: 1px;                                                                     
+    padding: 8px;                                                                          
+    border-style: solid;                                                                   
+    border-color: #999999;                                                                 
+    text-align: center;                                                                    
+}                                                                                          
+table.imagetable td {                                                                      
+    background:#dcddc0;                                                                    
+    border-width: 1px;                                                                     
+    padding: 8px;                                                                          
+    border-style: solid;                                                                   
+    border-color: #999999;                                                                 
+    max-width: 500px;                                                                      
+}     
+
 table.projectTableStyle {
     font-family: verdana,arial,sans-serif;
     font-size:11px;
diff --git a/dibs-web/script/rails b/dibs-web/script/rails
new file mode 100755 (executable)
index 0000000..f8da2cf
--- /dev/null
@@ -0,0 +1,6 @@
+#!/usr/bin/env ruby
+# This command will automatically be run when you run "rails" with Rails 3 gems installed from the root of your application.
+
+APP_PATH = File.expand_path('../../config/application',  __FILE__)
+require File.expand_path('../../config/boot',  __FILE__)
+require 'rails/commands'