diff --git a/.gitignore b/.gitignore index 518002ec7..bfc6be225 100644 --- a/.gitignore +++ b/.gitignore @@ -7,3 +7,6 @@ target/ token.properties topcoder_global.properties stacktrace.log +/bin/ +.DS_Store +*/.DS_Store diff --git a/README.md b/README.md index 170e47cfc..9c72e249b 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,41 @@ direct-app ========== +## building +To build, download the docker build container that has all of the build dependencies. You can then run the container to build your local source code. + +1. Clone the github source directory +2. Rename `token.properties.docker` to `token.properties` in the source directory +3. Rename `topcoder_global.properties.docker` to `topcoder_global.properties` +4. Unzip [jboss-4.2.3.zip](http://downloads.sourceforge.net/project/jboss/JBoss/JBoss-4.2.3.GA/jboss-4.2.3.GA.zip?r=http%3A%2F%2Fsourceforge.net%2Fprojects%2Fjboss%2Ffiles%2FJBoss%2FJBoss-4.2.3.GA%2F) in your root source directory. The build will place jboss deployment files here. It also needs some of its libraries for the build itself. +5. Run the docker container to execute a build. The format of the command is `docker run --rm=true -v :/data -t appiriodevops/tc-direct-app-build `. + + For example, `docker run --rm=true -v /Users/james/dev/topcoder/direct-app:/data -t appiriodevops/tc-direct-app-build clean package-direct deploy-prod` + +> NOTE: the source directory should be writeable to Docker so use a directory under `/Users/` + +## running locally +In this configuration, we'll run the direct app in a docker container locally but it unfortunately requires many dependencies so we'll need to run several containers and connect to the dev database. To run, follow these steps. + +> NOTE: it is assumed you are running with the latest Docker toolbox and Docker compose (1.5+) + +1. Add this entry to your local /etc/hosts file: ` docker.topcoder-dev.com`. This is needed for auth integration that requires the same top level domain. You can get the docker ip with the command `docker-machine ip default` +2. Set the following environment variables: +* TC_DEV_NAT_DIR : Local directory containing the pem file for accessing the dev NAT instance (used to create a tunnel to the dev informix instances) +* TC_DIRECT_SRC_HOME : Local directory for the root direct-app directory +* ASP_API_URL : Base URL for the ASP API (e.g., https://api.topcoder-dev.com) +3. Run `docker-compose up` from the `docker` subdirectory containing the `docker-compose.yml` file + + + This will start the app with an endpoint available on port 443. You can now go to https://docker.topcoder-dev.com/direct/enterpriseDashboard/activeContests.action + +> NOTE: the SSL certificate is self-signed as will generate a warning/error when you access the site for the first time. Just accept it and continue. + +--- + + +## **old** instructions + Setup on VM: * Once you get your VM, login into the VM with your private key and account 'direct' * Back up token.properties and topcoder_global.properties in /home/direct/direct somewhere @@ -8,7 +43,7 @@ Setup on VM: * Git Clone the direct-app repo into folder /home/direct/direct. * Copy the back up *.properties files back to /home/direct/direct * Among the *.properties, update topcoder_global.properties, add line 'direct_service_libdir=${libdir}/tcs/ejb' after tcs_libdir property -* Make sure JDK7 is used: run +* Make sure JDK7 is used: run * + export JAVA_HOME=/opt/jdk1.7.0_17 * + export PATH=/opt/jdk1.7.0_17/bin:$PATH diff --git a/build-dependencies.xml b/build-dependencies.xml index 3bc394b00..e1bb84460 100644 --- a/build-dependencies.xml +++ b/build-dependencies.xml @@ -401,11 +401,13 @@ + @@ -472,6 +474,8 @@ + + @@ -622,6 +626,10 @@ + + + + @@ -648,9 +656,12 @@ + + diff --git a/build.xml b/build.xml index ac3644fe7..7fe9ace2c 100644 --- a/build.xml +++ b/build.xml @@ -291,12 +291,20 @@ + + + + + + diff --git a/components/copilot_pool_and_profiles_services/conf/META-INF/mapping.hbm.xml b/components/copilot_pool_and_profiles_services/conf/META-INF/mapping.hbm.xml index ef551a955..073552714 100644 --- a/components/copilot_pool_and_profiles_services/conf/META-INF/mapping.hbm.xml +++ b/components/copilot_pool_and_profiles_services/conf/META-INF/mapping.hbm.xml @@ -64,7 +64,12 @@ + + + copilot_project_sequence + diff --git a/conf/ear/META-INF/application.xml b/conf/ear/META-INF/application.xml index 4197b8e05..5a58d13b3 100644 --- a/conf/ear/META-INF/application.xml +++ b/conf/ear/META-INF/application.xml @@ -96,11 +96,11 @@ conf - - - scorecard.war - /direct/scorecard - + + + scorecard.war + /direct/scorecard + diff --git a/conf/web/WEB-INF/applicationContext.xml b/conf/web/WEB-INF/applicationContext.xml index 225ee200a..54f6f3aa4 100644 --- a/conf/web/WEB-INF/applicationContext.xml +++ b/conf/web/WEB-INF/applicationContext.xml @@ -294,6 +294,13 @@ + + + + + + @@ -492,14 +499,18 @@ parent="contestAction" scope="prototype"> + + @@ -1528,7 +1539,9 @@ + @@ -1537,13 +1550,16 @@ + + /WEB-INF/project-vm-management.jsp + + + /WEB-INF/project-work-management.jsp + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/conf/web/WEB-INF/tld/tcdirect-functions.tld b/conf/web/WEB-INF/tld/tcdirect-functions.tld index 281c9d7b1..81ecf1581 100644 --- a/conf/web/WEB-INF/tld/tcdirect-functions.tld +++ b/conf/web/WEB-INF/tld/tcdirect-functions.tld @@ -165,6 +165,18 @@ com.topcoder.direct.services.view.util.JSPHelper boolean hasWriteProjectPermission(long) + + + hasPermissionToAccessWorkManager + com.topcoder.direct.services.view.util.JSPHelper + boolean hasPermissionToAccessWorkManager(long) + + + + getDemandWorkId + com.topcoder.direct.services.view.util.JSPHelper + java.lang.String getDirectProjectDemandWorkId(long) + maxLong diff --git a/docker/direct-app-build/Dockerfile b/docker/direct-app-build/Dockerfile new file mode 100644 index 000000000..9ff16c478 --- /dev/null +++ b/docker/direct-app-build/Dockerfile @@ -0,0 +1,28 @@ +FROM centos:6 + +RUN yum install -y \ + java-1.6.0-openjdk-devel.x86_64 \ + unzip \ + tar + +COPY grails-1.3.7.zip /root/ +COPY apache-ant-1.7.1-bin.tar.gz /root/ +COPY ant-libs.tgz /root/ + +RUN unzip -d /root /root/grails-1.3.7.zip && tar --directory=/root -xzf /root/apache-ant-1.7.1-bin.tar.gz && tar --directory=/root/apache-ant-1.7.1/lib -xzvf /root/ant-libs.tgz + +# need to copy because dynamic download from repo fails +COPY json-rest-api-1.0.8.zip /root/grails-1.3.7/plugins/grails-json-rest-api-1.0.8.zip + +ENV JAVA_HOME /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.35.x86_64 +ENV GRAILS_HOME /root/grails-1.3.7 +ENV ANT_HOME /root/apache-ant-1.7.1 +ENV PATH $JAVA_HOME/bin:$GRAILS_HOME/bin:$ANT_HOME/bin:$PATH + +VOLUME /data + +WORKDIR /data + +# ant dist-backend +ENTRYPOINT ["/root/apache-ant-1.7.1/bin/ant"] + diff --git a/docker/direct-app-build/ant-contrib-1.0b3-bin.zip b/docker/direct-app-build/ant-contrib-1.0b3-bin.zip new file mode 100644 index 000000000..439e66fc6 Binary files /dev/null and b/docker/direct-app-build/ant-contrib-1.0b3-bin.zip differ diff --git a/docker/direct-app-build/ant-libs.tgz b/docker/direct-app-build/ant-libs.tgz new file mode 100644 index 000000000..42f05155f Binary files /dev/null and b/docker/direct-app-build/ant-libs.tgz differ diff --git a/docker/direct-app-build/apache-ant-1.7.1-bin.tar.gz b/docker/direct-app-build/apache-ant-1.7.1-bin.tar.gz new file mode 100644 index 000000000..4ca02bd9c Binary files /dev/null and b/docker/direct-app-build/apache-ant-1.7.1-bin.tar.gz differ diff --git a/docker/direct-app-build/commons-logging-1.2-bin.zip b/docker/direct-app-build/commons-logging-1.2-bin.zip new file mode 100644 index 000000000..091e6bda4 Binary files /dev/null and b/docker/direct-app-build/commons-logging-1.2-bin.zip differ diff --git a/docker/direct-app-build/grails-1.3.7.zip b/docker/direct-app-build/grails-1.3.7.zip new file mode 100644 index 000000000..dcf927060 Binary files /dev/null and b/docker/direct-app-build/grails-1.3.7.zip differ diff --git a/docker/direct-app-build/json-rest-api-1.0.8.zip b/docker/direct-app-build/json-rest-api-1.0.8.zip new file mode 100644 index 000000000..3b6722f23 Binary files /dev/null and b/docker/direct-app-build/json-rest-api-1.0.8.zip differ diff --git a/docker/direct-app/Dockerfile b/docker/direct-app/Dockerfile new file mode 100644 index 000000000..e053aeab2 --- /dev/null +++ b/docker/direct-app/Dockerfile @@ -0,0 +1,30 @@ +FROM centos:6 + +RUN yum install -y \ + java-1.7.0-openjdk-devel.x86_64 \ + unzip \ + tar \ + wget + +#RUN mkdir /data + +WORKDIR /data + +RUN ["wget", "-O", "/data/jboss-4.2.3.zip", "http://downloads.sourceforge.net/project/jboss/JBoss/JBoss-4.2.3.GA/jboss-4.2.3.GA.zip?r=http%3A%2F%2Fsourceforge.net%2Fprojects%2Fjboss%2Ffiles%2FJBoss%2FJBoss-4.2.3.GA"] + +RUN ["unzip", "/data/jboss-4.2.3.zip"] + +ENV JAVA_HOME /usr/lib/jvm/jre-1.7.0-openjdk.x86_64 +ENV JBOSS_HOME /data/jboss-4.2.3.GA + +COPY start-jboss.sh /data/jboss-4.2.3.GA/bin/ +COPY TC.prod.ldap.keystore /data/jboss-4.2.3.GA/bin/ + +#VOLUME /data/jboss-4.2.3.GA/server/direct + +RUN mkdir /data/temp_files +RUN rm /data/jboss-4.2.3.zip + +CMD ["/data/jboss-4.2.3.GA/bin/start-jboss.sh"] + +#EXPOSE 8080 diff --git a/docker/direct-app/TC.prod.ldap.keystore b/docker/direct-app/TC.prod.ldap.keystore new file mode 100644 index 000000000..4a3c66505 Binary files /dev/null and b/docker/direct-app/TC.prod.ldap.keystore differ diff --git a/docker/direct-app/start-jboss.sh b/docker/direct-app/start-jboss.sh new file mode 100755 index 000000000..0f536463a --- /dev/null +++ b/docker/direct-app/start-jboss.sh @@ -0,0 +1,5 @@ +#!/bin/bash + +echo "ASP API=${ASP_API_URL}" + +$JAVA_HOME/bin/java -Dasp.api-base-url=${ASP_API_URL} -server -Dsun.rmi.dgc.client.gcInterval=600000 -Dsun.rmi.dgc.server.gcInterval=600000 -Djavax.net.ssl.trustStore=/data/jboss-4.2.3.GA/bin/TC.prod.ldap.keystore -XX:+UseParallelGC -XX:ParallelGCThreads=8 -Djboss.remoting.pre_2_0_compatible=true -XX:PermSize=512m -XX:MaxPermSize=1024m -XX:+CMSPermGenSweepingEnabled -XX:+CMSClassUnloadingEnabled -Dlog4j.debug -Djava.net.preferIPv4Stack=true -Djboss.remoting.pre_2_0_compatible=true -Djava.endorsed.dirs=$JBOSS_HOME/lib/endorsed -classpath $JBOSS_HOME/bin/run.jar:$JAVA_HOME/lib/tools.jar org.jboss.Main -c direct -b 0.0.0.0 diff --git a/docker/direct-web/Dockerfile b/docker/direct-web/Dockerfile new file mode 100644 index 000000000..e8ab80f53 --- /dev/null +++ b/docker/direct-web/Dockerfile @@ -0,0 +1,12 @@ +FROM nginx + +COPY direct-web-nginx.conf /etc/nginx/conf.d/ +COPY ssl /etc/nginx/ssl/ + +RUN mkdir -p /cache/nginx + +#VOLUME /data + +#CMD ["/usr/sbin/nginx"] + +#EXPOSE 8080 diff --git a/docker/direct-web/direct-web-nginx.conf b/docker/direct-web/direct-web-nginx.conf new file mode 100644 index 000000000..e1524a2b3 --- /dev/null +++ b/docker/direct-web/direct-web-nginx.conf @@ -0,0 +1,45 @@ +proxy_cache_path /cache/nginx levels=1:2 keys_zone=STATIC:10m + inactive=24h max_size=1g; + +server { + #listen 8080; + #hostname localhost; + listen 443; + ssl on; + ssl_certificate /etc/nginx/ssl/dockerssl.crt; + ssl_certificate_key /etc/nginx/ssl/dockerssl.key; + ssl_session_cache shared:SSL:20m; + ssl_session_timeout 180m; + server_name docker.topcoder.com; + + location /css/ { + root /data; + } + + location /scripts/ { + root /data; + } + + location /images/ { + root /data; + } + + location /reg2/ { + proxy_pass https://www.topcoder-dev.com/reg2/; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_read_timeout 6000s; + } + + location / { + proxy_pass http://direct-app:8080/; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_read_timeout 6000s; + proxy_cache STATIC; + proxy_cache_valid 200 1d; + proxy_cache_use_stale error timeout invalid_header updating + http_500 http_502 http_503 http_504; + } + +} diff --git a/docker/direct-web/ssl/dockerssl.crt b/docker/direct-web/ssl/dockerssl.crt new file mode 100644 index 000000000..8ce3b2c82 --- /dev/null +++ b/docker/direct-web/ssl/dockerssl.crt @@ -0,0 +1,17 @@ +-----BEGIN CERTIFICATE----- +MIICvzCCAiigAwIBAgIJAKaOg0EBg0ZSMA0GCSqGSIb3DQEBBQUAMEoxCzAJBgNV +BAYTAlVTMQswCQYDVQQIEwJDQTEQMA4GA1UEChMHQXBwaXJpbzEcMBoGA1UEAxMT +ZG9ja2VyLnRvcGNvZGVyLmNvbTAeFw0xNTA1MTExNzU1NTNaFw0yMDEwMzExNzU1 +NTNaMEoxCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDQTEQMA4GA1UEChMHQXBwaXJp +bzEcMBoGA1UEAxMTZG9ja2VyLnRvcGNvZGVyLmNvbTCBnzANBgkqhkiG9w0BAQEF +AAOBjQAwgYkCgYEA4vyj04PsLUh3vugtLhCm1X1lVkrkYO5g6ZEQOWa0IMUXuQWE +vbi+qwJpEkSxLF7mQkBHsMUZsxODCHX2TC2dAxa7xQ5pZcJkmM4XGjO3W0NP8fTk +eudyAKOD+oxVmA96B1SEeoKhW1uz54u0gN1t/+pbfpelpMwaIx7eA2CwhpMCAwEA +AaOBrDCBqTAdBgNVHQ4EFgQU+t7h8Sby9elRv4uZlyzr6YcNFLowegYDVR0jBHMw +cYAU+t7h8Sby9elRv4uZlyzr6YcNFLqhTqRMMEoxCzAJBgNVBAYTAlVTMQswCQYD +VQQIEwJDQTEQMA4GA1UEChMHQXBwaXJpbzEcMBoGA1UEAxMTZG9ja2VyLnRvcGNv +ZGVyLmNvbYIJAKaOg0EBg0ZSMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQAD +gYEAe3Wpj8vIGEI9SUnkYwDo2ZPASTzzH9uB4S8cShDtnKdA5bzc7GbS++6iZjHb +U/Z3kqNqkjJbfRC4840Q/KL6OAXya5Gs292ofeU96L8oQE8/cIYIx++Ggh4FDzlo +ZqsTUirfNkq66Ese8lJlRRPOCFmIB6v3zM7sjvwQuDrQHNA= +-----END CERTIFICATE----- diff --git a/docker/direct-web/ssl/dockerssl.key b/docker/direct-web/ssl/dockerssl.key new file mode 100644 index 000000000..d04eec372 --- /dev/null +++ b/docker/direct-web/ssl/dockerssl.key @@ -0,0 +1,15 @@ +-----BEGIN RSA PRIVATE KEY----- +MIICXAIBAAKBgQDi/KPTg+wtSHe+6C0uEKbVfWVWSuRg7mDpkRA5ZrQgxRe5BYS9 +uL6rAmkSRLEsXuZCQEewxRmzE4MIdfZMLZ0DFrvFDmllwmSYzhcaM7dbQ0/x9OR6 +53IAo4P6jFWYD3oHVIR6gqFbW7Pni7SA3W3/6lt+l6WkzBojHt4DYLCGkwIDAQAB +AoGBALdgx7HP+HQ1AZjX1fhLN51uavomEw9ERkMsEOFu2cNHt3ygurbTlCZwEhbS +LBjeqkOHzuM+uR51evzQ4CR3DUq1c3z/CIh7BjMiRuqxpjcilQDCfNZ5JVlFJN3c +kDCBpoXLeJ/465dsbT2OfQTOAQW7lRpi7ZRV561XpBqMTbthAkEA/qrycytcj5Tz +6aIaFhA0ouj/JCg3Ceonp5zrMi5A0/j3C1/vT8If7evGBBTxOP0kVLBobRmQvOAF +dejf/Tb3qwJBAOQsn1eNkPYC1mlOcMfsBLqC1zMc086K67QDb+53OyQlRE1KDC60 +zCm/nJC/y58w1RpIJBTd32rQTs6xiGHqpLkCQA1lAmGKW1D1/apBK2wTqCEVbi4B +q3trBHDtcPVvt1su0heYESc5x6Ik74JRc6qSrfGCYcuzN4ino8Hi4L0ZwgcCQFn4 +xnQNnGWFROqNRadvh4XL5fN/oH1HBh4bZN2RIj7kewRG+HrKS98CcUgaeL4y0TTl +0WRxAJHrxcd29aI2lfECQHqwLR9bvt3JlrPfZieyfOUYsNlMSDOKIyyg51CI9V6T +lvWjK1WC/Kgj3irVuZmpsGs4dj/iZVLzG8LBcCwjblc= +-----END RSA PRIVATE KEY----- diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml new file mode 100644 index 000000000..11d08f991 --- /dev/null +++ b/docker/docker-compose.yml @@ -0,0 +1,24 @@ +tc-cache: + image: "tc-cache" +informixdb: + image: "direct-informixdb" + volumes: + - "${TC_DEV_NAT_DIR}:/ssh" +direct-app: + environment: + - ASP_API_URL=${ASP_API_URL} + image: "direct-app" + links: + - "informixdb" + - "tc-cache" + volumes: + - "${TC_DIRECT_SRC_HOME}/jboss-4.2.3.GA/server/default:/data/jboss-4.2.3.GA/server/direct" + - "${TC_DIRECT_SRC_HOME}/jboss-4.2.3.GA/server/default:/wtf" +direct-web: + image: "direct-web" + links: + - "direct-app" + volumes: + - "${TC_DIRECT_SRC_HOME}/src/web:/data" + ports: + - "443:443" diff --git a/docker/informixdb/Dockerfile b/docker/informixdb/Dockerfile new file mode 100644 index 000000000..29ac6b68f --- /dev/null +++ b/docker/informixdb/Dockerfile @@ -0,0 +1,13 @@ +# SSH tunnel to informix dev database +# usage: docker run -d --name=informixdev-tunnel -v /Users/james/ssh:/ssh -p 2020:2020 -t informixdev-tunnel +FROM gliderlabs/alpine:3.2 + +MAINTAINER james@appirio.com + +RUN apk-install openssh-client + +#VOLUME ["/ssh"] + +#EXPOSE 2020 + +CMD ["ssh", "ec2-user@54.164.99.116", "-i", "/ssh/topcoder-dev-vpc-nat.pem", "-o", "StrictHostKeyChecking=no", "-vgN", "-L", "2020:10.15.94.50:2020"] diff --git a/docker/tc-cache/Dockerfile b/docker/tc-cache/Dockerfile new file mode 100644 index 000000000..6b772ed41 --- /dev/null +++ b/docker/tc-cache/Dockerfile @@ -0,0 +1,26 @@ +FROM centos:6 + +RUN yum install -y \ + java-1.7.0-openjdk-devel.x86_64 \ + unzip \ + tar \ + wget + +WORKDIR /data + +RUN ["wget", "-O", "/data/jboss-4.2.3.zip", "http://downloads.sourceforge.net/project/jboss/JBoss/JBoss-4.2.3.GA/jboss-4.2.3.GA.zip?r=http%3A%2F%2Fsourceforge.net%2Fprojects%2Fjboss%2Ffiles%2FJBoss%2FJBoss-4.2.3.GA"] + +RUN ["unzip", "/data/jboss-4.2.3.zip"] + +ENV JAVA_HOME /usr/lib/jvm/jre-1.7.0-openjdk.x86_64 +ENV JBOSS_HOME /data/jboss-4.2.3.GA + +# updated for ip bind +COPY start-jboss.sh /data/jboss-4.2.3.GA/bin/ +COPY cache /data/jboss-4.2.3.GA/server/cache/ + +RUN rm /data/jboss-4.2.3.zip + +CMD ["/data/jboss-4.2.3.GA/bin/start-jboss.sh"] + +EXPOSE 22 diff --git a/docker/tc-cache/cache/conf/ApplicationServer.properties b/docker/tc-cache/cache/conf/ApplicationServer.properties new file mode 100644 index 000000000..7c0506a54 --- /dev/null +++ b/docker/tc-cache/cache/conf/ApplicationServer.properties @@ -0,0 +1,39 @@ +# Environments +PROD=1 +QA=2 +DEV=3 + + +# EXODUS +ENVIRONMENT=1 +SERVER_NAME=www.topcoder.com +STUDIO_SERVER_NAME=studio.topcoder.com +CORP_SERVER_NAME=www.topcoder.com/corp +SOFTWARE_SERVER_NAME=software.topcoder.com +FORUMS_SERVER_NAME=forums.topcoder.com +WIKI_SERVER_NAME=209.202.141.188/wiki +HOST_URL=127.0.0.1:1299 +USER_SERVICES_HOST_URL=127.0.0.1:1299 +CONTEST_HOST_URL=192.168.12.74:1299 +BASE_DIR=/home/web/web/ +XSL_CACHING=true +SECURITY_PROVIDER_URL=127.0.0.1:1299 +TCS_APP_SERVER_URL=192.168.12.151:1099 +SESSION_ID_LENGTH=0 +#FILE_CONVERSION_PROVIDER_URL=172.16.1.6:1099 +FILE_CONVERSION_PROVIDER_URL=192.168.12.212:1099 +DISTRIBUTED_UI_SERVER_NAME = 192.168.12.71:8280 +OR_WEBSERVICES_SERVER_NAME = 192.168.12.151:8080 + + +JNDI_FACTORY=org.jnp.interfaces.NamingContextFactory +JMS_FACTORY=java:/ConnectionFactory +JMS_BKP_FACTORY=jms.connection.jmsFactory_BKP +TRANS_FACTORY=javax.transaction.UserTransaction +TRANS_MANAGER=java:/TransactionManager +SECURITY_CONTEXT_FACTORY=org.jnp.interfaces.NamingContextFactory + + + + + diff --git a/docker/tc-cache/cache/conf/cache.properties b/docker/tc-cache/cache/conf/cache.properties new file mode 100644 index 000000000..d5a9de257 --- /dev/null +++ b/docker/tc-cache/cache/conf/cache.properties @@ -0,0 +1,20 @@ +cache.primary = 192.168.12.71:8501 +#cache.secondary = 172.16.20.41:8502 + +# allow at most 25000 items in the cache +cache.size = 25000 +# sync every 10 seconds +cache.synctime = 10000 + +# check every minute +cache.expirecheck = 60000 +# expire after 10 hours +cache.expiretime = 3600000 + + + +host_url = 127.0.0.1:1199 +cache_admin_jndi_name = TCCacheAdmin +#host_url = 192.168.12.73:1099 +jndi_name = TCCache +cache_client_class=com.topcoder.web.common.cache.JbossCacheClient diff --git a/docker/tc-cache/cache/conf/jboss-log4j.xml b/docker/tc-cache/cache/conf/jboss-log4j.xml new file mode 100644 index 000000000..c059c1b8e --- /dev/null +++ b/docker/tc-cache/cache/conf/jboss-log4j.xml @@ -0,0 +1,301 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docker/tc-cache/cache/conf/jboss-minimal.xml b/docker/tc-cache/cache/conf/jboss-minimal.xml new file mode 100644 index 000000000..504c46390 --- /dev/null +++ b/docker/tc-cache/cache/conf/jboss-minimal.xml @@ -0,0 +1,151 @@ + + + + + + + + + + + + + + + + + + + + resource:jboss-log4j.xml + + + + + + + + + JBoss System Threads + System Threads + + 60000 + + 10 + + 1000 + + run + + + + + + + + + + + + + false + + 1099 + + ${jboss.bind.address} + + 1098 + + ${jboss.bind.address} + + jboss.system:service=ThreadPool + + jboss:service=NamingBeanImpl + + + + + + + + + + jboss.system:service=MainDeployer + + + org.jboss.deployment.DeploymentSorter + + + org.jboss.deployment.scanner.DeploymentFilter + + 5000 + + + + deploy/ + + + + + diff --git a/docker/tc-cache/cache/conf/jboss-service.xml b/docker/tc-cache/cache/conf/jboss-service.xml new file mode 100644 index 000000000..9c972e00b --- /dev/null +++ b/docker/tc-cache/cache/conf/jboss-service.xml @@ -0,0 +1,696 @@ + + + + + + + + + + + + + + + + + + jboss.system:service=MainDeployer + jboss.system:service=ServiceDeployer + jboss.j2ee:service=EARDeployer + jboss.ejb:service=EJBDeployer + jboss.jca:service=RARDeployer + jboss.jca:service=ConnectionFactoryDeployer + jboss.web:service=WebServer + jboss.j2ee:service=ClientDeployer + jboss:service=Mail + jboss.mq:service=DestinationManager + jboss:service=Naming + jboss:service=TransactionManager + jboss:service=ClientUserTransaction + jboss:service=CorbaORB + + + + + + + + + + + + + + + + + + JBoss System Threads + System Threads + + 60000 + + 10 + + 1000 + + run + + + + + + + + + + resource:jboss-log4j.xml + + true + + 60 + + + + + + + + + + + + + java.rmi.server.RMIClassLoaderSpi + org.jboss.system.JBossRMIClassLoader + + + + + + + + + + + + ports-01 + ${jboss.home.url}/docs/examples/binding-manager/sample-bindings.xml + + org.jboss.services.binding.XMLServicesStoreFactory + + + + + + + + + + + ${jboss.bind.address} + 8083 + + ${java.rmi.server.hostname} + + true + + false + + + jboss.system:service=ThreadPool + + + + + + + + + + + + + false + + 1099 + + ${jboss.bind.address} + + 1098 + + ${jboss.bind.address} + + jboss.system:service=ThreadPool + + jboss:service=NamingBeanImpl + + + + + jboss:service=HAJNDI + + + + + + + + jboss.security:service=XMLLoginConfig + + + login-config.xml + + + + + + true + org.jboss.security.plugins.JaasSecurityManager + anonymous + + 1800 + + 60 + + false + + + + + + + + + + + + + + + + 300 + ${jboss.server.data.dir}/tx-object-store + + + + + + + jboss:service=invoker,type=jrmp + jboss:service=ClientUserTransaction + UserTransactionSessionFactory + org.jboss.tm.usertx.interfaces.UserTransactionSessionFactory + + + org.jboss.proxy.ClientMethodInterceptor + org.jboss.invocation.InvokerInterceptor + + + jboss:service=invoker,type=jrmp + + + + + jboss:service=invoker,type=jrmp + jboss:service=ClientUserTransaction + + org.jboss.tm.usertx.interfaces.UserTransactionSession + + + org.jboss.proxy.ClientMethodInterceptor + org.jboss.invocation.InvokerInterceptor + + + jboss:service=invoker,type=jrmp + + + + + + + + + + + + + + + + jboss:service=TransactionManager + jboss.remoting:service=Connector,transport=socket + + + + + 4444 + ${jboss.bind.address} + + jboss:service=TransactionManager + + + + + jboss:service=TransactionManager + + + + 1 + 300 + 300 + 60000 + ${jboss.bind.address} + 4445 + ${jboss.bind.address} + 0 + 1 + false + + + jboss:service=TransactionManager + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + invocation + org.jboss.invocation.unified.marshall.InvocationMarshaller + org.jboss.invocation.unified.marshall.InvocationUnMarshaller + + + + + + + 600000 + ${jboss.bind.address} + 4446 + + + true + + + + + + + + + + + + + + + + + + + + + + + + + jboss:service=invoker,type=unified + + + + jboss.remoting:service=NetworkRegistry + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + jboss.system:service=MainDeployer + + + org.jboss.deployment.DeploymentSorter + + + + + + + #,%,\,,.,_$ + + #,$,%,~,\,v,.BAK,.bak,.old,.orig,.tmp,.rej,.sh + + .make.state,.nse_depinfo,CVS,CVS.admin,RCS,RCSLOG,SCCS,TAGS,core,tags + + + + 5000 + + + true + + + + deploy/ + + + + True + + + + diff --git a/docker/tc-cache/cache/conf/jbossjta-properties.xml b/docker/tc-cache/cache/conf/jbossjta-properties.xml new file mode 100644 index 000000000..c52151c8f --- /dev/null +++ b/docker/tc-cache/cache/conf/jbossjta-properties.xml @@ -0,0 +1,228 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docker/tc-cache/cache/conf/jndi.properties b/docker/tc-cache/cache/conf/jndi.properties new file mode 100644 index 000000000..17e8a87e3 --- /dev/null +++ b/docker/tc-cache/cache/conf/jndi.properties @@ -0,0 +1,4 @@ +# DO NOT EDIT THIS FILE UNLESS YOU KNOW WHAT YOU ARE DOING +# +java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory +java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces diff --git a/docker/tc-cache/cache/conf/login-config.xml b/docker/tc-cache/cache/conf/login-config.xml new file mode 100644 index 000000000..5de9cfeb2 --- /dev/null +++ b/docker/tc-cache/cache/conf/login-config.xml @@ -0,0 +1,159 @@ + + + + + + + + + + + + true + + + + + + + + + guest + java:/DefaultDS + SELECT PASSWD FROM JMS_USERS WHERE USERID=? + SELECT ROLEID, 'Roles' FROM JMS_ROLES WHERE USERID=? + + + + + + + + + + + sa + sa + + jboss.jca:service=LocalTxCM,name=DefaultDS + + + + + + + + guest + guest + guest + jboss.jca:service=TxCM,name=JmsXA + + + + + + + + + props/jmx-console-users.properties + props/jmx-console-roles.properties + + + + + + + + + web-console-users.properties + web-console-roles.properties + + + + + + + + + props/jbossws-users.properties + props/jbossws-roles.properties + anonymous + + + + + + + + + + + + + + diff --git a/docker/tc-cache/cache/conf/props/jbossws-roles.properties b/docker/tc-cache/cache/conf/props/jbossws-roles.properties new file mode 100644 index 000000000..3aa243dc2 --- /dev/null +++ b/docker/tc-cache/cache/conf/props/jbossws-roles.properties @@ -0,0 +1,2 @@ +# A sample roles.properties file for use with the UsersRolesLoginModule +kermit=friend \ No newline at end of file diff --git a/docker/tc-cache/cache/conf/props/jbossws-users.properties b/docker/tc-cache/cache/conf/props/jbossws-users.properties new file mode 100644 index 000000000..1f3533572 --- /dev/null +++ b/docker/tc-cache/cache/conf/props/jbossws-users.properties @@ -0,0 +1,2 @@ +# A sample users.properties file for use with the UsersRolesLoginModule +kermit=thefrog \ No newline at end of file diff --git a/docker/tc-cache/cache/conf/props/jmx-console-roles.properties b/docker/tc-cache/cache/conf/props/jmx-console-roles.properties new file mode 100644 index 000000000..211d157f2 --- /dev/null +++ b/docker/tc-cache/cache/conf/props/jmx-console-roles.properties @@ -0,0 +1,2 @@ +# A sample roles.properties file for use with the UsersRolesLoginModule +admin=JBossAdmin,HttpInvoker diff --git a/docker/tc-cache/cache/conf/props/jmx-console-users.properties b/docker/tc-cache/cache/conf/props/jmx-console-users.properties new file mode 100644 index 000000000..6dc8aa518 --- /dev/null +++ b/docker/tc-cache/cache/conf/props/jmx-console-users.properties @@ -0,0 +1,2 @@ +# A sample users.properties file for use with the UsersRolesLoginModule +admin=admin diff --git a/docker/tc-cache/cache/conf/standardjboss.xml b/docker/tc-cache/cache/conf/standardjboss.xml new file mode 100644 index 000000000..9939c89e3 --- /dev/null +++ b/docker/tc-cache/cache/conf/standardjboss.xml @@ -0,0 +1,1216 @@ + + + + + + + + + + + + true + + + + + entity-unified-invoker + jboss:service=invoker,type=unified + org.jboss.proxy.ejb.ProxyFactory + + + + org.jboss.proxy.ejb.HomeInterceptor + org.jboss.proxy.SecurityInterceptor + org.jboss.proxy.TransactionInterceptor + org.jboss.invocation.InvokerInterceptor + org.jboss.invocation.MarshallingInvokerInterceptor + + + org.jboss.proxy.ejb.EntityInterceptor + org.jboss.proxy.SecurityInterceptor + org.jboss.proxy.TransactionInterceptor + org.jboss.invocation.InvokerInterceptor + org.jboss.invocation.MarshallingInvokerInterceptor + + + org.jboss.proxy.ejb.ListEntityInterceptor + org.jboss.proxy.SecurityInterceptor + org.jboss.proxy.TransactionInterceptor + org.jboss.invocation.InvokerInterceptor + org.jboss.invocation.MarshallingInvokerInterceptor + + + + + + + clustered-entity-unified-invoker + jboss:service=invoker,type=unifiedha + org.jboss.proxy.ejb.ProxyFactoryHA + + + + org.jboss.proxy.ejb.HomeInterceptor + org.jboss.proxy.SecurityInterceptor + org.jboss.proxy.TransactionInterceptor + org.jboss.proxy.ejb.SingleRetryInterceptor + org.jboss.invocation.InvokerInterceptor + org.jboss.invocation.MarshallingInvokerInterceptor + + + org.jboss.proxy.ejb.EntityInterceptor + org.jboss.proxy.SecurityInterceptor + org.jboss.proxy.TransactionInterceptor + org.jboss.proxy.ejb.SingleRetryInterceptor + org.jboss.invocation.InvokerInterceptor + org.jboss.invocation.MarshallingInvokerInterceptor + + + org.jboss.proxy.ejb.ListEntityInterceptor + org.jboss.proxy.SecurityInterceptor + org.jboss.proxy.TransactionInterceptor + org.jboss.proxy.ejb.SingleRetryInterceptor + org.jboss.invocation.InvokerInterceptor + org.jboss.invocation.MarshallingInvokerInterceptor + + + + + + + stateless-unified-invoker + jboss:service=invoker,type=unified + org.jboss.proxy.ejb.ProxyFactory + + + + org.jboss.proxy.ejb.HomeInterceptor + org.jboss.proxy.SecurityInterceptor + org.jboss.proxy.TransactionInterceptor + org.jboss.invocation.InvokerInterceptor + org.jboss.invocation.MarshallingInvokerInterceptor + + + org.jboss.proxy.ejb.StatelessSessionInterceptor + org.jboss.proxy.SecurityInterceptor + org.jboss.proxy.TransactionInterceptor + org.jboss.invocation.InvokerInterceptor + org.jboss.invocation.MarshallingInvokerInterceptor + + + + + + + clustered-stateless-unified-invoker + jboss:service=invoker,type=unifiedha + org.jboss.proxy.ejb.ProxyFactoryHA + + + + org.jboss.proxy.ejb.HomeInterceptor + org.jboss.proxy.SecurityInterceptor + org.jboss.proxy.TransactionInterceptor + org.jboss.proxy.ejb.SingleRetryInterceptor + org.jboss.invocation.InvokerInterceptor + org.jboss.invocation.MarshallingInvokerInterceptor + + + org.jboss.proxy.ejb.StatelessSessionInterceptor + org.jboss.proxy.SecurityInterceptor + org.jboss.proxy.TransactionInterceptor + org.jboss.proxy.ejb.SingleRetryInterceptor + org.jboss.invocation.InvokerInterceptor + org.jboss.invocation.MarshallingInvokerInterceptor + + + + + + + stateful-unified-invoker + jboss:service=invoker,type=unified + org.jboss.proxy.ejb.ProxyFactory + + + + org.jboss.proxy.ejb.HomeInterceptor + org.jboss.proxy.SecurityInterceptor + org.jboss.proxy.TransactionInterceptor + org.jboss.invocation.InvokerInterceptor + org.jboss.invocation.MarshallingInvokerInterceptor + + + org.jboss.proxy.ejb.StatefulSessionInterceptor + org.jboss.proxy.SecurityInterceptor + org.jboss.proxy.TransactionInterceptor + org.jboss.invocation.InvokerInterceptor + org.jboss.invocation.MarshallingInvokerInterceptor + + + + + + + clustered-stateful-unified-invoker + jboss:service=invoker,type=unifiedha + org.jboss.proxy.ejb.ProxyFactoryHA + + + + org.jboss.proxy.ejb.HomeInterceptor + org.jboss.proxy.SecurityInterceptor + org.jboss.proxy.TransactionInterceptor + org.jboss.proxy.ejb.SingleRetryInterceptor + org.jboss.invocation.InvokerInterceptor + org.jboss.invocation.MarshallingInvokerInterceptor + + + org.jboss.proxy.ejb.StatefulSessionInterceptor + org.jboss.proxy.SecurityInterceptor + org.jboss.proxy.TransactionInterceptor + org.jboss.proxy.ejb.SingleRetryInterceptor + org.jboss.invocation.InvokerInterceptor + org.jboss.invocation.MarshallingInvokerInterceptor + + + + + + + entity-rmi-invoker + jboss:service=invoker,type=jrmp + org.jboss.proxy.ejb.ProxyFactory + + + + org.jboss.proxy.ejb.HomeInterceptor + org.jboss.proxy.SecurityInterceptor + org.jboss.proxy.TransactionInterceptor + org.jboss.invocation.InvokerInterceptor + org.jboss.invocation.MarshallingInvokerInterceptor + + + org.jboss.proxy.ejb.EntityInterceptor + org.jboss.proxy.SecurityInterceptor + org.jboss.proxy.TransactionInterceptor + org.jboss.invocation.InvokerInterceptor + org.jboss.invocation.MarshallingInvokerInterceptor + + + org.jboss.proxy.ejb.ListEntityInterceptor + org.jboss.proxy.SecurityInterceptor + org.jboss.proxy.TransactionInterceptor + org.jboss.invocation.InvokerInterceptor + org.jboss.invocation.MarshallingInvokerInterceptor + + + + + + + clustered-entity-rmi-invoker + jboss:service=invoker,type=jrmpha + org.jboss.proxy.ejb.ProxyFactoryHA + + + + org.jboss.proxy.ejb.HomeInterceptor + org.jboss.proxy.SecurityInterceptor + org.jboss.proxy.TransactionInterceptor + org.jboss.proxy.ejb.SingleRetryInterceptor + org.jboss.invocation.InvokerInterceptor + org.jboss.invocation.MarshallingInvokerInterceptor + + + org.jboss.proxy.ejb.EntityInterceptor + org.jboss.proxy.SecurityInterceptor + org.jboss.proxy.TransactionInterceptor + org.jboss.proxy.ejb.SingleRetryInterceptor + org.jboss.invocation.InvokerInterceptor + org.jboss.invocation.MarshallingInvokerInterceptor + + + org.jboss.proxy.ejb.ListEntityInterceptor + org.jboss.proxy.SecurityInterceptor + org.jboss.proxy.TransactionInterceptor + org.jboss.proxy.ejb.SingleRetryInterceptor + org.jboss.invocation.InvokerInterceptor + org.jboss.invocation.MarshallingInvokerInterceptor + + + + + + + stateless-rmi-invoker + jboss:service=invoker,type=jrmp + org.jboss.proxy.ejb.ProxyFactory + + + + org.jboss.proxy.ejb.HomeInterceptor + org.jboss.proxy.SecurityInterceptor + org.jboss.proxy.TransactionInterceptor + org.jboss.invocation.InvokerInterceptor + org.jboss.invocation.MarshallingInvokerInterceptor + + + org.jboss.proxy.ejb.StatelessSessionInterceptor + org.jboss.proxy.SecurityInterceptor + org.jboss.proxy.TransactionInterceptor + org.jboss.invocation.InvokerInterceptor + org.jboss.invocation.MarshallingInvokerInterceptor + + + + + + + clustered-stateless-rmi-invoker + jboss:service=invoker,type=jrmpha + org.jboss.proxy.ejb.ProxyFactoryHA + + + + org.jboss.proxy.ejb.HomeInterceptor + org.jboss.proxy.SecurityInterceptor + org.jboss.proxy.TransactionInterceptor + org.jboss.proxy.ejb.SingleRetryInterceptor + org.jboss.invocation.InvokerInterceptor + org.jboss.invocation.MarshallingInvokerInterceptor + + + org.jboss.proxy.ejb.StatelessSessionInterceptor + org.jboss.proxy.SecurityInterceptor + org.jboss.proxy.TransactionInterceptor + org.jboss.proxy.ejb.SingleRetryInterceptor + org.jboss.invocation.InvokerInterceptor + org.jboss.invocation.MarshallingInvokerInterceptor + + + + + + + stateful-rmi-invoker + jboss:service=invoker,type=jrmp + org.jboss.proxy.ejb.ProxyFactory + + + + org.jboss.proxy.ejb.HomeInterceptor + org.jboss.proxy.SecurityInterceptor + org.jboss.proxy.TransactionInterceptor + org.jboss.invocation.InvokerInterceptor + org.jboss.invocation.MarshallingInvokerInterceptor + + + org.jboss.proxy.ejb.StatefulSessionInterceptor + org.jboss.proxy.SecurityInterceptor + org.jboss.proxy.TransactionInterceptor + org.jboss.invocation.InvokerInterceptor + org.jboss.invocation.MarshallingInvokerInterceptor + + + + + + + clustered-stateful-rmi-invoker + jboss:service=invoker,type=jrmpha + org.jboss.proxy.ejb.ProxyFactoryHA + + + + org.jboss.proxy.ejb.HomeInterceptor + org.jboss.proxy.SecurityInterceptor + org.jboss.proxy.TransactionInterceptor + org.jboss.proxy.ejb.SingleRetryInterceptor + org.jboss.invocation.InvokerInterceptor + org.jboss.invocation.MarshallingInvokerInterceptor + + + org.jboss.proxy.ejb.StatefulSessionInterceptor + org.jboss.proxy.SecurityInterceptor + org.jboss.proxy.TransactionInterceptor + org.jboss.proxy.ejb.SingleRetryInterceptor + org.jboss.invocation.InvokerInterceptor + org.jboss.invocation.MarshallingInvokerInterceptor + + + + + + + message-driven-bean + default + org.jboss.ejb.plugins.jms.JMSContainerInvoker + + DefaultJMSProvider + StdJMSPool + true + + 1 + 15 + 30000 + 1 + + 10 + + queue/DLQ + 10 + 0 + + + + + + + + + singleton-message-driven-bean + default + org.jboss.ejb.plugins.jms.JMSContainerInvoker + + DefaultJMSProvider + StdJMSPool + true + + 1 + 1 + 30000 + 1 + + 10 + + queue/DLQ + 10 + 0 + + + + + + + message-inflow-driven-bean + default + org.jboss.ejb.plugins.inflow.JBossMessageEndpointFactory + + + org.jboss.proxy.ClientMethodInterceptor + org.jboss.ejb.plugins.inflow.MessageEndpointInterceptor + org.jboss.proxy.TransactionInterceptor + org.jboss.invocation.InvokerInterceptor + + + + + + iiop + jboss:service=invoker,type=iiop + org.jboss.proxy.ejb.IORFactory + + org.jboss.iiop.WebCL + per-servant + true + iiop + false + + + + + jms-message-inflow-driven-bean + default + org.jboss.ejb.plugins.inflow.JBossJMSMessageEndpointFactory + + + + providerAdapterJNDI + DefaultJMSProvider + + + minSession + 1 + + + maxSession + 15 + + + keepAlive + 60000 + + + maxMessages + 1 + + + reconnectInterval + 10 + + + useDLQ + true + + + DLQHandler + org.jboss.resource.adapter.jms.inflow.dlq.GenericDLQHandler + + + DLQJNDIName + queue/DLQ + + + DLQMaxResent + 10 + + + + org.jboss.proxy.ClientMethodInterceptor + org.jboss.ejb.plugins.inflow.MessageEndpointInterceptor + org.jboss.proxy.TransactionInterceptor + org.jboss.invocation.InvokerInterceptor + + + + + + + + + Standard CMP 2.x EntityBean + false + entity-unified-invoker + false + false + true + + org.jboss.ejb.plugins.ProxyFactoryFinderInterceptor + org.jboss.ejb.plugins.LogInterceptor + org.jboss.ejb.plugins.SecurityInterceptor + org.jboss.ejb.plugins.TxInterceptorCMT + org.jboss.ejb.plugins.CallValidationInterceptor + org.jboss.ejb.plugins.EntityCreationInterceptor + org.jboss.ejb.plugins.EntityLockInterceptor + org.jboss.ejb.plugins.EntityInstanceInterceptor + org.jboss.ejb.plugins.EntityReentranceInterceptor + org.jboss.resource.connectionmanager.CachedConnectionInterceptor + org.jboss.ejb.plugins.EntitySynchronizationInterceptor + org.jboss.ejb.plugins.cmp.jdbc.JDBCRelationInterceptor + + org.jboss.ejb.plugins.EntityInstancePool + org.jboss.ejb.plugins.InvalidableEntityInstanceCache + org.jboss.ejb.plugins.cmp.jdbc.JDBCStoreManager + org.jboss.ejb.plugins.lock.QueuedPessimisticEJBLock + + org.jboss.ejb.plugins.LRUEnterpriseContextCachePolicy + + 50 + 1000000 + 300 + 600 + 400 + 60 + 1 + 0.75 + + + + 100 + + B + + + + + cmp2.x jdbc2 pm + false + entity-unified-invoker + false + true + true + + org.jboss.ejb.plugins.ProxyFactoryFinderInterceptor + org.jboss.ejb.plugins.LogInterceptor + org.jboss.ejb.plugins.SecurityInterceptor + org.jboss.ejb.plugins.TxInterceptorCMT + org.jboss.ejb.plugins.EntityCreationInterceptor + org.jboss.ejb.plugins.EntityInstanceInterceptor + org.jboss.ejb.plugins.EntityReentranceInterceptor + org.jboss.resource.connectionmanager.CachedConnectionInterceptor + org.jboss.ejb.plugins.EntitySynchronizationInterceptor + org.jboss.ejb.plugins.cmp.jdbc2.RelationInterceptor + + org.jboss.ejb.plugins.EntityInstancePool + org.jboss.ejb.plugins.PerTxEntityInstanceCache + org.jboss.ejb.plugins.cmp.jdbc2.JDBCStoreManager2 + org.jboss.ejb.plugins.lock.NoLock + + + 500 + 10000 + + + + 10 + + + + + + 100 + + C + + + + Clustered CMP 2.x EntityBean + false + clustered-entity-unified-invoker + false + false + + org.jboss.ejb.plugins.ProxyFactoryFinderInterceptor + org.jboss.ejb.plugins.CleanShutdownInterceptor + org.jboss.ejb.plugins.LogInterceptor + org.jboss.ejb.plugins.SecurityInterceptor + org.jboss.ejb.plugins.TxInterceptorCMT + org.jboss.ejb.plugins.CallValidationInterceptor + org.jboss.ejb.plugins.EntityCreationInterceptor + org.jboss.ejb.plugins.EntityLockInterceptor + org.jboss.ejb.plugins.EntityInstanceInterceptor + org.jboss.ejb.plugins.EntityReentranceInterceptor + org.jboss.resource.connectionmanager.CachedConnectionInterceptor + org.jboss.ejb.plugins.EntitySynchronizationInterceptor + org.jboss.ejb.plugins.cmp.jdbc.JDBCRelationInterceptor + + org.jboss.ejb.plugins.EntityInstancePool + org.jboss.ejb.plugins.EntityInstanceCache + org.jboss.ejb.plugins.cmp.jdbc.JDBCStoreManager + org.jboss.ejb.plugins.lock.QueuedPessimisticEJBLock + + org.jboss.ejb.plugins.LRUEnterpriseContextCachePolicy + + 50 + 1000000 + 300 + 600 + 400 + 60 + 1 + 0.75 + + + + 100 + + B + + ${jboss.partition.name:DefaultPartition} + + + + + Standard CMP 2.x EntityBean with cache invalidation + false + entity-unified-invoker + + org.jboss.ejb.plugins.ProxyFactoryFinderInterceptor + org.jboss.ejb.plugins.LogInterceptor + org.jboss.ejb.plugins.SecurityInterceptor + org.jboss.ejb.plugins.TxInterceptorCMT + org.jboss.ejb.plugins.CallValidationInterceptor + org.jboss.ejb.plugins.EntityCreationInterceptor + org.jboss.ejb.plugins.EntityLockInterceptor + org.jboss.ejb.plugins.EntityInstanceInterceptor + org.jboss.ejb.plugins.EntityReentranceInterceptor + org.jboss.resource.connectionmanager.CachedConnectionInterceptor + org.jboss.ejb.plugins.EntitySynchronizationInterceptor + org.jboss.cache.invalidation.triggers.EntityBeanCacheBatchInvalidatorInterceptor + org.jboss.ejb.plugins.cmp.jdbc.JDBCRelationInterceptor + + org.jboss.ejb.plugins.EntityInstancePool + org.jboss.ejb.plugins.InvalidableEntityInstanceCache + org.jboss.ejb.plugins.cmp.jdbc.JDBCStoreManager + org.jboss.ejb.plugins.lock.QueuedPessimisticEJBLock + + org.jboss.ejb.plugins.LRUEnterpriseContextCachePolicy + + 50 + 1000000 + 300 + 600 + 400 + 60 + 1 + 0.75 + + + + 100 + + A + + + + Instance Per Transaction CMP 2.x EntityBean + false + entity-unified-invoker + false + false + + org.jboss.ejb.plugins.ProxyFactoryFinderInterceptor + org.jboss.ejb.plugins.LogInterceptor + org.jboss.ejb.plugins.SecurityInterceptor + org.jboss.ejb.plugins.TxInterceptorCMT + org.jboss.ejb.plugins.CallValidationInterceptor + org.jboss.ejb.plugins.EntityCreationInterceptor + org.jboss.ejb.plugins.EntityLockInterceptor + org.jboss.ejb.plugins.EntityInstanceInterceptor + org.jboss.ejb.plugins.EntityReentranceInterceptor + org.jboss.resource.connectionmanager.CachedConnectionInterceptor + org.jboss.ejb.plugins.EntitySynchronizationInterceptor + org.jboss.ejb.plugins.cmp.jdbc.JDBCRelationInterceptor + + org.jboss.ejb.plugins.EntityInstancePool + org.jboss.ejb.plugins.PerTxEntityInstanceCache + org.jboss.ejb.plugins.cmp.jdbc.JDBCStoreManager + org.jboss.ejb.plugins.lock.NoLock + + + 100 + + C + + + + Standard CMP EntityBean + false + entity-unified-invoker + false + false + + org.jboss.ejb.plugins.ProxyFactoryFinderInterceptor + org.jboss.ejb.plugins.LogInterceptor + org.jboss.ejb.plugins.SecurityInterceptor + org.jboss.ejb.plugins.TxInterceptorCMT + org.jboss.ejb.plugins.CallValidationInterceptor + org.jboss.ejb.plugins.EntityCreationInterceptor + org.jboss.ejb.plugins.EntityLockInterceptor + org.jboss.ejb.plugins.EntityInstanceInterceptor + org.jboss.ejb.plugins.EntityReentranceInterceptor + org.jboss.resource.connectionmanager.CachedConnectionInterceptor + org.jboss.ejb.plugins.EntitySynchronizationInterceptor + + org.jboss.ejb.plugins.EntityInstancePool + org.jboss.ejb.plugins.EntityInstanceCache + org.jboss.ejb.plugins.cmp.jdbc.JDBCStoreManager + org.jboss.ejb.plugins.lock.QueuedPessimisticEJBLock + + org.jboss.ejb.plugins.LRUEnterpriseContextCachePolicy + + 50 + 1000000 + 300 + 600 + 400 + 60 + 1 + 0.75 + + + + 100 + + A + + + + Clustered CMP EntityBean + false + clustered-entity-unified-invoker + false + false + + org.jboss.ejb.plugins.ProxyFactoryFinderInterceptor + org.jboss.ejb.plugins.CleanShutdownInterceptor + org.jboss.ejb.plugins.LogInterceptor + org.jboss.ejb.plugins.SecurityInterceptor + org.jboss.ejb.plugins.TxInterceptorCMT + org.jboss.ejb.plugins.CallValidationInterceptor + org.jboss.ejb.plugins.EntityCreationInterceptor + org.jboss.ejb.plugins.EntityLockInterceptor + org.jboss.ejb.plugins.EntityInstanceInterceptor + org.jboss.ejb.plugins.EntityReentranceInterceptor + org.jboss.resource.connectionmanager.CachedConnectionInterceptor + org.jboss.ejb.plugins.EntitySynchronizationInterceptor + + org.jboss.ejb.plugins.EntityInstancePool + org.jboss.ejb.plugins.EntityInstanceCache + org.jboss.ejb.plugins.cmp.jdbc.JDBCStoreManager + org.jboss.ejb.plugins.lock.QueuedPessimisticEJBLock + + org.jboss.ejb.plugins.LRUEnterpriseContextCachePolicy + + 50 + 1000000 + 300 + 600 + 400 + 60 + 1 + 0.75 + + + + 100 + + A + + ${jboss.partition.name:DefaultPartition} + + + + + Instance Per Transaction CMP EntityBean + false + entity-unified-invoker + false + false + + org.jboss.ejb.plugins.ProxyFactoryFinderInterceptor + org.jboss.ejb.plugins.LogInterceptor + org.jboss.ejb.plugins.SecurityInterceptor + org.jboss.ejb.plugins.TxInterceptorCMT + org.jboss.ejb.plugins.CallValidationInterceptor + org.jboss.ejb.plugins.EntityCreationInterceptor + org.jboss.ejb.plugins.EntityLockInterceptor + org.jboss.ejb.plugins.EntityInstanceInterceptor + org.jboss.ejb.plugins.EntityReentranceInterceptor + org.jboss.resource.connectionmanager.CachedConnectionInterceptor + org.jboss.ejb.plugins.EntitySynchronizationInterceptor + + org.jboss.ejb.plugins.EntityInstancePool + org.jboss.ejb.plugins.PerTxEntityInstanceCache + org.jboss.ejb.plugins.cmp.jdbc.JDBCStoreManager + org.jboss.ejb.plugins.lock.NoLock + + + 100 + + C + + + + Standard Stateless SessionBean + false + stateless-unified-invoker + + org.jboss.ejb.plugins.ProxyFactoryFinderInterceptor + org.jboss.ejb.plugins.LogInterceptor + org.jboss.ejb.plugins.SecurityInterceptor + + org.jboss.ejb.plugins.TxInterceptorCMT + org.jboss.ejb.plugins.CallValidationInterceptor + org.jboss.ejb.plugins.StatelessSessionInstanceInterceptor + + org.jboss.ejb.plugins.StatelessSessionInstanceInterceptor + org.jboss.ejb.plugins.TxInterceptorBMT + org.jboss.ejb.plugins.CallValidationInterceptor + org.jboss.resource.connectionmanager.CachedConnectionInterceptor + + org.jboss.ejb.plugins.StatelessSessionInstancePool + + + + 100 + + + + + Clustered Stateless SessionBean + false + clustered-stateless-unified-invoker + + org.jboss.ejb.plugins.ProxyFactoryFinderInterceptor + org.jboss.ejb.plugins.CleanShutdownInterceptor + org.jboss.ejb.plugins.LogInterceptor + org.jboss.ejb.plugins.SecurityInterceptor + + org.jboss.ejb.plugins.TxInterceptorCMT + org.jboss.ejb.plugins.CallValidationInterceptor + org.jboss.ejb.plugins.StatelessSessionInstanceInterceptor + + org.jboss.ejb.plugins.StatelessSessionInstanceInterceptor + org.jboss.ejb.plugins.TxInterceptorBMT + org.jboss.ejb.plugins.CallValidationInterceptor + org.jboss.resource.connectionmanager.CachedConnectionInterceptor + + org.jboss.ejb.plugins.StatelessSessionInstancePool + + + + 100 + + + ${jboss.partition.name:DefaultPartition} + + + + + + Standard Stateful SessionBean + false + stateful-unified-invoker + + org.jboss.ejb.plugins.ProxyFactoryFinderInterceptor + org.jboss.ejb.plugins.LogInterceptor + + org.jboss.ejb.plugins.TxInterceptorCMT + org.jboss.ejb.plugins.CallValidationInterceptor + org.jboss.ejb.plugins.StatefulSessionInstanceInterceptor + + org.jboss.ejb.plugins.StatefulSessionInstanceInterceptor + org.jboss.ejb.plugins.TxInterceptorBMT + org.jboss.ejb.plugins.CallValidationInterceptor + org.jboss.resource.connectionmanager.CachedConnectionInterceptor + org.jboss.ejb.plugins.SecurityInterceptor + + org.jboss.ejb.plugins.StatefulSessionInstanceCache + org.jboss.ejb.plugins.StatefulSessionFilePersistenceManager + + org.jboss.ejb.plugins.LRUStatefulContextCachePolicy + + 50 + 1000000 + 1800 + 1800 + 300 + 600 + 400 + 60 + 1 + 0.75 + + + + 100 + + + + + Clustered Stateful SessionBean + false + clustered-stateful-unified-invoker + + org.jboss.ejb.plugins.ProxyFactoryFinderInterceptor + org.jboss.ejb.plugins.CleanShutdownInterceptor + org.jboss.ejb.plugins.LogInterceptor + + org.jboss.ejb.plugins.TxInterceptorCMT + org.jboss.ejb.plugins.CallValidationInterceptor + org.jboss.ejb.plugins.StatefulSessionInstanceInterceptor + + org.jboss.ejb.plugins.StatefulSessionInstanceInterceptor + org.jboss.ejb.plugins.TxInterceptorBMT + org.jboss.ejb.plugins.CallValidationInterceptor + org.jboss.ejb.plugins.SecurityInterceptor + org.jboss.resource.connectionmanager.CachedConnectionInterceptor + org.jboss.ejb.plugins.StatefulHASessionSynchronisationInterceptor + + org.jboss.ejb.plugins.StatefulHASessionInstanceCache + org.jboss.ejb.plugins.StatefulHASessionPersistenceManager + + org.jboss.ejb.plugins.LRUStatefulContextCachePolicy + + 50 + 1000000 + 1800 + 1800 + 300 + 600 + 400 + 60 + 1 + 0.75 + + + + 100 + + + ${jboss.partition.name:DefaultPartition} + + + + + Standard BMP EntityBean + false + entity-unified-invoker + false + false + + org.jboss.ejb.plugins.ProxyFactoryFinderInterceptor + org.jboss.ejb.plugins.LogInterceptor + org.jboss.ejb.plugins.SecurityInterceptor + org.jboss.ejb.plugins.TxInterceptorCMT + org.jboss.ejb.plugins.CallValidationInterceptor + org.jboss.ejb.plugins.EntityCreationInterceptor + org.jboss.ejb.plugins.EntityLockInterceptor + org.jboss.ejb.plugins.EntityInstanceInterceptor + org.jboss.ejb.plugins.EntityReentranceInterceptor + org.jboss.resource.connectionmanager.CachedConnectionInterceptor + org.jboss.ejb.plugins.EntitySynchronizationInterceptor + + org.jboss.ejb.plugins.EntityInstancePool + org.jboss.ejb.plugins.EntityInstanceCache + org.jboss.ejb.plugins.BMPPersistenceManager + org.jboss.ejb.plugins.lock.QueuedPessimisticEJBLock + + org.jboss.ejb.plugins.LRUEnterpriseContextCachePolicy + + 50 + 1000000 + 300 + 600 + 400 + 60 + 1 + 0.75 + + + + 100 + + A + + + + Clustered BMP EntityBean + false + clustered-entity-unified-invoker + false + false + + org.jboss.ejb.plugins.ProxyFactoryFinderInterceptor + org.jboss.ejb.plugins.CleanShutdownInterceptor + org.jboss.ejb.plugins.LogInterceptor + org.jboss.ejb.plugins.SecurityInterceptor + org.jboss.ejb.plugins.TxInterceptorCMT + org.jboss.ejb.plugins.CallValidationInterceptor + org.jboss.ejb.plugins.EntityCreationInterceptor + org.jboss.ejb.plugins.EntityLockInterceptor + org.jboss.ejb.plugins.EntityInstanceInterceptor + org.jboss.ejb.plugins.EntityReentranceInterceptor + org.jboss.resource.connectionmanager.CachedConnectionInterceptor + org.jboss.ejb.plugins.EntitySynchronizationInterceptor + + org.jboss.ejb.plugins.EntityInstancePool + org.jboss.ejb.plugins.EntityInstanceCache + org.jboss.ejb.plugins.BMPPersistenceManager + org.jboss.ejb.plugins.lock.QueuedPessimisticEJBLock + + org.jboss.ejb.plugins.LRUEnterpriseContextCachePolicy + + 50 + 1000000 + 300 + 600 + 400 + 60 + 1 + 0.75 + + + + 100 + + A + + ${jboss.partition.name:DefaultPartition} + + + + + Instance Per Transaction BMP EntityBean + false + entity-unified-invoker + false + false + + org.jboss.ejb.plugins.ProxyFactoryFinderInterceptor + org.jboss.ejb.plugins.LogInterceptor + org.jboss.ejb.plugins.SecurityInterceptor + org.jboss.ejb.plugins.TxInterceptorCMT + org.jboss.ejb.plugins.CallValidationInterceptor + org.jboss.ejb.plugins.EntityCreationInterceptor + org.jboss.ejb.plugins.EntityLockInterceptor + org.jboss.ejb.plugins.EntityInstanceInterceptor + org.jboss.ejb.plugins.EntityReentranceInterceptor + org.jboss.resource.connectionmanager.CachedConnectionInterceptor + org.jboss.ejb.plugins.EntitySynchronizationInterceptor + + org.jboss.ejb.plugins.EntityInstancePool + org.jboss.ejb.plugins.PerTxEntityInstanceCache + org.jboss.ejb.plugins.BMPPersistenceManager + org.jboss.ejb.plugins.lock.NoLock + + + 100 + + C + + + + Standard Message Driven Bean + false + message-driven-bean + + org.jboss.ejb.plugins.ProxyFactoryFinderInterceptor + org.jboss.ejb.plugins.LogInterceptor + org.jboss.ejb.plugins.RunAsSecurityInterceptor + + org.jboss.ejb.plugins.TxInterceptorCMT + org.jboss.ejb.plugins.CallValidationInterceptor + org.jboss.ejb.plugins.MessageDrivenInstanceInterceptor + + org.jboss.ejb.plugins.MessageDrivenInstanceInterceptor + org.jboss.ejb.plugins.MessageDrivenTxInterceptorBMT + org.jboss.ejb.plugins.CallValidationInterceptor + org.jboss.resource.connectionmanager.CachedConnectionInterceptor + + org.jboss.ejb.plugins.MessageDrivenInstancePool + + + + 100 + + + + + Singleton Message Driven Bean + false + singleton-message-driven-bean + + org.jboss.ejb.plugins.ProxyFactoryFinderInterceptor + org.jboss.ejb.plugins.LogInterceptor + org.jboss.ejb.plugins.RunAsSecurityInterceptor + + org.jboss.ejb.plugins.TxInterceptorCMT + org.jboss.ejb.plugins.CallValidationInterceptor + org.jboss.ejb.plugins.MessageDrivenInstanceInterceptor + + org.jboss.ejb.plugins.MessageDrivenInstanceInterceptor + org.jboss.ejb.plugins.MessageDrivenTxInterceptorBMT + org.jboss.ejb.plugins.CallValidationInterceptor + org.jboss.resource.connectionmanager.CachedConnectionInterceptor + + org.jboss.ejb.plugins.MessageDrivenInstancePool + + + + 100 + + + + + Standard Message Inflow Driven Bean + false + message-inflow-driven-bean + + org.jboss.ejb.plugins.ProxyFactoryFinderInterceptor + org.jboss.ejb.plugins.LogInterceptor + org.jboss.ejb.plugins.RunAsSecurityInterceptor + + org.jboss.ejb.plugins.TxInterceptorCMT + org.jboss.ejb.plugins.CallValidationInterceptor + org.jboss.ejb.plugins.MessageDrivenInstanceInterceptor + + org.jboss.ejb.plugins.MessageDrivenInstanceInterceptor + org.jboss.ejb.plugins.MessageDrivenTxInterceptorBMT + org.jboss.ejb.plugins.CallValidationInterceptor + org.jboss.resource.connectionmanager.CachedConnectionInterceptor + + org.jboss.ejb.plugins.MessageDrivenInstancePool + + + + 100 + + + + + + diff --git a/docker/tc-cache/cache/conf/standardjbosscmp-jdbc.xml b/docker/tc-cache/cache/conf/standardjbosscmp-jdbc.xml new file mode 100644 index 000000000..ad56169af --- /dev/null +++ b/docker/tc-cache/cache/conf/standardjbosscmp-jdbc.xml @@ -0,0 +1,3103 @@ + + + + + + + + + + + + + + + java:/DefaultDS + + + true + false + false + 300000 + false + true + false + foreign-key + + on-load + 1000 + * + + 1000 + false + + + UUIDKeyGeneratorFactory + java.lang.String + VARCHAR + VARCHAR(32) + + + + org.jboss.ejb.plugins.cmp.jdbc.JDBCEJBQLCompiler + false + + + + + FirstSQL/J + + PRIMARY KEY (?2) + FOREIGN KEY (?3) REFERENCES ?4 (?5) + t + _ + 32 + true + 1 + 0 + + + concat + (?1 || ?2) + + + substring + substring(?1 FROM ?2 FOR ?3) + + + lcase + lower(?1) + + + length + char_length(?1) + + + locate + position(?1 IN ?2) + + + abs + math.abs(?1) + + + sqrt + math.sqrt(CAST(?1 AS DOUBLE)) + + + ucase + upper(?1) + + + count + count(?1) + + + + java.lang.Boolean + TINYINT + TINYINT + + + java.lang.Byte + TINYINT + TINYINT + + + java.lang.Short + SMALLINT + SMALLINT + + + java.lang.Integer + INTEGER + INTEGER + + + java.lang.Long + BIGINT + BIGINT + + + java.lang.Float + REAL + REAL + + + java.lang.Double + DOUBLE + DOUBLE + + + java.lang.Character + CHAR + CHAR + + + java.lang.String + VARCHAR + + VARCHAR(256) + + + java.sql.Date + DATE + DATE + + + java.sql.Time + TIME + TIME + + + java.sql.Timestamp + TIMESTAMP + TIMESTAMP + + + java.util.Date + TIMESTAMP + TIMESTAMP + + + java.math.BigDecimal + DECIMAL + DECIMAL + + + java.lang.Object + + LONGVARBINARY + VARCHAR(2147483500) + + + + + Ingres + SELECT ?1 FROM ?2 WHERE ?3 ORDER BY ?4 FOR UPDATE + ALTER TABLE ?1 ADD CONSTRAINT ?2 PRIMARY KEY (?3) + ALTER TABLE ?1 ADD CONSTRAINT ?2 FOREIGN KEY (?3) REFERENCES ?4 (?5) + t + _ + 32 + true + TRUE + FALSE + + + concat + concat(?1,?2) + + + substring + left(?1,?2) + + + lcase + lower(?1) + + + length + length(?1) + + + locate + locate(?1,?2) + + + abs + abs(?1) + + + sqrt + sqrt(?1) + + + ucase + upper(?1) + + + count + count(?1) + + + + + java.lang.Boolean + INTEGER + INTEGER + + + java.lang.Byte + TINYINT + INT1 + + + java.lang.Short + SMALLINT + SMALLINT + + + java.lang.Integer + INTEGER + INTEGER + + + java.lang.Long + BIGINT + INTEGER4 + + + java.lang.Float + FLOAT + FLOAT4 + + + java.lang.Double + DOUBLE + FLOAT8 + + + java.lang.Character + CHAR + CHAR + + + java.lang.String + VARCHAR + VARCHAR(256) + + + java.util.Date + TIMESTAMP + DATE + + + java.sql.Date + DATE + DATE + + + java.sql.Time + TIME + DATE + + + java.sql.Timestamp + TIMESTAMP + DATE + + + java.math.BigDecimal + DOUBLE + FLOAT8 + + + + java.lang.Object + JAVA_OBJECT + LONG VARCHAR + + + + McKoi + SELECT ?1 FROM ?2 WHERE ?3 ORDER BY ?4 FOR UPDATE + CONSTRAINT ?1 PRIMARY KEY (?2) + ALTER TABLE ?1 ADD CONSTRAINT ?2 FOREIGN KEY (?3) REFERENCES ?4 (?5) + t + _ + 32 + true + TRUE + FALSE + + + count + count(?1) + + + + java.lang.Boolean + BIT + BOOLEAN + + + java.lang.Byte + TINYINT + SMALLINT + + + java.lang.Short + SMALLINT + SMALLINT + + + java.lang.Integer + INTEGER + INTEGER + + + java.lang.Long + BIGINT + BIGINT + + + java.lang.Float + REAL + FLOAT + + + java.lang.Double + DOUBLE + DOUBLE + + + java.lang.Character + CHAR + CHAR + + + java.lang.String + VARCHAR + VARCHAR(64) + + + java.sql.Date + DATE + DATE + + + java.sql.Time + TIME + TIME + + + java.sql.Timestamp + TIMESTAMP + TIMESTAMP + + + java.lang.Object + JAVA_OBJECT + JAVA_OBJECT + + + + + Firebird + SELECT ?1 FROM ?2 WHERE ?3 ORDER BY ?4 FOR UPDATE + CONSTRAINT ?1 PRIMARY KEY (?2) + ALTER TABLE ?1 ADD CONSTRAINT ?2 FOREIGN KEY (?3) REFERENCES ?4 (?5) + t + _ + 31 + true + 1 + 0 + + + count + count(?1) + + + + java.lang.Boolean + BIT + SMALLINT default 0 + + + java.lang.Byte + TINYINT + SMALLINT default 0 + + + java.lang.Short + SMALLINT + SMALLINT default 0 + + + java.lang.Integer + INTEGER + INTEGER default 0 + + + java.lang.Long + BIGINT + NUMERIC(18,0) default 0 + + + java.lang.Float + REAL + FLOAT default 0 + + + java.lang.Double + DOUBLE + DOUBLE PRECISION default 0 + + + java.lang.Character + VARCHAR + CHAR + + + + java.lang.String + VARCHAR + VARCHAR(64) + + + java.sql.Date + DATE + DATE + + + java.sql.Time + TIME + TIME + + + java.sql.Timestamp + TIMESTAMP + TIMESTAMP + + + java.lang.Object + JAVA_OBJECT + BLOB + + + + + InterBase + SELECT ?1 FROM ?2 WHERE ?3 ORDER BY ?4 FOR UPDATE + CONSTRAINT ?1 PRIMARY KEY (?2) + ALTER TABLE ?1 ADD CONSTRAINT ?2 FOREIGN KEY (?3) REFERENCES ?4 (?5) + t + _ + 31 + true + 1 + 0 + + + count + count(?1) + + + + java.lang.Boolean + BIT + SMALLINT default 0 + + + java.lang.Byte + TINYINT + SMALLINT default 0 + + + java.lang.Short + SMALLINT + SMALLINT default 0 + + + java.lang.Integer + INTEGER + INTEGER default 0 + + + java.lang.Long + BIGINT + NUMERIC(18,0) default 0 + + + java.lang.Float + REAL + FLOAT default 0 + + + java.lang.Double + DOUBLE + DOUBLE PRECISION default 0 + + + java.lang.Character + VARCHAR + CHAR + + + java.lang.String + VARCHAR + VARCHAR(64) + + + java.sql.Date + DATE + DATE + + + java.sql.Time + TIME + TIME + + + java.sql.Timestamp + TIMESTAMP + TIMESTAMP + + + java.lang.Object + JAVA_OBJECT + VARCHAR(2000) + + + + + DB2 + + + CONSTRAINT ?1 PRIMARY KEY (?2) + ALTER TABLE ?1 ADD CONSTRAINT ?2 FOREIGN KEY (?3) REFERENCES ?4 (?5) + t + _ + 18 + true + 1 + 0 + + + count + count(?1) + + + locate + locate(CAST(?1 as VARCHAR(254)), + CAST(?2 as VaRCHAR(254)),?3) + + + + java.lang.Boolean + BIT + SMALLINT + + + + java.lang.Short + SMALLINT + SMALLINT + + + java.lang.Integer + INTEGER + INTEGER + + + java.lang.Long + BIGINT + BIGINT + + + java.lang.Float + REAL + REAL + + + java.lang.Double + DOUBLE + DOUBLE + + + java.lang.Character + CHAR + CHAR + + + java.lang.String + VARCHAR + VARCHAR(254) + + + java.sql.Date + DATE + DATE + + + java.sql.Time + TIME + TIME + + + java.sql.Timestamp + TIMESTAMP + TIMESTAMP + + + + java.lang.Object + VARBINARY + BLOB(2000) + + + + + Derby + + CONSTRAINT ?1 PRIMARY KEY (?2) + ALTER TABLE ?1 ADD CONSTRAINT ?2 FOREIGN KEY (?3) REFERENCES ?4 (?5) + t + _ + 18 + true + 1 + 0 + + + concat + (?1 || ?2) + + + substr + substr(?1, ?2, ?3) + + + lcase + lower(?1) + + + length + length(?1) + + + locate + locate(?2, ?1, ?3) + + + abs + abs(?1) + + + sqrt + sqrt(?1) + + + ucase + upper(?1) + + + count + count(?1) + + + + java.math.BigDecimal + NUMERIC + DECIMAL + + + java.lang.Boolean + BIT + BOOLEAN + + + + java.lang.Short + SMALLINT + SMALLINT + + + java.lang.Integer + INTEGER + INTEGER + + + java.lang.Long + BIGINT + BIGINT + + + java.lang.Float + REAL + REAL + + + java.lang.Double + DOUBLE + DOUBLE PRECISION + + + java.lang.Character + CHAR + CHAR + + + java.lang.String + VARCHAR + VARCHAR(256) + + + java.sql.Date + DATE + DATE + + + java.sql.Time + TIME + TIME + + + java.sql.Timestamp + TIMESTAMP + TIMESTAMP + + + java.lang.Object + BLOB + BLOB + + + + + Oracle9i + + SELECT ?1 FROM ?2 WHERE ?3 ORDER BY ?4 FOR UPDATE + CONSTRAINT ?1 PRIMARY KEY (?2) + ALTER TABLE ?1 ADD CONSTRAINT ?2 FOREIGN KEY (?3) REFERENCES ?4 (?5) + t + _ + 30 + true + 1 + 0 + + + concat + (?1 || ?2) + + + substring + substr(?1, ?2, ?3) + + + lcase + lower(?1) + + + length + length(?1) + + + locate + instr(?2, ?1, ?3) + + + abs + abs(?1) + + + sqrt + sqrt(?1) + + + ucase + upper(?1) + + + count + count(?1) + + + + java.lang.Boolean + BIT + NUMBER(1) + + + java.lang.Byte + SMALLINT + NUMBER(3) + + + java.lang.Short + NUMERIC + + NUMBER(5) + + + java.lang.Integer + INTEGER + NUMBER(10) + + + java.lang.Long + BIGINT + NUMBER(19) + + + java.lang.Float + REAL + NUMBER(38,7) + + + java.math.BigDecimal + DECIMAL + NUMBER(38,15) + + + java.lang.Double + DOUBLE + NUMBER(38,15) + + + java.lang.Character + VARCHAR + CHAR + + + java.lang.String + VARCHAR + VARCHAR2(255) + + + java.util.Date + TIMESTAMP + TIMESTAMP(3) + + + java.sql.Date + DATE + DATE + + + java.sql.Time + TIME + DATE + + + java.sql.Timestamp + TIMESTAMP + TIMESTAMP(9) + + + java.lang.Object + BLOB + BLOB + + + + + + Oracle8 + SELECT ?1 FROM ?2 WHERE ?3 ORDER BY ?4 FOR UPDATE + CONSTRAINT ?1 PRIMARY KEY (?2) + ALTER TABLE ?1 ADD CONSTRAINT ?2 FOREIGN KEY (?3) REFERENCES ?4 (?5) + t + _ + 30 + true + 1 + 0 + + + concat + (?1 || ?2) + + + substring + substr(?1, ?2, ?3) + + + lcase + lower(?1) + + + length + length(?1) + + + locate + instr(?2, ?1, ?3) + + + abs + abs(?1) + + + sqrt + sqrt(?1) + + + ucase + upper(?1) + + + count + count(?1) + + + + java.lang.Boolean + BIT + NUMBER(1) + + + java.lang.Byte + NUMERIC + NUMBER(3) + + + java.lang.Short + NUMERIC + NUMBER(5) + + + java.lang.Integer + INTEGER + NUMBER(10) + + + java.lang.Long + BIGINT + NUMBER(19) + + + java.lang.Float + REAL + NUMBER(38,7) + + + java.math.BigDecimal + DECIMAL + NUMBER(38,15) + + + java.lang.Double + DOUBLE + NUMBER(38,15) + + + java.lang.Character + VARCHAR + CHAR + + + java.lang.String + VARCHAR + VARCHAR2(255) + + + + java.util.Date + TIMESTAMP + DATE + + + java.sql.Date + DATE + DATE + + + java.sql.Time + TIME + DATE + + + + java.sql.Timestamp + TIMESTAMP + DATE + + + java.lang.Object + BLOB + BLOB + + + + + + Oracle7 + SELECT ?1 FROM ?2 WHERE ?3 ORDER BY ?4 FOR UPDATE + CONSTRAINT ?1 PRIMARY KEY (?2) + ALTER TABLE ?1 ADD CONSTRAINT ?2 FOREIGN KEY (?3) REFERENCES ?4 (?5) + t + _ + 30 + true + 1 + 0 + + + concat + (?1 || ?2) + + + substring + substr(?1, ?2, ?3) + + + lcase + lower(?1) + + + length + length(?1) + + + locate + instr(?2, ?1, ?3) + + + abs + abs(?1) + + + sqrt + sqrt(?1) + + + ucase + upper(?1) + + + count + count(?1) + + + + java.lang.Boolean + BIT + NUMBER(1) + + + java.lang.Byte + NUMERIC + NUMBER(3) + + + java.lang.Short + NUMERIC + NUMBER(5) + + + java.lang.Integer + INTEGER + NUMBER(10) + + + java.lang.Long + BIGINT + NUMBER(19) + + + java.lang.Float + REAL + NUMBER(38,7) + + + java.lang.Double + DOUBLE + NUMBER(38,15) + + + java.lang.Character + VARCHAR + CHAR + + + java.lang.String + VARCHAR + VARCHAR2(255) + + + + java.util.Date + TIMESTAMP + DATE + + + java.sql.Date + DATE + DATE + + + java.sql.Time + TIME + DATE + + + + java.sql.Timestamp + TIMESTAMP + DATE + + + java.lang.Object + LONGVARBINARY + LONG RAW + + + + + + Sybase + + CONSTRAINT ?1 PRIMARY KEY (?2) + ALTER TABLE ?1 ADD CONSTRAINT ?2 FOREIGN KEY (?3) REFERENCES ?4 (?5) + t + _ + 30 + true + 1 + 0 + + + count + count(?1) + + + length + char_length(?1) + + + + java.lang.Boolean + BIT + BIT + + + + java.lang.Integer + INTEGER + INTEGER + + + java.lang.Long + NUMERIC + NUMERIC(38,0) + + + java.lang.Float + REAL + REAL + + + java.lang.Double + DOUBLE + DOUBLE PRECISION + + + java.lang.Character + CHAR + CHAR + + + java.lang.String + VARCHAR + VARCHAR(255) + + + java.util.Date + TIMESTAMP + DATETIME + + + java.sql.Date + DATE + DATETIME + + + java.sql.Time + TIME + SMALLDATETIME + + + java.sql.Timestamp + TIMESTAMP + DATETIME + + + java.lang.Object + JAVA_OBJECT + IMAGE + + + + + PostgreSQL + SELECT ?1 FROM ?2 WHERE ?3 ORDER BY ?4 FOR UPDATE + CONSTRAINT ?1 PRIMARY KEY (?2) + ALTER TABLE ?1 ADD CONSTRAINT ?2 FOREIGN KEY (?3) REFERENCES ?4 (?5) + ?1 + t + _ + 32 + true + TRUE + FALSE + + + concat + (?1 || ?2) + + + substring + substring(?1 FROM ?2 FOR ?3) + + + lcase + lower(?1) + + + length + length(?1) + + + locate + (CASE position(?1 in substring(?2 from ?3)) WHEN 0 THEN 0 ELSE position(?1 in substring(?2 from ?3)) + ?3 - 1 END) + + + abs + abs(?1) + + + sqrt + sqrt(CAST(?1 AS double precision)) + + + ucase + upper(?1) + + + count + count(?1) + + + + java.lang.Boolean + CHAR + BOOLEAN + + + java.lang.Byte + TINYINT + INT2 + + + java.lang.Short + SMALLINT + INT2 + + + java.lang.Integer + INTEGER + INT4 + + + java.lang.Long + BIGINT + INT8 + + + java.lang.Float + FLOAT + FLOAT(7) + + + java.lang.Double + DOUBLE + FLOAT8 + + + java.lang.Character + CHAR + CHAR(1) + + + java.lang.String + VARCHAR + TEXT + + + java.util.Date + TIMESTAMP + TIMESTAMP with time zone + + + java.sql.Date + DATE + DATE + + + java.sql.Time + TIME + TIME + + + java.sql.Timestamp + TIMESTAMP + TIMESTAMP with time zone + + + java.math.BigDecimal + NUMERIC + NUMERIC + + + java.lang.Object + VARBINARY + BYTEA + + + + + PostgreSQL 8.0 + + SELECT ?1 FROM ?2 WHERE ?3 ORDER BY ?4 FOR UPDATE + CONSTRAINT ?1 PRIMARY KEY (?2) + ALTER TABLE ?1 ADD CONSTRAINT ?2 FOREIGN KEY (?3) REFERENCES ?4 (?5) + ?1 + t + _ + 32 + true + TRUE + FALSE + + + concat + (?1 || ?2) + + + substring + substring(?1 FROM ?2 FOR ?3) + + + lcase + lower(?1) + + + length + length(?1) + + + locate + (CASE position(?1 in substring(?2 from ?3)) WHEN 0 THEN 0 ELSE position(?1 in substring(?2 from ?3)) + ?3 - 1 END) + + + abs + abs(?1) + + + sqrt + sqrt(CAST(?1 AS double precision)) + + + ucase + upper(?1) + + + count + count(?1) + + + + java.lang.Boolean + BOOLEAN + BOOLEAN + + + java.lang.Byte + TINYINT + INT2 + + + java.lang.Short + SMALLINT + INT2 + + + java.lang.Integer + INTEGER + INT4 + + + java.lang.Long + BIGINT + INT8 + + + java.lang.Float + FLOAT + FLOAT(7) + + + java.lang.Double + DOUBLE + FLOAT8 + + + java.lang.Character + CHAR + CHAR(1) + + + java.lang.String + VARCHAR + TEXT + + + java.util.Date + TIMESTAMP + TIMESTAMP + + + java.sql.Date + DATE + DATE + + + java.sql.Time + TIME + TIME + + + java.sql.Timestamp + TIMESTAMP + TIMESTAMP + + + java.math.BigDecimal + NUMERIC + NUMERIC + + + java.lang.Object + VARBINARY + BYTEA + + + + + PostgreSQL 7.2 + SELECT ?1 FROM ?2 WHERE ?3 ORDER BY ?4 FOR UPDATE + CONSTRAINT ?1 PRIMARY KEY (?2) + ALTER TABLE ?1 ADD CONSTRAINT ?2 FOREIGN KEY (?3) REFERENCES ?4 (?5) + ?1 + t + _ + 32 + true + TRUE + FALSE + + + concat + (?1 || ?2) + + + substring + substring(?1 FROM ?2 FOR ?3) + + + lcase + lower(?1) + + + length + length(?1) + + + locate + (CASE position(?1 in substring(?2 from ?3)) WHEN 0 THEN 0 ELSE position(?1 in substring(?2 from ?3)) + ?3 - 1 END) + + + abs + abs(?1) + + + sqrt + sqrt(CAST(?1 AS double precision)) + + + ucase + upper(?1) + + + count + count(?1) + + + + java.lang.Boolean + CHAR + BOOLEAN + + + java.lang.Byte + TINYINT + INT2 + + + java.lang.Short + SMALLINT + INT2 + + + java.lang.Integer + INTEGER + INT4 + + + java.lang.Long + BIGINT + INT8 + + + java.lang.Float + FLOAT + FLOAT(7) + + + java.lang.Double + DOUBLE + FLOAT8 + + + java.lang.Character + CHAR + CHAR(1) + + + java.lang.String + VARCHAR + TEXT + + + java.util.Date + TIMESTAMP + TIMESTAMP + + + java.sql.Date + DATE + DATE + + + java.sql.Time + TIME + TIME + + + java.sql.Timestamp + TIMESTAMP + TIMESTAMP + + + java.math.BigDecimal + NUMERIC + NUMERIC + + + java.lang.Object + VARBINARY + BYTEA + + + + + Hypersonic SQL + + CONSTRAINT ?1 PRIMARY KEY (?2) + ALTER TABLE ?1 ADD CONSTRAINT ?2 FOREIGN KEY (?3) REFERENCES ?4 (?5) + ?1 IDENTITY + ALTER TABLE ?1 ADD COLUMN ?2 ?3 + ALTER TABLE ?1 DROP COLUMN ?2 + t + _ + 32 + true + (1=1) + (1=0) + + + concat + (?1 || ?2) + + + substring + SUBSTRING(?1, ?2, ?3) + + + lcase + lcase(?1) + + + length + LENGTH(?1) + + + locate + LOCATE(?1, ?2, ?3) + + + abs + ABS(?1) + + + sqrt + SQRT(?1) + + + ucase + ucase(?1) + + + count + count(?1) + + + + java.lang.Byte + SMALLINT + SMALLINT + + + java.util.Date + TIMESTAMP + TIMESTAMP + + + java.lang.Boolean + BIT + BIT + + + java.lang.Integer + INTEGER + INTEGER + + + java.lang.Object + + VARBINARY + VARBINARY + + + java.lang.Short + SMALLINT + SMALLINT + + + java.lang.Character + CHAR + CHAR + + + java.lang.String + VARCHAR + VARCHAR(256) + + + java.sql.Date + DATE + DATE + + + java.sql.Time + TIME + TIME + + + java.sql.Timestamp + TIMESTAMP + TIMESTAMP + + + java.lang.Float + REAL + REAL + + + java.lang.Long + BIGINT + BIGINT + + + java.lang.Double + DOUBLE + DOUBLE + + + java.math.BigDecimal + DECIMAL + DECIMAL + + + + + PointBase + SELECT ?1 FROM ?2 WHERE ?3 ORDER BY ?4 FOR UPDATE + CONSTRAINT ?1 PRIMARY KEY (?2) + ALTER TABLE ?1 ADD CONSTRAINT ?2 FOREIGN KEY (?3) REFERENCES ?4 (?5) + t + _ + 32 + true + TRUE + FALSE + + + lcase + lower(?1) + + + ucase + upper(?1) + + + count + count(?1) + + + locate + position(?1 IN ?2) + + + + java.lang.Character + CHAR + CHAR + + + java.lang.Short + SMALLINT + SMALLINT + + + java.lang.Long + BIGINT + INTEGER + + + java.lang.Double + DOUBLE + FLOAT + + + java.lang.Float + FLOAT + FLOAT + + + java.lang.Boolean + BIT + BOOLEAN + + + java.lang.String + VARCHAR + VARCHAR(256) + + + java.lang.Byte + SMALLINT + SMALLINT + + + java.lang.Object + BLOB + BLOB + + + java.lang.Integer + INTEGER + INTEGER + + + java.util.Date + DATE + DATE + + + java.sql.Timestamp + TIMESTAMP + TIMESTAMP + + + + + SOLID + + PRIMARY KEY (?2) + ALTER TABLE ?1 ADD CONSTRAINT ?2 FOREIGN KEY (?3) REFERENCES ?4 (?5) + t + _ + 32 + true + 1 + 0 + + + count + count(?1) + + + + java.lang.Character + CHAR + CHAR + + + java.lang.Byte + TINYINT + TINYINT + + + java.lang.Short + INTEGER + INTEGER + + + java.lang.Double + DOUBLE + DOUBLE + + + java.lang.Object + BLOB + BLOB + + + java.lang.String + VARCHAR + VARCHAR(256) + + + java.lang.Integer + INTEGER + INTEGER + + + java.sql.Timestamp + TIMESTAMP + TIMESTAMP + + + java.lang.Boolean + BIT + BIT + + + java.lang.Float + FLOAT + FLOAT + + + java.lang.Long + BIGINT + BIGINT + + + java.util.Date + TIMESTAMP + TIMESTAMP + + + + + mySQL + SELECT ?1 FROM ?2 WHERE ?3 ORDER BY ?4 FOR UPDATE + CONSTRAINT ?1 PRIMARY KEY (?2) + + ALTER TABLE ?1 ADD INDEX (?3), ADD CONSTRAINT ?2 FOREIGN KEY (?3) REFERENCES ?4 (?5) + ?1 auto_increment + ALTER TABLE ?1 MODIFY ?2 ?3 + t + _ + 32 + false + 1 + 0 + + + concat + concat(?1, ?2) + + + substring + substring(?1 FROM ?2 FOR ?3) + + + lcase + lower(?1) + + + length + length(?1) + + + locate + locate(?1, ?2, ?3) + + + abs + abs(?1) + + + sqrt + sqrt(?1) + + + ucase + upper(?1) + + + count + count(?1) + + + + java.lang.Float + FLOAT + FLOAT + + + java.lang.Double + DOUBLE + DOUBLE + + + java.lang.Boolean + TINYINT + TINYINT + + + java.math.BigDecimal + DOUBLE + DOUBLE + + + java.lang.Object + BLOB + LONGBLOB + + + + java.lang.Integer + INTEGER + INTEGER + + + java.lang.Short + SMALLINT + SMALLINT + + + java.sql.Timestamp + TIMESTAMP + TIMESTAMP + + + + java.lang.Byte + TINYINT + TINYINT + + + java.lang.Character + CHAR + CHAR + + + java.lang.Long + BIGINT + BIGINT + + + java.lang.String + VARCHAR + VARCHAR(250) BINARY + + + java.util.Date + TIMESTAMP + DATETIME + + + + java.sql.Date + DATE + DATETIME + + + java.sql.Time + TIME + TIME + + + + + MS SQLSERVER + SELECT ?1 FROM ?2 with (updlock) WHERE ?3 ORDER BY ?4 + CONSTRAINT ?1 PRIMARY KEY (?2) + ALTER TABLE ?1 ADD CONSTRAINT ?2 FOREIGN KEY (?3) REFERENCES ?4 (?5) + ?1 IDENTITY + ALTER TABLE ?1 ALTER COLUMN ?2 ?3 + t + _ + 32 + true + 1 + 0 + + + concat + (?1 + ?2) + + + substring + substring(?1, ?2, ?3) + + + lcase + lower(?1) + + + length + len(?1) + + + locate + charindex(?1, ?2, ?3) + + + abs + abs(?1) + + + sqrt + sqrt(?1) + + + ucase + upper(?1) + + + count + count(?1) + + + + java.lang.Integer + INTEGER + INTEGER + + + java.lang.Character + CHAR + CHAR + + + java.lang.Short + SMALLINT + SMALLINT + + + java.lang.Double + DOUBLE + DOUBLE + + + java.lang.Long + DECIMAL + DECIMAL(20) + + + java.math.BigDecimal + VARCHAR + VARCHAR(256) + + + java.lang.String + VARCHAR + VARCHAR(256) + + + java.lang.Object + JAVA_OBJECT + IMAGE + + + java.lang.Byte + TINYINT + TINYINT + + + + java.sql.Timestamp + TIMESTAMP + DATETIME + + + java.sql.Date + DATE + DATETIME + + + java.sql.Time + TIME + DATETIME + + + java.util.Date + TIMESTAMP + DATETIME + + + java.lang.Boolean + BIT + BIT + + + java.lang.Float + FLOAT + FLOAT + + + + + MS SQLSERVER2000 + + SELECT ?1 FROM ?2 with (xlock) WHERE ?3 ORDER BY ?4 + CONSTRAINT ?1 PRIMARY KEY (?2) + ALTER TABLE ?1 ADD CONSTRAINT ?2 FOREIGN KEY (?3) REFERENCES ?4 (?5) + ?1 IDENTITY + t + _ + 32 + true + 1 + 0 + + + concat + (?1 + ?2) + + + substring + substring(?1, ?2, ?3) + + + lcase + lower(?1) + + + length + len(?1) + + + locate + charindex(?1, ?2, ?3) + + + abs + abs(?1) + + + sqrt + sqrt(?1) + + + ucase + upper(?1) + + + count + count(?1) + + + mod + (?1 % ?2) + + + + java.lang.Integer + INTEGER + INTEGER + + + + java.lang.Character + CHAR + CHAR + + + + java.lang.Short + SMALLINT + SMALLINT + + + + java.lang.Long + BIGINT + BIGINT + + + + java.math.BigDecimal + VARCHAR + VARCHAR(256) + + + + java.lang.String + VARCHAR + VARCHAR(256) + + + + java.lang.Object + LONGVARBINARY + IMAGE + + + + java.lang.Byte + TINYINT + TINYINT + + + + + java.sql.Timestamp + TIMESTAMP + DATETIME + + + + java.sql.Date + DATE + DATETIME + + + + java.sql.Time + TIME + DATETIME + + + + java.util.Date + TIMESTAMP + DATETIME + + + + java.lang.Boolean + BIT + BIT + + + + java.lang.Float + REAL + REAL + + + + java.lang.Double + DOUBLE + FLOAT + + + + + DB2/400 + + CONSTRAINT ?1 PRIMARY KEY (?2) + ALTER TABLE ?1 ADD CONSTRAINT ?2 FOREIGN KEY (?3) REFERENCES ?4 (?5) + t + _ + 18 + true + 1 + 0 + + + count + count(?1) + + + + java.lang.Character + CHAR + CHAR(1) + + + java.lang.String + VARCHAR + VARCHAR(256) + + + + java.util.Date + TIMESTAMP + TIMESTAMP + + + java.sql.Time + TIME + TIME + + + java.lang.Float + FLOAT + FLOAT + + + java.lang.Integer + INTEGER + INTEGER + + + java.lang.Double + DOUBLE + DOUBLE + + + java.lang.Long + BIGINT + INTEGER + + + java.lang.Boolean + CHAR + CHAR(5) + + + java.lang.Short + SMALLINT + SMALLINT + + + java.lang.Object + JAVA_OBJECT + VARCHAR(4096) FOR BIT DATA + + + java.sql.Timestamp + TIMESTAMP + TIMESTAMP + + + + + SapDB + + + SELECT ?1 FROM ?2 WHERE ?3 ORDER BY ?4 FOR UPDATE + CONSTRAINT ?1 PRIMARY KEY (?2) + ALTER TABLE ?1 ADD FOREIGN KEY ?2 (?3) REFERENCES ?4 (?5) + t + _ + 32 + true + 1 + 0 + + + count + count(?1) + + + + java.lang.Integer + INTEGER + INTEGER + + + java.lang.Character + CHAR + CHAR + + + java.lang.String + VARCHAR + VARCHAR(256) + + + java.lang.Object + JAVA_OBJECT + LONG BYTE + + + java.lang.Byte + TINYINT + CHAR BYTE + + + java.sql.Timestamp + TIMESTAMP + TIMESTAMP + + + java.util.Date + TIMESTAMP + TIMESTAMP + + + java.sql.Time + TIME + TIME + + + java.lang.Boolean + BIT + BOOLEAN + + + java.lang.Float + FLOAT + FLOAT + + + java.lang.Short + SMALLINT + SMALLINT + + + java.lang.Double + DOUBLE + DOUBLE PRECISION + + + java.lang.Long + DECIMAL + DECIMAL(20) + + + + + MaxDB + SELECT ?1 FROM ?2 WHERE ?3 ORDER BY ?4 FOR UPDATE + CONSTRAINT ?1 PRIMARY KEY (?2) + ALTER TABLE ?1 ADD FOREIGN KEY ?2 (?3) REFERENCES ?4 (?5) + ?1 + t + _ + 32 + true + true + false + + + count + count(?1) + + + + java.lang.Integer + INTEGER + INTEGER + + + java.lang.Character + CHAR + CHAR + + + java.lang.String + VARCHAR + VARCHAR(256) + + + java.lang.Object + JAVA_OBJECT + LONG BYTE + + + java.lang.Byte + TINYINT + CHAR BYTE + + + java.sql.Timestamp + TIMESTAMP + TIMESTAMP + + + java.util.Date + TIMESTAMP + TIMESTAMP + + + java.sql.Time + TIME + TIME + + + java.lang.Boolean + BOOLEAN + BOOLEAN + + + java.lang.Float + FLOAT + FLOAT + + + java.lang.Short + SMALLINT + SMALLINT + + + java.lang.Double + DOUBLE + DOUBLE PRECISION + + + java.lang.Long + DECIMAL + DECIMAL(20) + + + + + Cloudscape + + CONSTRAINT ?1 PRIMARY KEY (?2) + ALTER TABLE ?1 ADD CONSTRAINT ?2 FOREIGN KEY (?3) REFERENCES ?4 (?5) + t + _ + 32 + true + 1 + 0 + + + count + count(?1) + + + + java.math.BigDecimal + LONGVARCHAR + LONG VARCHAR + + + java.lang.Boolean + BIT + BOOLEAN + + + java.lang.Byte + TINYINT + TINYINT + + + java.lang.Short + SMALLINT + SMALLINT + + + java.lang.Integer + INTEGER + INTEGER + + + java.lang.Long + BIGINT + LONGINT + + + java.lang.Float + REAL + REAL + + + java.lang.Double + DOUBLE + DOUBLE PRECISION + + + java.lang.Character + CHAR + CHAR + + + java.lang.String + LONGVARCHAR + LONG VARCHAR + + + + java.sql.Date + DATE + DATE + + + java.sql.Time + TIME + TIME + + + java.sql.Timestamp + TIMESTAMP + TIMESTAMP + + + java.lang.Object + JAVA_OBJECT + LONG VARBINARY + + + + + + InformixDB + select ?1 from ?2 where ?3 order by ?4 for update + PRIMARY KEY (?2) CONSTRAINT ?1 + ALTER TABLE ?1 ADD CONSTRAINT FOREIGN KEY (?3) REFERENCES ?4 (?5) CONSTRAINT ?2 + t + _ + 32 + true + 1 + 0 + + + count + count(?1) + + + + java.lang.Character + CHAR + CHAR(1) + + + + java.lang.String + VARCHAR + VARCHAR(255,0) + + + + java.math.BigDecimal + NUMERIC + DECIMAL + + + + java.lang.Boolean + BIT + SMALLINT + + + + java.lang.Integer + INTEGER + INTEGER + + + + java.lang.Long + BIGINT + NUMERIC(18,0) + + + + java.lang.Float + REAL + FLOAT + + + + java.lang.Double + DOUBLE + DOUBLE PRECISION + + + + java.lang.Byte + TINYINT + SMALLINT + + + + java.lang.Short + SMALLINT + SMALLINT + + + + java.util.Date + TIMESTAMP + DATETIME YEAR TO FRACTION(3) + + + + java.sql.Date + DATE + DATE + + + + java.sql.Time + TIME + TIME + + + + java.sql.Timestamp + TIMESTAMP + DATETIME YEAR TO FRACTION(3) + + + + java.lang.Object + BLOB + BLOB + + + + + Mimer SQL + + CONSTRAINT ?1 PRIMARY KEY (?2) + ALTER TABLE ?1 ADD CONSTRAINT ?2 FOREIGN KEY (?3) REFERENCES ?4 (?5) + t + _ + 32 + true + 1 + 0 + + + java.lang.Boolean + BIT + SMALLINT + + + + java.lang.Byte + TINYINT + SMALLINT + + + + java.lang.Short + SMALLINT + SMALLINT + + + + java.lang.Integer + INTEGER + INTEGER + + + + java.lang.Long + BIGINT + BIGINT + + + + java.lang.Float + REAL + REAL + + + + java.lang.Double + DOUBLE + DOUBLE PRECISION + + + + java.lang.Character + CHAR + CHAR + + + + java.lang.String + VARCHAR + VARCHAR(5000) + + + + java.sql.Date + DATE + DATE + + + + java.sql.Time + TIME + TIME + + + + java.sql.Timestamp + TIMESTAMP + TIMESTAMP + + + + java.lang.Object + JAVA_OBJECT + VARBINARY(5000) + + + + + + + + + + + jboss.jdbc:service=SQLExceptionProcessor + + + + + + SELECT CURRENT_TIMESTAMP + + + + + + + + TEST_SEQUENCE + + + + + %%t_seq + + + + + + + + + + + + + + + + + + + + + + + + + + + + UUIDKeyGeneratorFactory + + + + + + + + + SELECT CURRENT_TIMESTAMP + + + + + + + + + + + + + + + + + alias + alter + between + char + column + commit + create + date + default + delete + drop + file + from + grant + group + index + integer + join + number + on + order + primary + public + revoke + rollback + row + select + set + session + size + table + trigger + update + unique + user + varchar + view + + diff --git a/docker/tc-cache/cache/conf/xmdesc/AttributePersistenceService-xmbean.xml b/docker/tc-cache/cache/conf/xmdesc/AttributePersistenceService-xmbean.xml new file mode 100644 index 000000000..a60da5e07 --- /dev/null +++ b/docker/tc-cache/cache/conf/xmdesc/AttributePersistenceService-xmbean.xml @@ -0,0 +1,107 @@ + + + + + + + + XMBean Attribute Persistence Service + + + + + org.jboss.system.pm.AttributePersistenceService + + + + Specifies whether to call destroy() on the AttributePersistenceManager implementation, upon service stop + ApmDestroyOnServiceStop + boolean + + + + + + + The actual AttributePersistenceManager implementation + AttributePersistenceManagerClass + java.lang.String + + + + + + + The XML configuration that is passed to the AttributePersistenceManager implementation + AttributePersistenceManagerConfig + org.w3c.dom.Element + + + + + + + The version tag to use for stored/loaded Attribute data + VersionTag + java.lang.String + + + + + + &defaultAttributes; + + + + Factory method returning the active AttributePersistenceManager implementation, for internal usage + apmCreate + org.jboss.mx.persistence.AttributePersistenceManager + + + + Delegated to the active APM returns true when a persisted image with this id exists + apmExists + + The id of the persisted attribute image + id + java.lang.String + + boolean + + + + Delegated to the active APM removes the specified persisted attribute image + apmRemove + + The id of the persisted attribute image + id + java.lang.String + + void + + + + Delegated to the active APM removes the persisted attribute images + apmRemoveAll + void + + + + Delegated to the active APM it returns a list with the ids of all persisted attribute images + apmListAll + [Ljava.lang.String; + + + + Delegated to the active APM it returns a single string with the ids of all persisted attribute images + apmListAllAsString + java.lang.String + + + &defaultOperations; + + \ No newline at end of file diff --git a/docker/tc-cache/cache/conf/xmdesc/ClientUserTransaction-xmbean.xml b/docker/tc-cache/cache/conf/xmdesc/ClientUserTransaction-xmbean.xml new file mode 100644 index 000000000..dc4598400 --- /dev/null +++ b/docker/tc-cache/cache/conf/xmdesc/ClientUserTransaction-xmbean.xml @@ -0,0 +1,28 @@ + + + + + ClientUserTransaction Service. + org.jboss.tm.usertx.server.ClientUserTransactionService + &defaultAttributes; + + Set the name of the proxy factory service used for the UserTransactionSession + TxProxyName + javax.management.ObjectName + + + + Expose UserTransactionSession and UserTransactionSessionFactory interfaces via JMX to invokers. + invoke + + A pointer to the invocation object + invocation + org.jboss.invocation.Invocation + + java.lang.Object + + + &defaultOperations; + \ No newline at end of file diff --git a/docker/tc-cache/cache/conf/xmdesc/JNDIView-xmbean.xml b/docker/tc-cache/cache/conf/xmdesc/JNDIView-xmbean.xml new file mode 100644 index 000000000..4855e6fbf --- /dev/null +++ b/docker/tc-cache/cache/conf/xmdesc/JNDIView-xmbean.xml @@ -0,0 +1,35 @@ + + + + + JNDIView Service. List deployed application java:comp namespaces, + the java: namespace as well as the global InitialContext JNDI namespace. + + org.jboss.naming.JNDIView + &defaultAttributes; + + The HANamingService service name + HANamingService + java.lang.String + + + Output JNDI info as text + list + + If true, list the class of each object in addition to its name + verbose + boolean + + java.lang.String + + + Output JNDI info in XML format + listXML + java.lang.String + + &defaultOperations; + \ No newline at end of file diff --git a/docker/tc-cache/cache/conf/xmdesc/Log4jService-xmbean.xml b/docker/tc-cache/cache/conf/xmdesc/Log4jService-xmbean.xml new file mode 100644 index 000000000..b030d9278 --- /dev/null +++ b/docker/tc-cache/cache/conf/xmdesc/Log4jService-xmbean.xml @@ -0,0 +1,110 @@ + + +]> + + + + This MBean allows to get and set Log4j specific options. +See also resource:log4j.xml + + org.jboss.logging.Log4jService + + The default constructor + Log4jService + + + &defaultAttributes; + + + The URL of the log4j.xml config file. + ConfigurationURL + java.net.URL + + + Should data writen to standard error be caught and integrated into the log output. + CatchSystemErr + boolean + + + Should data writen to standard output be caught and integrated into the log output. + CatchSystemOut + boolean + + + Sets the log4j quite mode. For log4j 1.2.8 this must stay on true. + Log4jQuietMode + boolean + + + The time in seconds between checking for new config. + RefreshPeriod + int + + + + Displays the log level of a given logger. + getLoggerLevel + + The name of the logger to display. + logger + java.lang.String + + java.lang.String + + + Sets the log level for a given logger. + setLoggerLevel + + The name of the logger to set. + logger + java.lang.String + + + The log level to set. + level + java.lang.String + + void + + + Sets the levels of each logger specified by the given comma + seperated list of logger names. + setLoggerLevels + + The list of loggers + loggers + java.lang.String + + + The log level to set + level + java.lang.String + + void + + + Force the logging system to reconfigure. + reconfigure + void + + + Force the logging system to reconfigure with the given URL. + reconfigure + + The url for the new configuration. + url + java.lang.String + + void + + + + &defaultOperations; + + \ No newline at end of file diff --git a/docker/tc-cache/cache/conf/xmdesc/NamingBean-xmbean.xml b/docker/tc-cache/cache/conf/xmdesc/NamingBean-xmbean.xml new file mode 100644 index 000000000..dc5d3eece --- /dev/null +++ b/docker/tc-cache/cache/conf/xmdesc/NamingBean-xmbean.xml @@ -0,0 +1,37 @@ + + + + + + The JNDI pojo bean + + org.jnp.server.NamingBeanImpl + + + The default constructor + NamingBeanImpl + + + + The NamingInstance + NamingInstance + org.jnp.interfaces.Naming + + + + + The start lifecycle op + start + void + + + The stop lifecycle op + stop + void + + + diff --git a/docker/tc-cache/cache/conf/xmdesc/NamingService-xmbean.xml b/docker/tc-cache/cache/conf/xmdesc/NamingService-xmbean.xml new file mode 100644 index 000000000..22562de75 --- /dev/null +++ b/docker/tc-cache/cache/conf/xmdesc/NamingService-xmbean.xml @@ -0,0 +1,196 @@ + + +]> + + + + The standard JBoss JNDI naming server with a custom + ProxyFactoryInterceptor interceptor that does replacement of NamingContext + objects with the detached invoker proxy. + + + + + + + + + + + + org.jboss.naming.NamingService + + + The default constructor + NamingService + + + &defaultAttributes; + + + MethodMap + java.util.Map + + + Underlying Naming bean instance + Naming + org.jnp.server.NamingBean + + + Underlying Naming bean instance + NamingInstance + org.jnp.interfaces.Naming + + + The call by value mode. true if all lookups are unmarshalled using + the caller's TCL, false if in VM lookups return the value by reference. + CallByValue + boolean + + + The bind address of the bootstrap lookup socket. + BindAddress + java.lang.String + + + The listening port for the bootstrap JNP service. Set this to -1 + to run the NamingService without the JNP invoker listening port. + Port + int + + + The bootstrap socket backlog count. + Backlog + int + + + The bootstrap socket javax.net.ServerSocketFactory class name + JNPServerSocketFactory + java.lang.String + + + The bootstrap socket javax.net.ServerSocketFactory + JNPServerSocketFactoryBean + javax.net.ServerSocketFactory + + + + The port of the RMI naming service, 0 == anonymous. This + is only used if an explicit InvokerProxyFactory has not been set. + RmiPort + int + + + The RMI service bind address. Empty == all addresses + RmiBindAddress + java.lang.String + + + The RMI service java.rmi.server.RMIClientSocketFactory class name + ClientSocketFactory + java.lang.String + + + The RMI service java.rmi.server.RMIServerSocketFactory instance + ClientSocketFactoryBean + java.rmi.server.RMIClientSocketFactory + + + The RMI service java.rmi.server.RMIServerSocketFactory class name + ServerSocketFactory + java.lang.String + + + The RMI service java.rmi.server.RMIServerSocketFactory instance + ServerSocketFactory + java.rmi.server.RMIServerSocketFactory + + + + Ghe InstallGlobalService which defines whether the MainMBean's + Naming server will be installed as the NamingContext.setLocal global + value. + InstallGlobalService + boolean + + + The UseGlobalService which defines whether the MainMBean's + Naming server will initialized from the existing NamingContext.setLocal global + value. + UseGlobalService + boolean + + + The thread pool service used to control the bootstrap lookups + LookupPool + org.jboss.util.threadpool.BasicThreadPoolMBean + + + The detached invoker proxy factory to use for the naming + service transport. + InvokerProxyFactory + org.jboss.invocation.jrmp.server.JRMPProxyFactoryMBean + + + + + The generic invocation operation used by detached invokers + to route requests to the service + + invoke + + The Naming interface method invocation encapsulation + + invocation + org.jboss.invocation.Invocation + + java.lang.Object + + + Create an alias in jndi + + createAlias + + The from name + + fromName + java.lang.String + + + The to name + + toName + java.lang.String + + void + + + Remove an alias from jndi + + removeAlias + + The name + + name + java.lang.String + + void + + + &defaultOperations; + + diff --git a/docker/tc-cache/cache/conf/xmdesc/TransactionManagerService-xmbean.xml b/docker/tc-cache/cache/conf/xmdesc/TransactionManagerService-xmbean.xml new file mode 100644 index 000000000..58d6e0078 --- /dev/null +++ b/docker/tc-cache/cache/conf/xmdesc/TransactionManagerService-xmbean.xml @@ -0,0 +1,89 @@ + + + + + + TransactionManager Service. + org.jboss.tm.TransactionManagerService + &defaultAttributes; + + Should be set to true for transaction demarcation over IIOP + GlobalIdsEnabled + boolean + + + Whether to interrupt threads at transaction timeout + InterruptThreads + boolean + + + The transaction timeout in seconds + TransactionTimeout + int + + + Name of the xidFactory + XidFactory + javax.management.ObjectName + + + Transaction Integrity Policy + TransactionIntegrityFactory + org.jboss.tm.integrity.TransactionIntegrityFactory + + + Returns the TransactionManager managed by this service + TransactionManager + javax.transaction.TransactionManager + + + Returns the XATerminator managed by this service + XATerminator + org.jboss.tm.JBossXATerminator + + + Counts the number of active transactions + TransactionCount + long + + + Counts the number of commited transactions + CommitCount + long + + + Counts the number of transactions that have been rolled back + RollbackCount + long + + + + Register a XAException Formatter + registerXAExceptionFormatter + + The class of the formatter + clazz + java.lang.Class + + + A XAExceptionFromatter value + formatter + org.jboss.tm.XAExceptionFormatter + + void + + + Unregister a XAException Formatter + unregisterXAExceptionFormatter + + The class of the formatter + clazz + java.lang.Class + + void + + + &defaultOperations; + \ No newline at end of file diff --git a/docker/tc-cache/cache/conf/xmdesc/org.jboss.deployment.JARDeployer-xmbean.xml b/docker/tc-cache/cache/conf/xmdesc/org.jboss.deployment.JARDeployer-xmbean.xml new file mode 100644 index 000000000..42591af2b --- /dev/null +++ b/docker/tc-cache/cache/conf/xmdesc/org.jboss.deployment.JARDeployer-xmbean.xml @@ -0,0 +1,46 @@ + + + + + + The JARDeployer adds archives that do not contain META-INF/*.xml + files. The pattern of xml files that correspond to deployment descriptors + can be specified using the DescriptorNames attribute. + + org.jboss.deployment.JARDeployer + + + The list of suffixes that define deployment descriptors which + if found in an archive META-INF directory indicate non-jar deployments + which should be ignored by the JARDeployer + + DescriptorNames + [Ljava.lang.String; + + + + + + + + + + Allow the override of supported suffixes and relative order + EnhancedSuffixes + [Ljava.lang.String; + + + &deployerAttributes; + &defaultAttributes; + + &deployerOperations; + &defaultOperations; + + diff --git a/docker/tc-cache/cache/conf/xmdesc/org.jboss.deployment.MainDeployer-xmbean.xml b/docker/tc-cache/cache/conf/xmdesc/org.jboss.deployment.MainDeployer-xmbean.xml new file mode 100644 index 000000000..7579a6bc2 --- /dev/null +++ b/docker/tc-cache/cache/conf/xmdesc/org.jboss.deployment.MainDeployer-xmbean.xml @@ -0,0 +1,270 @@ + + + + + + + + + The Main deployer is the service which acts as the entry + point for the deployment/undeployment requests. + + org.jboss.deployment.MainDeployer + + + + CopyFiles + boolean + + + + + + + ServiceController + javax.management.ObjectName + + + + ServiceName + javax.management.ObjectName + + + The suffix order used when sorting deployments, constructed dynamically by registering deployers + SuffixOrder + [Ljava.lang.String; + + + Allows the override of the suffix order declared by subdeployers, using the syntax [order:]suffix + + EnhancedSuffixOrder + [Ljava.lang.String; + + + + + + + + TempDir + java.io.File + + + + TempDirString + java.lang.String + + + &defaultAttributes; + + + + addDeployer + + deployer + org.jboss.deployment.SubDeployer + + void + + + + removeDeployer + + deployer + org.jboss.deployment.SubDeployer + + void + + + + deploy + + url + java.lang.String + + void + + + + deploy + + url + java.net.URL + + void + + + + deploy + + sdi + org.jboss.deployment.DeploymentInfo + + void + + + starts a package identified by a URL + start + + urlspec + java.lang.String + + void + + + stops a package identified by a URL + stop + + urlspec + java.lang.String + + void + + + + getDeployment + + url + java.net.URL + + org.jboss.deployment.DeploymentInfo + + + + getWatchUrl + + url + java.net.URL + + java.net.URL + + + + isDeployed + + url + java.net.URL + + boolean + + + + isDeployed + + url + java.lang.String + + boolean + + + + listDeployed + java.util.Collection + + + + listDeployedAsString + java.lang.String + + + + listDeployedModules + java.util.Collection + + + + listDeployers + java.util.Collection + + + Check the current deployment states and generate a + IncompleteDeploymentException if there are mbeans waiting for depedencies. + + checkIncompleteDeployments + void + + + + listIncompletelyDeployed + java.util.Collection + + + + listWaitingForDeployer + java.util.Collection + + + + redeploy + + url + java.lang.String + + void + + + + redeploy + + url + java.net.URL + + void + + + + redeploy + + sdi + org.jboss.deployment.DeploymentInfo + + void + + + + shutdown + void + + + + undeploy + + url + java.lang.String + + void + + + + undeploy + + url + java.net.URL + + void + + + + undeploy + + sdi + org.jboss.deployment.DeploymentInfo + + void + + + &defaultOperations; + + \ No newline at end of file diff --git a/docker/tc-cache/cache/conf/xmdesc/org.jboss.deployment.SARDeployer-xmbean.xml b/docker/tc-cache/cache/conf/xmdesc/org.jboss.deployment.SARDeployer-xmbean.xml new file mode 100644 index 000000000..dffcb236f --- /dev/null +++ b/docker/tc-cache/cache/conf/xmdesc/org.jboss.deployment.SARDeployer-xmbean.xml @@ -0,0 +1,50 @@ + + + + + The SAR deployer handles the JBoss service archive deployments. + org.jboss.deployment.SARDeployer + + + A flag passed to the JAXP DocumentBuilderFactory setNamespaceAware method + UseNamespaceAwareParser + boolean + + + + + + + + Allow the override of supported suffixes and relative order + EnhancedSuffixes + [Ljava.lang.String; + + + + + + + &deployerAttributes; + &defaultAttributes; + + + Get the associated service DeploymentInfo if found, null otherwise + getService + + serviceName + javax.management.ObjectName + + org.jboss.deployment.DeploymentInfo + + + &deployerOperations; + &defaultOperations; + + \ No newline at end of file diff --git a/docker/tc-cache/cache/deploy/cacheadmin.sar b/docker/tc-cache/cache/deploy/cacheadmin.sar new file mode 100644 index 000000000..cf2545e8d Binary files /dev/null and b/docker/tc-cache/cache/deploy/cacheadmin.sar differ diff --git a/docker/tc-cache/cache/deploy/jboss-web.deployer/META-INF/jboss-service.xml b/docker/tc-cache/cache/deploy/jboss-web.deployer/META-INF/jboss-service.xml new file mode 100644 index 000000000..7109d1a7f --- /dev/null +++ b/docker/tc-cache/cache/deploy/jboss-web.deployer/META-INF/jboss-service.xml @@ -0,0 +1,175 @@ + + + + + + + + + + + + + BASIC + org.apache.catalina.authenticator.BasicAuthenticator + + + CLIENT-CERT + org.apache.catalina.authenticator.SSLAuthenticator + + + DIGEST + org.apache.catalina.authenticator.DigestAuthenticator + + + FORM + org.apache.catalina.authenticator.FormAuthenticator + + + NONE + org.apache.catalina.authenticator.NonLoginAuthenticator + + + + + + java:/jaas/other + + + false + + false + + javax.servlet + + true + + + false + + + org.jboss.web.tomcat.service.session.JBossCacheManager + + + + + + + + + + instant + 2000 + + + false + + jboss.web + + + jboss.security:service=JaasSecurityManager + + + + + + jboss:service=TransactionManager + + + jboss.jca:service=CachedConnectionManager + + + + diff --git a/docker/tc-cache/cache/deploy/jboss-web.deployer/META-INF/webserver-xmbean.xml b/docker/tc-cache/cache/deploy/jboss-web.deployer/META-INF/webserver-xmbean.xml new file mode 100644 index 000000000..8ba18f179 --- /dev/null +++ b/docker/tc-cache/cache/deploy/jboss-web.deployer/META-INF/webserver-xmbean.xml @@ -0,0 +1,190 @@ + + + + + The JBoss Web Deployer responsible for war deployment + + + + + + + org.jboss.web.tomcat.service.JBossWeb + + + + + Authenticators + java.util.Properties + + + + UseJBossWebLoader + boolean + + + + AllowSelfPrivilegedWebApps + boolean + + + + DeleteWorkDirOnContextDestroy + boolean + + + + HttpHeaderForSSOAuth + java.lang.String + + + + SessionCookieForSSOAuth + java.lang.String + + + + SubjectAttributeName + java.lang.String + + + + CacheName + java.lang.String + + + + UnpackWars + boolean + + + + AcceptNonWarDirs + boolean + + + + Config + org.w3c.dom.Element + + + + LenientEjbLink + boolean + + + + UseJK + boolean + + + + Domain + java.lang.String + + + + FilteredPackages + [Ljava.lang.String; + + + + Java2ClassLoadingCompliance + boolean + + + + DefaultSecurityDomain + java.lang.String + + + + SnapshotMode + java.lang.String + + + + SnapshotInterval + int + + + + ConfigFile + java.lang.String + + + + UseLocalCache + boolean + + + + SessionIdAlphabet + java.lang.String + + + + ContextMBeanCode + java.lang.String + + + + ManagerClass + java.lang.String + + + + DeployedApplications + java.util.Iterator + + + + SecurityManagerService + org.jboss.security.plugins.JaasSecurityManagerServiceMBean + + + + + Allow the override of supported suffixes and relative order + EnhancedSuffixes + [Ljava.lang.String; + + + &deployerAttributes; + &defaultAttributes; + + + + See if a war is deployed + isDeployed + + warUrl + java.lang.String + + boolean + + + + Start all connectors of the Domain + startConnectors + + + + Stop all connectors of the Domain + stopConnectors + + + &deployerOperations; + &defaultOperations; + &interceptable; + + diff --git a/docker/tc-cache/cache/deploy/jboss-web.deployer/ROOT.war/WEB-INF/web.xml b/docker/tc-cache/cache/deploy/jboss-web.deployer/ROOT.war/WEB-INF/web.xml new file mode 100644 index 000000000..b2be5de3e --- /dev/null +++ b/docker/tc-cache/cache/deploy/jboss-web.deployer/ROOT.war/WEB-INF/web.xml @@ -0,0 +1,20 @@ + + + + + + Welcome to JBoss + + Welcome to JBoss + + + Status Servlet + org.jboss.web.tomcat.service.StatusServlet + + + Status Servlet + /status + + diff --git a/docker/tc-cache/cache/deploy/jboss-web.deployer/ROOT.war/favicon.ico b/docker/tc-cache/cache/deploy/jboss-web.deployer/ROOT.war/favicon.ico new file mode 100644 index 000000000..66dd49e31 Binary files /dev/null and b/docker/tc-cache/cache/deploy/jboss-web.deployer/ROOT.war/favicon.ico differ diff --git a/docker/tc-cache/cache/deploy/jboss-web.deployer/ROOT.war/index.html b/docker/tc-cache/cache/deploy/jboss-web.deployer/ROOT.war/index.html new file mode 100644 index 000000000..14a9a3772 --- /dev/null +++ b/docker/tc-cache/cache/deploy/jboss-web.deployer/ROOT.war/index.html @@ -0,0 +1,44 @@ + + + + + Welcome to JBoss™ + + + + + + + + + + + + + +

JBoss Online Resources

+ + +

JBoss Management

+ + + + + + + + diff --git a/docker/tc-cache/cache/deploy/jboss-web.deployer/ROOT.war/jboss.css b/docker/tc-cache/cache/deploy/jboss-web.deployer/ROOT.war/jboss.css new file mode 100644 index 000000000..f0838a6d9 --- /dev/null +++ b/docker/tc-cache/cache/deploy/jboss-web.deployer/ROOT.war/jboss.css @@ -0,0 +1,143 @@ +body { + margin: 13px 0px 10px 0px; + background-color: #ffffff; + font-size: 10px; + font-family: verdana, arial, "sans-serif"; + color: #606060; + } +img { + border: 0px; + } +#header { + background-color: #003D6E; + background-repeat: no-repeat; + width: 100%; + height: 80px; + } +#header #banner { + float: right; + margin: 8px 5px 0px 0px; + } +#logo { + position: absolute; + top: 2px; + left: 4px; + z-index: 200; +} +#navigation_bar { + background-color: #f0f0f0; + border-bottom: 1px dotted #999999; + height: 20px; + } +#items { + font-size: 12px; + width: 600px; + margin: 5px 5px 5px 170px; + position: relative; + z-index: 300; + } +#items .item { + margin-right: 10px; + } +.side_block { + margin: 15px 5px 10px 5px; + background-color: #fbfbfb; + border: 1px solid #f0f0f0; + } +.side_block h3 { + font-size: 11px; + font-weight: 100; + width: 100%; + margin: 0px 0px 5px 0px; + padding: 4px 4px 4px 10x; + background-color: #f0f0f0; + } +.side_block h4 { + font-size: 11px; + color: #003D6E; + font-weight: bold; + margin: 10px 5px 4px 5px; + } +.side_block p { + margin: 5px 5px 3px 5px; + } +.side_block form { + margin: 0px 0px 0px 5px; + } +.side_block #login { + font-size: 9px; + } +.side_block p img { + text-align: center; + } +#content { + width: 90%; + margin: 10px auto; + } +#left { + float: left; + width: 14%; + } +#right { + float: right; + width: 14%; + } +.content_block { + text-align: justify; + border: 1px solid #999999; + margin: 5px; + width: 31%; + float: left; + } +.content_block p { + margin: 0px 5px 3px 5px; + } +.content_block h3 { + font-size: 11px; + font-weight: bold; + color: #000000; + margin: 0px 0px 5px 0px; + padding: 4px 4px 4px 4x; + text-align: center; + background-color: #f0f0f0; + border-bottom: 1px solid #999999 + } +.content_block h4 { + font-size: 11px; + color: #003D6E; + text-align: left; + font-weight: bold; + margin: 10px 5px 4px 5px; + } +#footer { + clear: both; + border-top: 1px dotted #999999; + } +#credits { + background-color: #f0f0f0; + padding: 5px; + text-align: center; + } +#footer_bar { + height: 20px; + width: 100%; + background-color: #003D6E; + } +.hide { + display: none; + } +.spacer { + clear: both; + } +.spacer hr { + display: none; + } +.center { + text-align: center; + } +#youcandoit { + background-image: url("youcandoit.jpg"); + background-repeat: repeat-x; + height: 165px; + margin: 0px 30px 0px 30px; + } diff --git a/docker/tc-cache/cache/deploy/jboss-web.deployer/ROOT.war/logo.gif b/docker/tc-cache/cache/deploy/jboss-web.deployer/ROOT.war/logo.gif new file mode 100644 index 000000000..d33ddf666 Binary files /dev/null and b/docker/tc-cache/cache/deploy/jboss-web.deployer/ROOT.war/logo.gif differ diff --git a/docker/tc-cache/cache/deploy/jboss-web.deployer/ROOT.war/manager/xform.xsl b/docker/tc-cache/cache/deploy/jboss-web.deployer/ROOT.war/manager/xform.xsl new file mode 100644 index 000000000..c5ced3ba1 --- /dev/null +++ b/docker/tc-cache/cache/deploy/jboss-web.deployer/ROOT.war/manager/xform.xsl @@ -0,0 +1,96 @@ + + + + + + + + + + + Tomcat Status + + + +
Tomcat Status
+ + + + + +
+ + + + + + + + + + + + +
JVM:free: total: max:

+
+ + + Connector --
+ + + + +
+ + + + + + + + + + +
threadInfo maxThreads: minSpareThreads: maxSpareThreads: currentThreadCount: currentThreadsBusy:

+
+ + + + + + + + + + + +
requestInfo maxTime: processingTime: requestCount: errorCount: bytesReceived: bytesSent:

+
+ + + + + + +
StageTimeB SentB RecvClientVHostRequest

+
+ + + + + + + + + + ? + + + +
diff --git a/docker/tc-cache/cache/deploy/jboss-web.deployer/conf/web.xml b/docker/tc-cache/cache/deploy/jboss-web.deployer/conf/web.xml new file mode 100644 index 000000000..447c69109 --- /dev/null +++ b/docker/tc-cache/cache/deploy/jboss-web.deployer/conf/web.xml @@ -0,0 +1,1248 @@ + + + + + + + + + + + + + + + + + + com.sun.faces.injectionProvider + org.jboss.web.jsf.integration.injection.JBossInjectionProvider + + + + + CommonHeadersFilter + org.jboss.web.tomcat.filters.ReplyHeaderFilter + + X-Powered-By + Servlet 2.4; JBoss-4.2.2.GA (build: SVNTag=JBoss_4_2_2_GA date=200710221139)/Tomcat-5.5 + + + + + CommonHeadersFilter + /* + + + + + + + + + + org.jboss.web.tomcat.security.SecurityFlushSessionListener + + + + + + org.jboss.web.jsf.integration.config.JBossJSFConfigureListener + + + + + + + com.sun.faces.application.WebappLifecycleListener + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + default + org.apache.catalina.servlets.DefaultServlet + + debug + 0 + + + listings + false + + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + jsp + org.apache.jasper.servlet.JspServlet + + fork + false + + + xpoweredBy + false + + + compilerSourceVM + 1.5 + + + + engineOptionsClass + org.jboss.web.tomcat.service.jasper.JspServletOptions + + + + JSF standard tlds + tagLibJar0 + jsf-libs/jsf-impl.jar + + + JSTL standard tlds + tagLibJar1 + jstl.jar + + + 3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + default + / + + + + + + + + jsp + *.jsp + + + + jsp + *.jspx + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 30 + + + + + + + + + + + + abs + audio/x-mpeg + + + ai + application/postscript + + + aif + audio/x-aiff + + + aifc + audio/x-aiff + + + aiff + audio/x-aiff + + + aim + application/x-aim + + + art + image/x-jg + + + asf + video/x-ms-asf + + + asx + video/x-ms-asf + + + au + audio/basic + + + avi + video/x-msvideo + + + avx + video/x-rad-screenplay + + + bcpio + application/x-bcpio + + + bin + application/octet-stream + + + bmp + image/bmp + + + body + text/html + + + cdf + application/x-cdf + + + cer + application/x-x509-ca-cert + + + class + application/java + + + cpio + application/x-cpio + + + csh + application/x-csh + + + css + text/css + + + dib + image/bmp + + + doc + application/msword + + + dtd + application/xml-dtd + + + dv + video/x-dv + + + dvi + application/x-dvi + + + eps + application/postscript + + + etx + text/x-setext + + + exe + application/octet-stream + + + gif + image/gif + + + gtar + application/x-gtar + + + gz + application/x-gzip + + + hdf + application/x-hdf + + + hqx + application/mac-binhex40 + + + htc + text/x-component + + + htm + text/html + + + html + text/html + + + hqx + application/mac-binhex40 + + + ief + image/ief + + + jad + text/vnd.sun.j2me.app-descriptor + + + jar + application/java-archive + + + java + text/plain + + + jnlp + application/x-java-jnlp-file + + + jpe + image/jpeg + + + jpeg + image/jpeg + + + jpg + image/jpeg + + + js + text/javascript + + + jsf + text/plain + + + jspf + text/plain + + + kar + audio/x-midi + + + latex + application/x-latex + + + m3u + audio/x-mpegurl + + + mac + image/x-macpaint + + + man + application/x-troff-man + + + mathml + application/mathml+xml + + + me + application/x-troff-me + + + mid + audio/x-midi + + + midi + audio/x-midi + + + mif + application/x-mif + + + mov + video/quicktime + + + movie + video/x-sgi-movie + + + mp1 + audio/x-mpeg + + + mp2 + audio/x-mpeg + + + mp3 + audio/x-mpeg + + + mpa + audio/x-mpeg + + + mpe + video/mpeg + + + mpeg + video/mpeg + + + mpega + audio/x-mpeg + + + mpg + video/mpeg + + + mpv2 + video/mpeg2 + + + ms + application/x-wais-source + + + nc + application/x-netcdf + + + oda + application/oda + + + + odb + application/vnd.oasis.opendocument.database + + + + odc + application/vnd.oasis.opendocument.chart + + + + odf + application/vnd.oasis.opendocument.formula + + + + odg + application/vnd.oasis.opendocument.graphics + + + + odi + application/vnd.oasis.opendocument.image + + + + odm + application/vnd.oasis.opendocument.text-master + + + + odp + application/vnd.oasis.opendocument.presentation + + + + ods + application/vnd.oasis.opendocument.spreadsheet + + + + odt + application/vnd.oasis.opendocument.text + + + ogg + application/ogg + + + + otg + application/vnd.oasis.opendocument.graphics-template + + + + oth + application/vnd.oasis.opendocument.text-web + + + + otp + application/vnd.oasis.opendocument.presentation-template + + + + ots + application/vnd.oasis.opendocument.spreadsheet-template + + + + ott + application/vnd.oasis.opendocument.text-template + + + pbm + image/x-portable-bitmap + + + pct + image/pict + + + pdf + application/pdf + + + pgm + image/x-portable-graymap + + + pic + image/pict + + + pict + image/pict + + + pls + audio/x-scpls + + + png + image/png + + + pnm + image/x-portable-anymap + + + pnt + image/x-macpaint + + + ppm + image/x-portable-pixmap + + + ppt + application/powerpoint + + + ps + application/postscript + + + psd + image/x-photoshop + + + qt + video/quicktime + + + qti + image/x-quicktime + + + qtif + image/x-quicktime + + + ras + image/x-cmu-raster + + + rdf + application/rdf+xml + + + rgb + image/x-rgb + + + rm + application/vnd.rn-realmedia + + + roff + application/x-troff + + + rtf + application/rtf + + + rtx + text/richtext + + + sh + application/x-sh + + + shar + application/x-shar + + + + smf + audio/x-midi + + + sit + application/x-stuffit + + + snd + audio/basic + + + src + application/x-wais-source + + + sv4cpio + application/x-sv4cpio + + + sv4crc + application/x-sv4crc + + + swf + application/x-shockwave-flash + + + t + application/x-troff + + + tar + application/x-tar + + + tcl + application/x-tcl + + + tex + application/x-tex + + + texi + application/x-texinfo + + + texinfo + application/x-texinfo + + + tif + image/tiff + + + tiff + image/tiff + + + tr + application/x-troff + + + tsv + text/tab-separated-values + + + txt + text/plain + + + ulw + audio/basic + + + ustar + application/x-ustar + + + vxml + application/voicexml+xml + + + xbm + image/x-xbitmap + + + xht + application/xhtml+xml + + + xhtml + application/xhtml+xml + + + xml + application/xml + + + xpm + image/x-xpixmap + + + xsl + application/xml + + + xslt + application/xslt+xml + + + xul + application/vnd.mozilla.xul+xml + + + xwd + image/x-xwindowdump + + + wav + audio/x-wav + + + svg + image/svg+xml + + + svgz + image/svg+xml + + + vsd + application/x-visio + + + + wbmp + image/vnd.wap.wbmp + + + + wml + text/vnd.wap.wml + + + + wmlc + application/vnd.wap.wmlc + + + + wmls + text/vnd.wap.wmlscript + + + + wmlscriptc + application/vnd.wap.wmlscriptc + + + wrl + x-world/x-vrml + + + Z + application/x-compress + + + z + application/x-compress + + + zip + application/zip + + + xls + application/vnd.ms-excel + + + doc + application/vnd.ms-word + + + ppt + application/vnd.ms-powerpoint + + + + + + + + + + + + + + + + index.html + index.htm + index.jsp + + + diff --git a/docker/tc-cache/cache/deploy/jboss-web.deployer/context.xml b/docker/tc-cache/cache/deploy/jboss-web.deployer/context.xml new file mode 100644 index 000000000..cb1d2b02e --- /dev/null +++ b/docker/tc-cache/cache/deploy/jboss-web.deployer/context.xml @@ -0,0 +1,17 @@ + + + + + + + org.jboss.web.tomcat.security.RunAsListener + + diff --git a/docker/tc-cache/cache/deploy/jboss-web.deployer/jasper-jdt.jar b/docker/tc-cache/cache/deploy/jboss-web.deployer/jasper-jdt.jar new file mode 100644 index 000000000..adcbfb944 Binary files /dev/null and b/docker/tc-cache/cache/deploy/jboss-web.deployer/jasper-jdt.jar differ diff --git a/docker/tc-cache/cache/deploy/jboss-web.deployer/jbossweb-extras.jar b/docker/tc-cache/cache/deploy/jboss-web.deployer/jbossweb-extras.jar new file mode 100644 index 000000000..2e9f14631 Binary files /dev/null and b/docker/tc-cache/cache/deploy/jboss-web.deployer/jbossweb-extras.jar differ diff --git a/docker/tc-cache/cache/deploy/jboss-web.deployer/jbossweb-service.jar b/docker/tc-cache/cache/deploy/jboss-web.deployer/jbossweb-service.jar new file mode 100644 index 000000000..4eeccaec1 Binary files /dev/null and b/docker/tc-cache/cache/deploy/jboss-web.deployer/jbossweb-service.jar differ diff --git a/docker/tc-cache/cache/deploy/jboss-web.deployer/jbossweb.jar b/docker/tc-cache/cache/deploy/jboss-web.deployer/jbossweb.jar new file mode 100644 index 000000000..397ff2034 Binary files /dev/null and b/docker/tc-cache/cache/deploy/jboss-web.deployer/jbossweb.jar differ diff --git a/docker/tc-cache/cache/deploy/jboss-web.deployer/jsf-libs/jboss-faces.jar b/docker/tc-cache/cache/deploy/jboss-web.deployer/jsf-libs/jboss-faces.jar new file mode 100644 index 000000000..664e2d708 Binary files /dev/null and b/docker/tc-cache/cache/deploy/jboss-web.deployer/jsf-libs/jboss-faces.jar differ diff --git a/docker/tc-cache/cache/deploy/jboss-web.deployer/jsf-libs/jsf-api.jar b/docker/tc-cache/cache/deploy/jboss-web.deployer/jsf-libs/jsf-api.jar new file mode 100644 index 000000000..86436b342 Binary files /dev/null and b/docker/tc-cache/cache/deploy/jboss-web.deployer/jsf-libs/jsf-api.jar differ diff --git a/docker/tc-cache/cache/deploy/jboss-web.deployer/jsf-libs/jsf-impl.jar b/docker/tc-cache/cache/deploy/jboss-web.deployer/jsf-libs/jsf-impl.jar new file mode 100644 index 000000000..f7b95aa32 Binary files /dev/null and b/docker/tc-cache/cache/deploy/jboss-web.deployer/jsf-libs/jsf-impl.jar differ diff --git a/docker/tc-cache/cache/deploy/jboss-web.deployer/jstl.jar b/docker/tc-cache/cache/deploy/jboss-web.deployer/jstl.jar new file mode 100644 index 000000000..651c35b7b Binary files /dev/null and b/docker/tc-cache/cache/deploy/jboss-web.deployer/jstl.jar differ diff --git a/docker/tc-cache/cache/deploy/jboss-web.deployer/server.xml b/docker/tc-cache/cache/deploy/jboss-web.deployer/server.xml new file mode 100644 index 000000000..b2fe02129 --- /dev/null +++ b/docker/tc-cache/cache/deploy/jboss-web.deployer/server.xml @@ -0,0 +1,167 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docker/tc-cache/cache/deploy/jbossjca-service.xml b/docker/tc-cache/cache/deploy/jbossjca-service.xml new file mode 100644 index 000000000..b9f53b280 --- /dev/null +++ b/docker/tc-cache/cache/deploy/jbossjca-service.xml @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + + WorkManager + + 1024 + + 100 + + 60000 + + + + jboss.jca:service=WorkManagerThreadPool + jboss:service=TransactionManager + + + + jboss.jca:service=WorkManager + jboss:service=TransactionManager + + + + -ds.xml + 300:-ds.xml + stylesheets/ConnectionFactoryTemplate.xsl + false + + + + + jboss:service=TransactionManager + + + true + + + + diff --git a/docker/tc-cache/cache/deploy/jmx-console.war/META-INF/MANIFEST.MF b/docker/tc-cache/cache/deploy/jmx-console.war/META-INF/MANIFEST.MF new file mode 100644 index 000000000..aef45cca1 --- /dev/null +++ b/docker/tc-cache/cache/deploy/jmx-console.war/META-INF/MANIFEST.MF @@ -0,0 +1,4 @@ +Manifest-Version: 1.0 +Ant-Version: Apache Ant 1.6.2 +Created-By: 1.5.0_11-b03 (Sun Microsystems Inc.) + diff --git a/docker/tc-cache/cache/deploy/jmx-console.war/WEB-INF/classes/org/jboss/jmx/adaptor/control/AddressPort.class b/docker/tc-cache/cache/deploy/jmx-console.war/WEB-INF/classes/org/jboss/jmx/adaptor/control/AddressPort.class new file mode 100644 index 000000000..3bf30fb15 Binary files /dev/null and b/docker/tc-cache/cache/deploy/jmx-console.war/WEB-INF/classes/org/jboss/jmx/adaptor/control/AddressPort.class differ diff --git a/docker/tc-cache/cache/deploy/jmx-console.war/WEB-INF/classes/org/jboss/jmx/adaptor/control/AttrResultInfo.class b/docker/tc-cache/cache/deploy/jmx-console.war/WEB-INF/classes/org/jboss/jmx/adaptor/control/AttrResultInfo.class new file mode 100644 index 000000000..3ad0e4379 Binary files /dev/null and b/docker/tc-cache/cache/deploy/jmx-console.war/WEB-INF/classes/org/jboss/jmx/adaptor/control/AttrResultInfo.class differ diff --git a/docker/tc-cache/cache/deploy/jmx-console.war/WEB-INF/classes/org/jboss/jmx/adaptor/control/OpResultInfo.class b/docker/tc-cache/cache/deploy/jmx-console.war/WEB-INF/classes/org/jboss/jmx/adaptor/control/OpResultInfo.class new file mode 100644 index 000000000..24b50d348 Binary files /dev/null and b/docker/tc-cache/cache/deploy/jmx-console.war/WEB-INF/classes/org/jboss/jmx/adaptor/control/OpResultInfo.class differ diff --git a/docker/tc-cache/cache/deploy/jmx-console.war/WEB-INF/classes/org/jboss/jmx/adaptor/control/Server.class b/docker/tc-cache/cache/deploy/jmx-console.war/WEB-INF/classes/org/jboss/jmx/adaptor/control/Server.class new file mode 100644 index 000000000..28ba2b3c7 Binary files /dev/null and b/docker/tc-cache/cache/deploy/jmx-console.war/WEB-INF/classes/org/jboss/jmx/adaptor/control/Server.class differ diff --git a/docker/tc-cache/cache/deploy/jmx-console.war/WEB-INF/classes/org/jboss/jmx/adaptor/html/ClusteredConsoleServlet.class b/docker/tc-cache/cache/deploy/jmx-console.war/WEB-INF/classes/org/jboss/jmx/adaptor/html/ClusteredConsoleServlet.class new file mode 100644 index 000000000..82326988d Binary files /dev/null and b/docker/tc-cache/cache/deploy/jmx-console.war/WEB-INF/classes/org/jboss/jmx/adaptor/html/ClusteredConsoleServlet.class differ diff --git a/docker/tc-cache/cache/deploy/jmx-console.war/WEB-INF/classes/org/jboss/jmx/adaptor/html/HtmlAdaptorServlet.class b/docker/tc-cache/cache/deploy/jmx-console.war/WEB-INF/classes/org/jboss/jmx/adaptor/html/HtmlAdaptorServlet.class new file mode 100644 index 000000000..18bf2a835 Binary files /dev/null and b/docker/tc-cache/cache/deploy/jmx-console.war/WEB-INF/classes/org/jboss/jmx/adaptor/html/HtmlAdaptorServlet.class differ diff --git a/docker/tc-cache/cache/deploy/jmx-console.war/WEB-INF/classes/org/jboss/jmx/adaptor/html/JMXOpsAccessControlFilter.class b/docker/tc-cache/cache/deploy/jmx-console.war/WEB-INF/classes/org/jboss/jmx/adaptor/html/JMXOpsAccessControlFilter.class new file mode 100644 index 000000000..81e5ffb9f Binary files /dev/null and b/docker/tc-cache/cache/deploy/jmx-console.war/WEB-INF/classes/org/jboss/jmx/adaptor/html/JMXOpsAccessControlFilter.class differ diff --git a/docker/tc-cache/cache/deploy/jmx-console.war/WEB-INF/classes/org/jboss/jmx/adaptor/model/DomainData.class b/docker/tc-cache/cache/deploy/jmx-console.war/WEB-INF/classes/org/jboss/jmx/adaptor/model/DomainData.class new file mode 100644 index 000000000..520a67beb Binary files /dev/null and b/docker/tc-cache/cache/deploy/jmx-console.war/WEB-INF/classes/org/jboss/jmx/adaptor/model/DomainData.class differ diff --git a/docker/tc-cache/cache/deploy/jmx-console.war/WEB-INF/classes/org/jboss/jmx/adaptor/model/MBeanData.class b/docker/tc-cache/cache/deploy/jmx-console.war/WEB-INF/classes/org/jboss/jmx/adaptor/model/MBeanData.class new file mode 100644 index 000000000..47b9da882 Binary files /dev/null and b/docker/tc-cache/cache/deploy/jmx-console.war/WEB-INF/classes/org/jboss/jmx/adaptor/model/MBeanData.class differ diff --git a/docker/tc-cache/cache/deploy/jmx-console.war/WEB-INF/jboss-web.xml b/docker/tc-cache/cache/deploy/jmx-console.war/WEB-INF/jboss-web.xml new file mode 100644 index 000000000..c0a20c832 --- /dev/null +++ b/docker/tc-cache/cache/deploy/jmx-console.war/WEB-INF/jboss-web.xml @@ -0,0 +1,7 @@ + + + diff --git a/docker/tc-cache/cache/deploy/jmx-console.war/WEB-INF/web.xml b/docker/tc-cache/cache/deploy/jmx-console.war/WEB-INF/web.xml new file mode 100644 index 000000000..3fd3d73d3 --- /dev/null +++ b/docker/tc-cache/cache/deploy/jmx-console.war/WEB-INF/web.xml @@ -0,0 +1,109 @@ + + + + + The standard web descriptor for the html adaptor + + + HtmlAdaptor + org.jboss.jmx.adaptor.html.HtmlAdaptorServlet + + + ClusteredConsoleServlet + org.jboss.jmx.adaptor.html.ClusteredConsoleServlet + + jgProps + UDP(ip_mcast=true;ip_ttl=16;loopback=false;mcast_addr=${jboss.partition.udpGroup:228.1.2.3};mcast_port=${jboss.partition.udpPort:45566}): +org.jboss.jmx.adaptor.control.FindView + + The JGroups protocol stack config + + + + DisplayMBeans + /displayMBeans.jsp + + + InspectMBean + /inspectMBean.jsp + + + DisplayOpResult + /displayOpResult.jsp + + + ClusterView + /cluster/clusterView.jsp + + + + HtmlAdaptor + /HtmlAdaptor + + + ClusteredConsoleServlet + /cluster/ClusteredConsole + + + DisplayMBeans + /DisplayMBeans + + + InspectMBean + /InspectMBean + + + DisplayOpResult + /DisplayOpResult + + + + + + BASIC + JBoss JMX Console + + + + JBossAdmin + + diff --git a/docker/tc-cache/cache/deploy/jmx-console.war/checkJNDI.jsp b/docker/tc-cache/cache/deploy/jmx-console.war/checkJNDI.jsp new file mode 100644 index 000000000..cb874595b --- /dev/null +++ b/docker/tc-cache/cache/deploy/jmx-console.war/checkJNDI.jsp @@ -0,0 +1,112 @@ +<%@page contentType="text/html" + import="java.net.*,java.util.*,javax.naming.*,java.io.*" +%> + + + JBoss JNDI Check + + + + + +
+ + + + +
JBoss + <% + String hostname = "<>"; + try + { + hostname = InetAddress.getLocalHost().getHostName(); + } + catch(IOException e) + { + e.printStackTrace(); + } + %> +

JNDI Checking for host <%= hostname %>

+
+
+ + + + + + + + + + + + + + + + + + + + + +

Test

Result

InitialContext properites + <% + try + { + InitialContext ctx = new InitialContext(); + Hashtable props = ctx.getEnvironment(); + for (Iterator i = props.keySet().iterator(); i.hasNext();) + { + Object key = i.next(); + out.print(""); + } + } + catch (NamingException e) + { + out.print(e.toString()); + } + %> +
"); + out.print(key); + out.print('='); + out.print(props.get(key)); + out.print("
jndi.properties locations + <% + ClassLoader loader = Thread.currentThread().getContextClassLoader(); + for (Enumeration e = loader.getResources("jndi.properties"); e.hasMoreElements();) + { + out.print(""); + } + %> +
"); + out.print(e.nextElement()); + out.print("
Global bindings + <% + try + { + for (Enumeration e = new InitialContext().listBindings(""); e.hasMoreElements();) + { + out.print(""); + } + } + catch (NamingException ignored) {} + %> +
"); + out.print(e.nextElement()); + out.print("
JVM local bindings + <% + try + { + for (Enumeration e = new InitialContext().listBindings("java:"); e.hasMoreElements();) + { + out.print(""); + } + } + catch (NamingException ignored) {} + %> +
"); + out.print(e.nextElement()); + out.print("
+ + diff --git a/docker/tc-cache/cache/deploy/jmx-console.war/cluster/bootstrap.html b/docker/tc-cache/cache/deploy/jmx-console.war/cluster/bootstrap.html new file mode 100644 index 000000000..ef510796d --- /dev/null +++ b/docker/tc-cache/cache/deploy/jmx-console.war/cluster/bootstrap.html @@ -0,0 +1,69 @@ + + + Cluster View Bootstrap + + + + + + + + +

JBoss Cluster Bootstrap

+
+ +The cluster nodes to view need to be specified via some bootstrap mechanism. +This can be done using any of the following methods. + +

Bootstrap Using Naming Discovery

+This determines the cluster entry point by doing an HAJNDI naming service +discovery query. The query may be restricted to a given partition name by +specifying the name in the PartitionName field. +If not specified than the first partition to respond will be choosen. +
+ + + + + + + + + + + + + + + + + + +
PartitionName:
DiscoveryName:
DiscoveryPort:
DiscoveryTimeout:
+
+ +

Bootstrap Using a Hostname

+This determines the cluster entry point(s) by querying the JNDI service +on the indicated server for the available cluster paritition services. +Any cluster to which the server belongs will serve as an entry point for +determining the members of the cluster. To query the server hosting the +jmx-console application use "locahost" for the hostname. +
+ + + + + + + + + + + + +
Hostname:
Port:
+
+ + + + diff --git a/docker/tc-cache/cache/deploy/jmx-console.war/cluster/clusterView.jsp b/docker/tc-cache/cache/deploy/jmx-console.war/cluster/clusterView.jsp new file mode 100644 index 000000000..b638112d0 --- /dev/null +++ b/docker/tc-cache/cache/deploy/jmx-console.war/cluster/clusterView.jsp @@ -0,0 +1,44 @@ +<%@page contentType="text/html" + import="java.net.*,java.io.*" +%> + +Clustered JBoss Management Console + + + + + +
+

Cluster View Bootstrap

+Reinvoke Bootstrap + +

Loaded Clusters

+<% + String partition = (String) request.getAttribute("partition"); +%> +

<%= partition %>

+
    +<% + String[] partitionHosts = (String[]) request.getAttribute("partitionHosts"); + for(int h = 0; h < partitionHosts.length; h ++) + { + String host = partitionHosts[h]; + String hostname = ""; + + try + { + hostname = InetAddress.getByName(host).getHostName(); + } + catch(IOException e) {} + + String hostURL = "http://"+host+":8080/jmx-console//HtmlAdaptor?action=displayMBeans"; +%> +
  • <%= hostname %>
  • +<% + } +%> +
+
+ + + diff --git a/docker/tc-cache/cache/deploy/jmx-console.war/cluster/index.html b/docker/tc-cache/cache/deploy/jmx-console.war/cluster/index.html new file mode 100644 index 000000000..db7217ae7 --- /dev/null +++ b/docker/tc-cache/cache/deploy/jmx-console.war/cluster/index.html @@ -0,0 +1,6 @@ + + + + + A frames enabled browser is required for the cluster view + diff --git a/docker/tc-cache/cache/deploy/jmx-console.war/displayMBeans.jsp b/docker/tc-cache/cache/deploy/jmx-console.war/displayMBeans.jsp new file mode 100644 index 000000000..b26f1516b --- /dev/null +++ b/docker/tc-cache/cache/deploy/jmx-console.war/displayMBeans.jsp @@ -0,0 +1,59 @@ +<%@page contentType="text/html" + import="java.net.*,java.util.*,org.jboss.jmx.adaptor.model.*,java.io.*" +%> + + + JBoss JMX Management Console + + + + + +
+ + + + +
JBoss + <% + String hostname = ""; + try + { + hostname = InetAddress.getLocalHost().getHostName(); + } + catch(IOException e) {} + %> +

JMX Agent View <%= hostname %>

+
+
+
+ObjectName Filter (e.g. "jboss:*", "*:service=invoker,*") :"> +
+
+<% + Iterator mbeans = (Iterator) request.getAttribute("mbeans"); + while( mbeans.hasNext() ) + { + DomainData domainData = (DomainData) mbeans.next(); +%> +

<%= domainData.getDomainName() %>

+
    +<% + MBeanData[] data = domainData.getData(); + for(int d = 0; d < data.length; d ++) + { + String name = data[d].getObjectName().toString(); + String properties = data[d].getNameProperties(); +%> +
  • <%= URLDecoder.decode(properties) %>
  • +<% + } +%> +
+<% + } +%> + + + + diff --git a/docker/tc-cache/cache/deploy/jmx-console.war/displayOpResult.jsp b/docker/tc-cache/cache/deploy/jmx-console.war/displayOpResult.jsp new file mode 100644 index 000000000..3e86a640b --- /dev/null +++ b/docker/tc-cache/cache/deploy/jmx-console.war/displayOpResult.jsp @@ -0,0 +1,74 @@ +<%@page contentType="text/html" + import="java.net.*" +%> + + + Operation Results + + + + + + + + +
+ + + + +
JBoss

JMX MBean Operation Result <%= opResultInfo.name%>()

+ + + + + + + + + + +
Back to Agent View + Back to MBean View + Reinvoke MBean Operation"); +%> +
+ + +
+ +<% + if( opResultInfo.result == null ) + { +%> + Operation completed successfully without a return value. +<% + } + else + { + String opResultString = opResultInfo.result.toString(); + boolean hasPreTag = opResultString.startsWith("
");
+      if( hasPreTag == false )
+         out.println("
");
+      out.println(opResultString);
+      if( hasPreTag == false )
+         out.println("
"); + } +%> + + + + + diff --git a/docker/tc-cache/cache/deploy/jmx-console.war/images/logo.gif b/docker/tc-cache/cache/deploy/jmx-console.war/images/logo.gif new file mode 100644 index 000000000..490090809 Binary files /dev/null and b/docker/tc-cache/cache/deploy/jmx-console.war/images/logo.gif differ diff --git a/docker/tc-cache/cache/deploy/jmx-console.war/index.jsp b/docker/tc-cache/cache/deploy/jmx-console.war/index.jsp new file mode 100644 index 000000000..ca736fcee --- /dev/null +++ b/docker/tc-cache/cache/deploy/jmx-console.war/index.jsp @@ -0,0 +1,2 @@ +<%@page contentType="text/html"%> + diff --git a/docker/tc-cache/cache/deploy/jmx-console.war/inspectMBean.jsp b/docker/tc-cache/cache/deploy/jmx-console.war/inspectMBean.jsp new file mode 100644 index 000000000..b3d06586e --- /dev/null +++ b/docker/tc-cache/cache/deploy/jmx-console.war/inspectMBean.jsp @@ -0,0 +1,331 @@ +<%@page contentType="text/html" + import="java.net.*,java.util.*, + javax.management.*,javax.management.modelmbean.*, + org.jboss.jmx.adaptor.control.Server, + org.jboss.jmx.adaptor.control.AttrResultInfo, + org.jboss.jmx.adaptor.model.*, + java.lang.reflect.Array, + org.jboss.util.propertyeditor.PropertyEditors" +%> +<%! + public String fixDescription(String desc) + { + if (desc == null || desc.equals("")) + { + return "(no description)"; + } + return desc; + } + public String quoteName(String name) + { + String sname = name.replace("\"", """); + sname = name.replace("\'", "'"); + return sname; + } +%> + + + MBean Inspector + + + + + + + +<% + ObjectName objectName = mbeanData.getObjectName(); + String objectNameString = mbeanData.getName(); + String quotedObjectNameString = quoteName(mbeanData.getName()); + MBeanInfo mbeanInfo = mbeanData.getMetaData(); + MBeanAttributeInfo[] attributeInfo = mbeanInfo.getAttributes(); + MBeanOperationInfo[] operationInfo = mbeanInfo.getOperations(); +%> + + +
+ + + + +
JBoss

JMX MBean View

+
    + + + + + + +<% + Hashtable properties = objectName.getKeyPropertyList(); + Iterator it = properties.keySet().iterator(); + while( it.hasNext() ) + { + String key = (String) it.next(); + String value = (String) properties.get( key ); +%> + +<% + } +%> + +
    MBean Name:Domain Name:<%= objectName.getDomain() %>
    <%= key %>: <%= value %>
    MBean Java Class:
    +
+ + + + + +
Back to Agent View + Refresh MBean View
+ +
+

MBean description:

+<%= fixDescription(mbeanInfo.getDescription())%> + +
+

List of MBean attributes:

+ +
+ + + + + + + + + + +<% + boolean hasWriteable = false; + for(int a = 0; a < attributeInfo.length; a ++) + { + MBeanAttributeInfo attrInfo = attributeInfo[a]; + String attrName = attrInfo.getName(); + String attrType = attrInfo.getType(); + AttrResultInfo attrResult = Server.getMBeanAttributeResultInfo(objectNameString, attrInfo); + String attrValue = attrResult.getAsText(); + String access = ""; + if( attrInfo.isReadable() ) + access += "R"; + if( attrInfo.isWritable() ) + { + access += "W"; + hasWriteable = true; + } + String attrDescription = fixDescription(attrInfo.getDescription()); +%> + + + + + + + +<% + } +%> +
NameTypeAccessValueDescription
<%= attrName %><%= attrType %><%= access %> +<% + if( attrInfo.isWritable() ) + { + String readonly = attrResult.editor == null ? "readonly" : ""; + if( attrType.equals("boolean") || attrType.equals("java.lang.Boolean") ) + { + // Boolean true/false radio boxes + Boolean value = attrValue == null || "".equals( attrValue ) ? null : Boolean.valueOf(attrValue); + String trueChecked = (value == Boolean.TRUE ? "checked" : ""); + String falseChecked = (value == Boolean.FALSE ? "checked" : ""); + String naChecked = value == null ? "checked" : ""; +%> + >True + >False +<% + // For wrappers, enable a 'null' selection + if ( attrType.equals( "java.lang.Boolean" ) && PropertyEditors.isNullHandlingEnabled() ) + { +%> + >Null +<% + } + } + else if( attrInfo.isReadable() ) + { // Text fields for read-write string values + String avalue = (attrValue != null ? attrValue : ""); + if( attrType.equals("javax.management.ObjectName") ) + avalue = quoteName(avalue); +%> + > + +<% + } + else + { // Empty text fields for write-only +%> + > +<% + } + } + else + { + if( attrType.equals("[Ljavax.management.ObjectName;") ) + { + // Array of Object Names + ObjectName[] names = (ObjectName[]) Server.getMBeanAttributeObject(objectNameString, attrName); + if( names != null ) + { +%> + +<% + for( int i = 0; i < names.length; i++ ) + { +%> + +<% + } +%> +
+ "><%= ( names[ i ] + "" ) %> +
+<% + } + } + // Array of some objects + else if( attrType.endsWith("[]") || attrType.startsWith("[L") ) + { + Object arrayObject = Server.getMBeanAttributeObject(objectNameString, attrName); + if (arrayObject != null) + { +%> + +<% + for (int i = 0; i < Array.getLength(arrayObject); ++i) + { +%> + +<% + } +%> +
<%=Array.get(arrayObject,i)%>
+<% + } + } + else + { + // Just the value string +%> + <%= attrValue %> +<% + } + } + if( attrType.equals("javax.management.ObjectName") ) + { + // Add a link to the mbean + if( attrValue != null ) + { +%> + View MBean +<% + } + } +%> +
<%= attrDescription%>
+<% if( hasWriteable ) + { +%> + +<% + } +%> +
+ +
+

List of MBean operations:

+<% + for(int a = 0; a < operationInfo.length; a ++) + { + MBeanOperationInfo opInfo = operationInfo[a]; + boolean accept = true; + if (opInfo instanceof ModelMBeanOperationInfo) + { + Descriptor desc = ((ModelMBeanOperationInfo)opInfo).getDescriptor(); + String role = (String)desc.getFieldValue("role"); + if ("getter".equals(role) || "setter".equals(role)) + { + accept = false; + } + } + if (accept) + { + MBeanParameterInfo[] sig = opInfo.getSignature(); +%> +
+ + + +
+

<%= opInfo.getReturnType() + " " + opInfo.getName() + "()" %>

+

<%= fixDescription(opInfo.getDescription())%>

+<% + if( sig.length > 0 ) + { +%> + + + + + + + +<% + for(int p = 0; p < sig.length; p ++) + { + MBeanParameterInfo paramInfo = sig[p]; + String pname = paramInfo.getName(); + String ptype = paramInfo.getType(); + if( pname == null || pname.length() == 0 || pname.equals(ptype) ) + { + pname = "arg"+p; + } +%> + + + + + + +<% + } +%> +
ParamParamTypeParamValueParamDescription
<%= pname %><%= ptype %> +<% + if( ptype.equals("boolean") || ptype.equals("java.lang.Boolean") ) + { + // Boolean true/false radio boxes +%> + True + False +<% + } + else + { +%> + +<% + } +%> + <%= fixDescription(paramInfo.getDescription())%>
+<% + } +%> + +
+<% + } + } +%> + + + + diff --git a/docker/tc-cache/cache/deploy/jmx-console.war/jboss.css b/docker/tc-cache/cache/deploy/jmx-console.war/jboss.css new file mode 100644 index 000000000..bcd853995 --- /dev/null +++ b/docker/tc-cache/cache/deploy/jmx-console.war/jboss.css @@ -0,0 +1,146 @@ +body { + margin: 13px 0px 10px 0px; + background-color: #ffffff; + font-size: 12px; + font-family: verdana, arial, "sans-serif"; + color: #606060; + } +td { + font-size: 12px; + font-family: verdana, arial, "sans-serif"; + color: #606060; + } +input { + font-size: 13px; + font-family: verdana, arial, "sans-serif"; + color: #FF5906; + background-color: #f0f0f0; + border: 1px solid #cccccc; + } +img { + border: 0px; + } +p { + margin: 10px 30px 10px 20px + } +h3 { + color: #FF5906; + font-size: 13px; + font-family: verdana, arial, "sans-serif"; + margin: 10px 30px 10px 20px; + } +h4 { + color: #999999; + font-size: 13px; + font-family: verdana, arial, "sans-serif"; + margin: 10px 30px 10px 20px; + } +table { + border: 0px #999999; + } +a { + text-decoration : none; + } +a:link { + color: #FF5906; + } +a:visited { + color: #FF5906; + } +a:active { + background-color:transparent; + } +a:hover { + text-decoration : underline; + } +a.soft, a.soft:visited, a.soft:link { + TEXT-DECORATION: none; + COLOR: #000000; + } +a.soft:hover { + TEXT-DECORATION: underline; + BACKGROUND-COLOR: transparent; + COLOR: #000000 + } +#header { + background-color: #FF7A22; + background-image: url("header_bg.jpg"); + background-repeat: no-repeat; + background-position: 226px 0px; + width: 100%; + height: 80px; + } +#header #banner { + float: right; + margin: 8px 5px 0px 0px; + } +#logo { + position: absolute; + top: 4px; + left: 4px; + z-index: 200; +} +#services { + position: absolute; + top: 16px; + right: 10px; + z-index: 200; +} +#filter { + position: absolute; + top: 65px; + right: 30px; + z-index: 220; +} +#filter_label { + position: absolute; + top: 61px; + right: 215px; + z-index: 220; +} +#apply { + position: absolute; + top: -5px; + right: -30px; + z-index: 220; + border: none; +} +#navigation_bar { + background-color: #f0f0f0; + border-bottom: 1px dotted #999999; + height: 20px; + } +#separator_bar { + background-color: #ffffff; + border-bottom: 1px dotted #999999; + height: 20px; + } +#footer { + clear: both; + border-top: 1px dotted #999999; + } +#footer_bar { + height: 20px; + width: 100%; + background-color: #FF7A22; + } +.attribute_link a { + color: #606060; + text-decoration: none; + } +.attribute_link a:hover { + color: #606060; + border-bottom: 1px dotted #999999; + } +.hide { + display: none; + } +.spacer { + clear: both; + } +.spacer hr { + display: none; + } +.center { + text-align: center; + } diff --git a/docker/tc-cache/cache/deploy/jmx-console.war/style_master.css b/docker/tc-cache/cache/deploy/jmx-console.war/style_master.css new file mode 100644 index 000000000..7a9c7f5ac --- /dev/null +++ b/docker/tc-cache/cache/deploy/jmx-console.war/style_master.css @@ -0,0 +1,64 @@ +BODY { + font-family: Verdana, Arial, Helvetica, sans-serif; + font-size: 14px; + background-color : White; +} + +H1{ + font-family: Verdana, Arial, Helvetica, sans-serif; + font-size: 25px; + font-weight: bold; + color: #000099} +H2 { + font-family: Verdana, Arial, Helvetica, sans-serif; + font-size: 20px; + font-weight: bold; + color: #000000 +} +H3 { + font-family: Verdana, Arial, Helvetica, sans-serif; + font-size: 17px; + font-weight: bold; + color: #000000 +} +TH { + background-color : #000099; + color: #DEB887; + font-weight: bold; +}.bg_table { + background-color : #DEB887; +} +}.bg_cell{ + background-color : #ffffff; +} +A:ACTIVE { + font-family: Arial, Helvetica, sans-serif; + font-size: 14px; + color:Red; + background-color: #DEB887; + text-decoration : underline; + font-weight:bold; +} + A:HOVER { + font-family:Arial, Helvetica, sans-serif; + font-size: 14px; + color:Red; + text-decoration : underline; + font-weight:bold; +} + A:LINK { + font-family: Arial, Helvetica, sans-serif; + font-size: 14px; + color:#000099; + text-decoration : underline; + font-weight:bold; +} + A:VISITED { + font-family: Arial, Helvetica, sans-serif; + font-size: 14px; + color:Purple; + text-decoration : underline; + font-weight:bold; +} + + diff --git a/docker/tc-cache/cache/deploy/properties-service.xml b/docker/tc-cache/cache/deploy/properties-service.xml new file mode 100644 index 000000000..2566b018e --- /dev/null +++ b/docker/tc-cache/cache/deploy/properties-service.xml @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docker/tc-cache/cache/deploy/treecache-service.xml b/docker/tc-cache/cache/deploy/treecache-service.xml new file mode 100644 index 000000000..93b519401 --- /dev/null +++ b/docker/tc-cache/cache/deploy/treecache-service.xml @@ -0,0 +1,187 @@ + + + + + + + + + + + + + + + + + + + + + + + + + jboss:service=Naming + jboss:service=TransactionManager + + org.jboss.cache.JBossTransactionManagerLookup + + + + + + REPEATABLE_READ + + + LOCAL + + + TreeCache-Cluster + + + + + + + + + + + + + + + + + + + + + + + + + 20000 + + + 10000 + + + 15000 + + + + + + + 5 + + + 1000 + 0 + + 86400 + + + 0 + 10000 + + 86400 + + + 10000 + 0 + 3600 + + + 10000 + 0 + 1800 + + + 10000 + 0 + 900 + + + 10000 + 0 + 10800 + + + + + + + + jboss:service=invoker,type=jrmp + jboss.cache:service=TreeCache + TCCache + true + org.jboss.cache.TreeCacheMBean + + + org.jboss.proxy.ClientMethodInterceptor + org.jboss.proxy.SecurityInterceptor + org.jboss.invocation.InvokerInterceptor + + + jboss:service=invoker,type=jrmp + jboss.cache:service=TreeCache + + + + + diff --git a/docker/tc-cache/start-jboss.sh b/docker/tc-cache/start-jboss.sh new file mode 100755 index 000000000..dda130fad --- /dev/null +++ b/docker/tc-cache/start-jboss.sh @@ -0,0 +1,4 @@ +#!/bin/bash + +# need to bind to an address accessible outside +$JAVA_HOME/bin/java -server -Djava.endorsed.dirs=$JBOSS_HOME/lib/endorsed -classpath $JBOSS_HOME/bin/run.jar:$JAVA_HOME/lib/tools.jar org.jboss.Main -c cache -b `hostname --ip-address` diff --git a/lib/third_party/aspclient/aopalliance-repackaged-2.4.0-b31.jar b/lib/third_party/aspclient/aopalliance-repackaged-2.4.0-b31.jar new file mode 100644 index 000000000..7f59718c8 Binary files /dev/null and b/lib/third_party/aspclient/aopalliance-repackaged-2.4.0-b31.jar differ diff --git a/lib/third_party/aspclient/asp-client.jar b/lib/third_party/aspclient/asp-client.jar new file mode 100644 index 000000000..43a8d9215 Binary files /dev/null and b/lib/third_party/aspclient/asp-client.jar differ diff --git a/lib/third_party/aspclient/hamcrest-core-1.3.jar b/lib/third_party/aspclient/hamcrest-core-1.3.jar new file mode 100644 index 000000000..9d5fe16e3 Binary files /dev/null and b/lib/third_party/aspclient/hamcrest-core-1.3.jar differ diff --git a/lib/third_party/aspclient/hk2-api-2.4.0-b31.jar b/lib/third_party/aspclient/hk2-api-2.4.0-b31.jar new file mode 100644 index 000000000..6a70ef3c1 Binary files /dev/null and b/lib/third_party/aspclient/hk2-api-2.4.0-b31.jar differ diff --git a/lib/third_party/aspclient/hk2-locator-2.4.0-b31.jar b/lib/third_party/aspclient/hk2-locator-2.4.0-b31.jar new file mode 100644 index 000000000..1f38d250d Binary files /dev/null and b/lib/third_party/aspclient/hk2-locator-2.4.0-b31.jar differ diff --git a/lib/third_party/aspclient/hk2-utils-2.4.0-b31.jar b/lib/third_party/aspclient/hk2-utils-2.4.0-b31.jar new file mode 100644 index 000000000..211ce37b1 Binary files /dev/null and b/lib/third_party/aspclient/hk2-utils-2.4.0-b31.jar differ diff --git a/lib/third_party/aspclient/jackson-annotations-2.6.0.jar b/lib/third_party/aspclient/jackson-annotations-2.6.0.jar new file mode 100644 index 000000000..0a18c3419 Binary files /dev/null and b/lib/third_party/aspclient/jackson-annotations-2.6.0.jar differ diff --git a/lib/third_party/aspclient/jackson-core-2.6.3.jar b/lib/third_party/aspclient/jackson-core-2.6.3.jar new file mode 100644 index 000000000..e1ec916dd Binary files /dev/null and b/lib/third_party/aspclient/jackson-core-2.6.3.jar differ diff --git a/lib/third_party/aspclient/jackson-databind-2.6.3.jar b/lib/third_party/aspclient/jackson-databind-2.6.3.jar new file mode 100644 index 000000000..e60f9fe1a Binary files /dev/null and b/lib/third_party/aspclient/jackson-databind-2.6.3.jar differ diff --git a/lib/third_party/aspclient/jackson-datatype-joda-2.6.3.jar b/lib/third_party/aspclient/jackson-datatype-joda-2.6.3.jar new file mode 100644 index 000000000..0c7e3edf4 Binary files /dev/null and b/lib/third_party/aspclient/jackson-datatype-joda-2.6.3.jar differ diff --git a/lib/third_party/aspclient/jackson-jaxrs-base-2.5.4.jar b/lib/third_party/aspclient/jackson-jaxrs-base-2.5.4.jar new file mode 100644 index 000000000..7ff836723 Binary files /dev/null and b/lib/third_party/aspclient/jackson-jaxrs-base-2.5.4.jar differ diff --git a/lib/third_party/aspclient/jackson-jaxrs-json-provider-2.5.4.jar b/lib/third_party/aspclient/jackson-jaxrs-json-provider-2.5.4.jar new file mode 100644 index 000000000..0ff44148a Binary files /dev/null and b/lib/third_party/aspclient/jackson-jaxrs-json-provider-2.5.4.jar differ diff --git a/lib/third_party/aspclient/jackson-module-jaxb-annotations-2.5.4.jar b/lib/third_party/aspclient/jackson-module-jaxb-annotations-2.5.4.jar new file mode 100644 index 000000000..49ab41c38 Binary files /dev/null and b/lib/third_party/aspclient/jackson-module-jaxb-annotations-2.5.4.jar differ diff --git a/lib/third_party/aspclient/javassist-3.18.1-GA.jar b/lib/third_party/aspclient/javassist-3.18.1-GA.jar new file mode 100644 index 000000000..d5f19ac59 Binary files /dev/null and b/lib/third_party/aspclient/javassist-3.18.1-GA.jar differ diff --git a/lib/third_party/aspclient/javax.annotation-api-1.2.jar b/lib/third_party/aspclient/javax.annotation-api-1.2.jar new file mode 100644 index 000000000..9ab39ffa4 Binary files /dev/null and b/lib/third_party/aspclient/javax.annotation-api-1.2.jar differ diff --git a/lib/third_party/aspclient/javax.inject-2.4.0-b31.jar b/lib/third_party/aspclient/javax.inject-2.4.0-b31.jar new file mode 100644 index 000000000..1f60d98a7 Binary files /dev/null and b/lib/third_party/aspclient/javax.inject-2.4.0-b31.jar differ diff --git a/lib/third_party/aspclient/javax.ws.rs-api-2.0.1.jar b/lib/third_party/aspclient/javax.ws.rs-api-2.0.1.jar new file mode 100644 index 000000000..7eb68b4a0 Binary files /dev/null and b/lib/third_party/aspclient/javax.ws.rs-api-2.0.1.jar differ diff --git a/lib/third_party/aspclient/jersey-client-2.22.1.jar b/lib/third_party/aspclient/jersey-client-2.22.1.jar new file mode 100644 index 000000000..687843e16 Binary files /dev/null and b/lib/third_party/aspclient/jersey-client-2.22.1.jar differ diff --git a/lib/third_party/aspclient/jersey-common-2.22.1.jar b/lib/third_party/aspclient/jersey-common-2.22.1.jar new file mode 100644 index 000000000..9ee53873d Binary files /dev/null and b/lib/third_party/aspclient/jersey-common-2.22.1.jar differ diff --git a/lib/third_party/aspclient/jersey-entity-filtering-2.22.1.jar b/lib/third_party/aspclient/jersey-entity-filtering-2.22.1.jar new file mode 100644 index 000000000..21982809f Binary files /dev/null and b/lib/third_party/aspclient/jersey-entity-filtering-2.22.1.jar differ diff --git a/lib/third_party/aspclient/jersey-guava-2.22.1.jar b/lib/third_party/aspclient/jersey-guava-2.22.1.jar new file mode 100644 index 000000000..70f3a0761 Binary files /dev/null and b/lib/third_party/aspclient/jersey-guava-2.22.1.jar differ diff --git a/lib/third_party/aspclient/jersey-media-json-jackson-2.22.1.jar b/lib/third_party/aspclient/jersey-media-json-jackson-2.22.1.jar new file mode 100644 index 000000000..f8818db2f Binary files /dev/null and b/lib/third_party/aspclient/jersey-media-json-jackson-2.22.1.jar differ diff --git a/lib/third_party/aspclient/jersey-media-multipart-2.19.jar b/lib/third_party/aspclient/jersey-media-multipart-2.19.jar new file mode 100644 index 000000000..a79037f22 Binary files /dev/null and b/lib/third_party/aspclient/jersey-media-multipart-2.19.jar differ diff --git a/lib/third_party/aspclient/joda-time-2.2.jar b/lib/third_party/aspclient/joda-time-2.2.jar new file mode 100644 index 000000000..69fa92409 Binary files /dev/null and b/lib/third_party/aspclient/joda-time-2.2.jar differ diff --git a/lib/third_party/aspclient/junit-4.11.jar b/lib/third_party/aspclient/junit-4.11.jar new file mode 100644 index 000000000..aaf744484 Binary files /dev/null and b/lib/third_party/aspclient/junit-4.11.jar differ diff --git a/lib/third_party/aspclient/mimepull-1.9.5.jar b/lib/third_party/aspclient/mimepull-1.9.5.jar new file mode 100644 index 000000000..667fff3b5 Binary files /dev/null and b/lib/third_party/aspclient/mimepull-1.9.5.jar differ diff --git a/lib/third_party/aspclient/osgi-resource-locator-1.0.1.jar b/lib/third_party/aspclient/osgi-resource-locator-1.0.1.jar new file mode 100644 index 000000000..bd6aa17eb Binary files /dev/null and b/lib/third_party/aspclient/osgi-resource-locator-1.0.1.jar differ diff --git a/lib/third_party/aspclient/slf4j-api-1.7.13.jar b/lib/third_party/aspclient/slf4j-api-1.7.13.jar new file mode 100644 index 000000000..f07884ee7 Binary files /dev/null and b/lib/third_party/aspclient/slf4j-api-1.7.13.jar differ diff --git a/lib/third_party/aspclient/slf4j-simple-1.7.13.jar b/lib/third_party/aspclient/slf4j-simple-1.7.13.jar new file mode 100644 index 000000000..343234d7c Binary files /dev/null and b/lib/third_party/aspclient/slf4j-simple-1.7.13.jar differ diff --git a/lib/third_party/cxf/aopalliance-1.0.jar b/lib/third_party/cxf/aopalliance-1.0.jar deleted file mode 100644 index 578b1a0c3..000000000 Binary files a/lib/third_party/cxf/aopalliance-1.0.jar and /dev/null differ diff --git a/lib/third_party/cxf/cxf-2.6.4.jar b/lib/third_party/cxf/cxf-2.6.4.jar deleted file mode 100644 index ab1398027..000000000 Binary files a/lib/third_party/cxf/cxf-2.6.4.jar and /dev/null differ diff --git a/lib/third_party/cxf/geronimo-annotation_1.0_spec-1.1.1.jar b/lib/third_party/cxf/geronimo-annotation_1.0_spec-1.1.1.jar deleted file mode 100644 index 2cdc01be7..000000000 Binary files a/lib/third_party/cxf/geronimo-annotation_1.0_spec-1.1.1.jar and /dev/null differ diff --git a/lib/third_party/cxf/geronimo-jaxws_2.2_spec-1.1.jar b/lib/third_party/cxf/geronimo-jaxws_2.2_spec-1.1.jar deleted file mode 100644 index 1c1c5dfde..000000000 Binary files a/lib/third_party/cxf/geronimo-jaxws_2.2_spec-1.1.jar and /dev/null differ diff --git a/lib/third_party/cxf/neethi-3.0.1.jar b/lib/third_party/cxf/neethi-3.0.1.jar deleted file mode 100644 index a6c1b1a94..000000000 Binary files a/lib/third_party/cxf/neethi-3.0.1.jar and /dev/null differ diff --git a/scorecard_tool/build.xml b/scorecard_tool/build.xml index 4e6667089..e826d3a22 100644 --- a/scorecard_tool/build.xml +++ b/scorecard_tool/build.xml @@ -16,7 +16,7 @@ - diff --git a/scorecard_tool/grails-app/conf/BuildConfig.groovy b/scorecard_tool/grails-app/conf/BuildConfig.groovy index d281e58d5..935f87fa5 100644 --- a/scorecard_tool/grails-app/conf/BuildConfig.groovy +++ b/scorecard_tool/grails-app/conf/BuildConfig.groovy @@ -10,7 +10,7 @@ grails.project.dependency.resolution = { } log "warn" // log level of Ivy resolver, either 'error', 'warn', 'info', 'debug' or 'verbose' repositories { - grailsPlugins() + //grailsPlugins() grailsHome() grailsCentral() @@ -18,6 +18,8 @@ grails.project.dependency.resolution = { // from public Maven repositories //mavenLocal() //mavenCentral() + mavenRepo "http://repo.grails.org/grails/plugins" + mavenRepo "http://repo.grails.org/grails/repo" //mavenRepo "http://snapshots.repository.codehaus.org" //mavenRepo "http://repository.codehaus.org" //mavenRepo "http://download.java.net/maven/2/" diff --git a/scorecard_tool/grails-app/conf/DataSource.groovy b/scorecard_tool/grails-app/conf/DataSource.groovy index 500e97523..5b2b3fe2c 100644 --- a/scorecard_tool/grails-app/conf/DataSource.groovy +++ b/scorecard_tool/grails-app/conf/DataSource.groovy @@ -17,9 +17,9 @@ environments { // dbCreate = "create-drop" driverClassName = "com.informix.jdbc.IfxDriver" - url = "jdbc:informix-sqli://localhost:2021/tcs_catalog:INFORMIXSERVER=informixoltp_tcp;DB_LOCALE=en_us.utf8" - username = "informix" - password = "1nf0rm1x" + url = "jdbc:informix-sqli://informixdb:2020/tcs_catalog:INFORMIXSERVER=informixoltp_tcp;DB_LOCALE=en_us.utf8" + username = "coder" + password = "Qn8TZxFFD77tzQwc" } } test { @@ -33,9 +33,9 @@ environments { production { dataSource { driverClassName = "com.informix.jdbc.IfxDriver" - url = "jdbc:informix-sqli://localhost:2021/tcs_catalog:INFORMIXSERVER=informixoltp_tcp;DB_LOCALE=en_us.utf8" - username = "informix" - password = "1nf0rm1x" + url = "jdbc:informix-sqli://informixdb:2020/tcs_catalog:INFORMIXSERVER=informixoltp_tcp;DB_LOCALE=en_us.utf8" + username = "coder" + password = "Qn8TZxFFD77tzQwc" } } } diff --git a/scorecard_tool/ivysettings.xml b/scorecard_tool/ivysettings.xml index c8259d1b6..22812d519 100644 --- a/scorecard_tool/ivysettings.xml +++ b/scorecard_tool/ivysettings.xml @@ -6,8 +6,12 @@ + + + diff --git a/services/project_service/build-dependencies.xml b/services/project_service/build-dependencies.xml index b6d09c21e..d4eeb1451 100644 --- a/services/project_service/build-dependencies.xml +++ b/services/project_service/build-dependencies.xml @@ -1,102 +1,102 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/java/main/com/topcoder/direct/services/view/action/analytics/longcontest/services/impl/MarathonMatchAnalyticsServiceImpl.java b/src/java/main/com/topcoder/direct/services/view/action/analytics/longcontest/services/impl/MarathonMatchAnalyticsServiceImpl.java index 5bf08bf97..5f8617813 100644 --- a/src/java/main/com/topcoder/direct/services/view/action/analytics/longcontest/services/impl/MarathonMatchAnalyticsServiceImpl.java +++ b/src/java/main/com/topcoder/direct/services/view/action/analytics/longcontest/services/impl/MarathonMatchAnalyticsServiceImpl.java @@ -3,12 +3,8 @@ */ package com.topcoder.direct.services.view.action.analytics.longcontest.services.impl; -import com.topcoder.commons.utils.LoggingWrapperUtility; -import com.topcoder.commons.utils.ValidationUtility; -import com.topcoder.direct.services.view.action.analytics.longcontest.services.MarathonMatchAnalyticsService; import com.topcoder.direct.services.view.action.analytics.longcontest.services.MarathonMatchAnalyticsServiceException; -import com.topcoder.util.log.Log; -import com.topcoder.util.log.LogManager; +import com.topcoder.direct.services.view.action.analytics.longcontest.services.MarathonMatchAnalyticsService; import com.topcoder.web.tc.rest.longcontest.resources.CompetitorResource; import com.topcoder.web.tc.rest.longcontest.resources.MarathonMatchDetailsResource; import com.topcoder.web.tc.rest.longcontest.resources.MarathonMatchItemResource; @@ -16,22 +12,6 @@ import com.topcoder.web.tc.rest.longcontest.resources.SearchResult; import com.topcoder.web.tc.rest.longcontest.resources.SubmissionResource; import com.topcoder.web.tc.rest.longcontest.resources.SystemTestResourceWrapper; -import org.apache.commons.io.IOUtils; -import org.apache.cxf.jaxrs.client.WebClient; -import org.apache.cxf.rs.security.oauth2.client.OAuthClientUtils; -import org.apache.cxf.rs.security.oauth2.common.ClientAccessToken; -import org.apache.cxf.rs.security.oauth2.utils.OAuthConstants; -import org.codehaus.jackson.map.DeserializationConfig; -import org.codehaus.jackson.map.ObjectMapper; -import org.codehaus.jackson.type.TypeReference; - -import javax.ws.rs.core.Response; -import java.io.IOException; -import java.io.InputStream; -import java.text.DateFormat; -import java.text.SimpleDateFormat; -import java.util.HashMap; -import java.util.Map; /** * The implementation of MarathonMatchAnalyticsService interface, it will used to call the remote rest service. @@ -80,6 +60,7 @@ * @since 1.0 (PoC Assembly - TopCoder Cockpit - Tracking Marathon Matches Progress) * @version 1.3 */ +@Deprecated public class MarathonMatchAnalyticsServiceImpl implements MarathonMatchAnalyticsService { /** @@ -116,11 +97,6 @@ public class MarathonMatchAnalyticsServiceImpl implements MarathonMatchAnalytics */ private static final String HANDLE = "{handle}"; - /** - * Log instance. - */ - private Log logger = LogManager.getLog(CLASS_NAME); - /** * Represent the base url of the remote rest service. */ @@ -162,11 +138,6 @@ public class MarathonMatchAnalyticsServiceImpl implements MarathonMatchAnalytics */ private String getSystemTestsResultsEndPointUrl; - /** - * The data format used to format date string from rest response. - */ - private DateFormat dateFormat = new SimpleDateFormat("MM.dd.yyyy HH:mm z"); - /** * Represent the client id. */ @@ -186,44 +157,6 @@ public class MarathonMatchAnalyticsServiceImpl implements MarathonMatchAnalytics * Check the initialization of bean instance. */ public void checkInit() { - final String signature = CLASS_NAME + "#checkInit()"; - try { - getMMBasicInfoEndPointUrl = fixUrl("getMMBasicInfoEndPointUrl", getMMBasicInfoEndPointUrl); - getAllMMSubmissionsEndPointUrl = fixUrl("getAllMMSubmissionsEndPointUrl", getAllMMSubmissionsEndPointUrl); - getMMRegistrantsEndPointUrl = fixUrl("getMMRegistrantsEndPointUrl", getMMRegistrantsEndPointUrl); - getMatchResultsEndPointUrl = fixUrl("getMatchResultsEndPointUrl", getMatchResultsEndPointUrl); - getCompetitorDetailsEndPointUrl = - fixUrl("getCompetitorDetailsEndPointUrl", getCompetitorDetailsEndPointUrl); - getSystemTestsResultsEndPointUrl = - fixUrl("getSystemTestsResultsEndPointUrl", getSystemTestsResultsEndPointUrl); - remoteServiceBaseUrl = fixUrl("remoteServiceBaseUrl", remoteServiceBaseUrl); - - ValidationUtility.checkNotNullNorEmptyAfterTrimming(clientId, "clientId", IllegalArgumentException.class); - ValidationUtility.checkNotNullNorEmptyAfterTrimming(clientSecret, - "clientSecret", IllegalArgumentException.class); - ValidationUtility.checkNotNullNorEmptyAfterTrimming(apiKey, "apiKey", IllegalArgumentException.class); - } catch (IllegalArgumentException iae) { - throw LoggingWrapperUtility.logException(logger, signature, iae); - } - } - - /** - * Check the url whether start with '/'. If it's not fix it. - * If the url is fine, just return them back. - * - * @param urlName the name of the url. - * @param value the url value. - * @return the fixed value. - */ - private String fixUrl(String urlName, String value) { - if(value == null || value.trim().length() == 0) { - throw new IllegalArgumentException("The " + urlName + " should not be null nor empty"); - } - value = value.trim(); - if(!value.startsWith("/") && !value.startsWith("http")) { - value = "/" + value.trim(); - } - return value; } /** @@ -237,39 +170,7 @@ private String fixUrl(String urlName, String value) { */ public MarathonMatchDetailsResource getMarathonMatchDetails(long roundId, String groupType, String accessToken) throws MarathonMatchAnalyticsServiceException{ - final String signature = CLASS_NAME + "#getMarathonMatchDetails(roundId, groupType, accessToken)"; - try { - LoggingWrapperUtility.logEntrance(logger, signature, new String[] {"roundId", "groupType", "accessToken"}, - new Object[] {roundId, groupType, accessToken}); - - ValidationUtility.checkPositive(roundId, "roundId", IllegalArgumentException.class); - ValidationUtility.checkNotNullNorEmptyAfterTrimming(groupType, "groupType", IllegalArgumentException.class); - ValidationUtility.checkNotNullNorEmptyAfterTrimming(accessToken, "accessToken", - IllegalArgumentException.class); - - String jsonResult = callRestService(getMMBasicInfoEndPointUrl, - createParameterMap(new String[] {"groupType"}, new String[] {groupType}), - createParameterMap(new String[] {ROUND_ID}, new String[] {String.valueOf(roundId)}), - accessToken); - - ObjectMapper mapper = createObjectMapper(); - - MarathonMatchDetailsResource result = - mapper.readValue(jsonResult.getBytes(), new TypeReference() {}); - - LoggingWrapperUtility.logExit(logger, signature, new Object[] {result}); - - return result; - } catch (IllegalArgumentException iae) { - throw LoggingWrapperUtility.logException(logger, signature, - new MarathonMatchAnalyticsServiceException("The parameter is invalid.", iae)); - } catch (MarathonMatchAnalyticsServiceException e) { - LoggingWrapperUtility.logException(logger, signature, e); - throw e; - } catch (IOException ioe) { - LoggingWrapperUtility.logException(logger, signature, ioe); - throw new MarathonMatchAnalyticsServiceException("Error occurred when process json string.", ioe); - } + throw new MarathonMatchAnalyticsServiceException("not implemented"); } /** @@ -282,41 +183,7 @@ public MarathonMatchDetailsResource getMarathonMatchDetails(long roundId, String */ public SearchResult getRegistrants(long roundId, String accessToken) throws MarathonMatchAnalyticsServiceException { - final String signature = CLASS_NAME - + "#getRegistrants(roundId, accessToken)"; - try { - LoggingWrapperUtility.logEntrance(logger, signature, - new String[] {"roundId", "accessToken"}, - new Object[] {roundId, accessToken}); - - ValidationUtility.checkPositive(roundId, "roundId", IllegalArgumentException.class); - ValidationUtility.checkNotNullNorEmptyAfterTrimming(accessToken, "accessToken", - IllegalArgumentException.class); - - String jsonResult = callRestService(getMMRegistrantsEndPointUrl, - createParameterMap(new String[] {"pageSize", "pageNumber", "sortingOrder", "sortingField"}, - new String[] {DEFAULT_PAGE_SIZE, DEFAULT_PAGE_NUMBER, DEFAULT_SORTING_ORDER, "rating"}), - createParameterMap(new String[] {ROUND_ID}, new String[] {String.valueOf(roundId)}), - accessToken); - - ObjectMapper mapper = createObjectMapper(); - - SearchResult result = - mapper.readValue(jsonResult.getBytes(), new TypeReference>() {}); - - LoggingWrapperUtility.logExit(logger, signature, new Object[] {result}); - - return result; - } catch (IllegalArgumentException iae) { - throw LoggingWrapperUtility.logException(logger, signature, - new MarathonMatchAnalyticsServiceException("The parameter is invalid.", iae)); - } catch (MarathonMatchAnalyticsServiceException e) { - LoggingWrapperUtility.logException(logger, signature, e); - throw e; - } catch (IOException e) { - LoggingWrapperUtility.logException(logger, signature, e); - throw new MarathonMatchAnalyticsServiceException("Error occurred when process json string.", e); - } + throw new MarathonMatchAnalyticsServiceException("not implemented"); } /** @@ -337,42 +204,7 @@ public SearchResult getRegistrants(long roundId, public SearchResult getCompetitorSubmissionsHistory(long roundId, String handle, int pageSize, int pageNumber, String sortingOrder, String sortingField, String accessToken) throws MarathonMatchAnalyticsServiceException { - final String signature = CLASS_NAME + - "#getCompetitorSubmissionsHistory(long roundId, String handle, int pageSize, int pageNumber, " + - "String sortingOrder, String sortingField, String accessToken)"; - try { - LoggingWrapperUtility.logEntrance(logger, signature, - new String[] {"roundId", "handle", "pageSize", "pageNumber", "sortingOrder", "sortingField", - "accessToken"}, - new Object[] {roundId, handle, pageSize, pageNumber, sortingOrder, sortingField, accessToken}); - ValidationUtility.checkPositive(roundId, "roundId", IllegalArgumentException.class); - ValidationUtility.checkNotNullNorEmptyAfterTrimming(handle, "handle", IllegalArgumentException.class); - ValidationUtility.checkPositive(pageSize, "pageSize", IllegalArgumentException.class); - ValidationUtility.checkPositive(pageNumber, "pageNumber", IllegalArgumentException.class); - ValidationUtility.checkNotNullNorEmptyAfterTrimming(accessToken, "accessToken", - IllegalArgumentException.class); - - String jsonResult = callRestService(getAllMMSubmissionsEndPointUrl, - createParameterMap(new String[] {"pageSize", "pageNumber", "sortingOrder", "sortingField"}, - new String[] {String.valueOf(pageSize), String.valueOf(pageNumber), sortingOrder, - sortingField}), - createParameterMap(new String[] {ROUND_ID, HANDLE}, new String[] {String.valueOf(roundId), handle}), - accessToken); - - ObjectMapper mapper = createObjectMapper(); - - SearchResult result = - mapper.readValue(jsonResult.getBytes(), new TypeReference>() {}); - - LoggingWrapperUtility.logExit(logger, signature, new Object[] {result}); - return result; - } catch (IllegalArgumentException iae) { - throw LoggingWrapperUtility.logException(logger, signature, - new MarathonMatchAnalyticsServiceException("The parameter is invalid.", iae)); - } catch (IOException e) { - throw LoggingWrapperUtility.logException(logger, signature, - new MarathonMatchAnalyticsServiceException("Error occurred when process json string.", e)); - } + throw new MarathonMatchAnalyticsServiceException("not implemented"); } /** @@ -395,46 +227,7 @@ public SearchResult getCompetitorSubmissionsHistory(long rou public SearchResult getMarathonMatchListings(String type, String date, String projectId, int pageSize, int pageNumber, String sortingOrder, String sortingField, String accessToken) throws MarathonMatchAnalyticsServiceException { - final String signature = CLASS_NAME + "#getMarathonMatchListings(type, date, project, pageSize, pageNumber, " + - "sortingOrder, sortingField, accessToken)"; - try { - LoggingWrapperUtility.logEntrance(logger, signature, - new String[]{"type", "date", "projectId", "pageSize", "pageNumber", "sortingOrder", "sortingField", - "accessToken"}, - new Object[]{type, date, projectId, pageSize, pageNumber, sortingOrder, sortingField, accessToken}); - ValidationUtility.checkNotNullNorEmptyAfterTrimming(type, "type", IllegalArgumentException.class); - ValidationUtility.checkPositive(pageSize, "pageSize", IllegalArgumentException.class); - ValidationUtility.checkPositive(pageNumber, "pageNumber", IllegalArgumentException.class); - ValidationUtility.checkNotNullNorEmptyAfterTrimming(accessToken, "accessToken", - IllegalArgumentException.class); - - String jsonResult = callRestService(getMarathonMatchListingsEndPointUrl, - createParameterMap(new String[] {"type", "date", "project", "pageSize", "pageNumber", - "sortingOrder", "sortingField"}, - new String[] {type, date, projectId, String.valueOf(pageSize), String.valueOf(pageNumber), - sortingOrder, sortingField}), - createParameterMap(null, null), - accessToken); - ObjectMapper mapper = createObjectMapper(); - - SearchResult result = - mapper.readValue(jsonResult.getBytes(), - new TypeReference>() { - }); - - LoggingWrapperUtility.logExit(logger, signature, new Object[] {result}); - - return result; - } catch (IllegalArgumentException iae) { - throw LoggingWrapperUtility.logException(logger, signature, - new MarathonMatchAnalyticsServiceException("The parameter is invalid.", iae)); - } catch (MarathonMatchAnalyticsServiceException e) { - LoggingWrapperUtility.logException(logger, signature, e); - throw e; - } catch (IOException e) { - throw LoggingWrapperUtility.logException(logger, signature, - new MarathonMatchAnalyticsServiceException("Error occurred when process json string.", e)); - } + throw new MarathonMatchAnalyticsServiceException("not implemented"); } /** @@ -454,43 +247,7 @@ public SearchResult getMarathonMatchListings(String t public SearchResult getMatchResults(long roundId, int pageSize, int pageNumber, String sortingOrder, String sortingField, String accessToken) throws MarathonMatchAnalyticsServiceException { - final String signature = CLASS_NAME + "#getMatchResults(roundId, pageSize, pageNumber, sortingOrder, " + - "sortingField, accessToken)"; - try { - LoggingWrapperUtility.logEntrance(logger, signature, - new String[] {"roundId", "pageSize", "pageNumber", "sortingOrder", "sortingField", "accessToken"}, - new Object[] {roundId, pageSize, pageNumber, sortingOrder, sortingField, accessToken}); - ValidationUtility.checkPositive(roundId, "roundId", IllegalArgumentException.class); - ValidationUtility.checkPositive(pageSize, "pageSize", IllegalArgumentException.class); - ValidationUtility.checkPositive(pageNumber, "pageNumber", IllegalArgumentException.class); - ValidationUtility.checkNotNullNorEmptyAfterTrimming(accessToken, "accessToken", - IllegalArgumentException.class); - - String jsonResult = callRestService(getMatchResultsEndPointUrl, - createParameterMap(new String[] {"pageSize", "pageNumber", "sortingOrder", "sortingField"}, - new String[] {String.valueOf(pageSize), String.valueOf(pageNumber), sortingOrder, - sortingField}), - createParameterMap(new String[] {ROUND_ID}, new String[] {String.valueOf(roundId)}), - accessToken); - - ObjectMapper mapper = createObjectMapper(); - - SearchResult result = - mapper.readValue(jsonResult.getBytes(), new TypeReference>() {}); - - LoggingWrapperUtility.logExit(logger, signature, new Object[] {result}); - - return result; - } catch (IllegalArgumentException iae) { - throw LoggingWrapperUtility.logException(logger, signature, - new MarathonMatchAnalyticsServiceException("The parameter is invalid.", iae)); - } catch (MarathonMatchAnalyticsServiceException e) { - LoggingWrapperUtility.logException(logger, signature, e); - throw e; - } catch (IOException e) { - throw LoggingWrapperUtility.logException(logger, signature, - new MarathonMatchAnalyticsServiceException("Error occurred when process json string.", e)); - } + throw new MarathonMatchAnalyticsServiceException("not implemented"); } /** @@ -509,131 +266,7 @@ public SearchResult getMatchResults(long roundId, int pageS public SystemTestResourceWrapper getSystemTests(long roundId, Long coderId, int coderStartNumber, int testCaseStartNumber, String sortingField, String sortingOrder, String accessToken) throws MarathonMatchAnalyticsServiceException { - final String signature = CLASS_NAME + "#getSystemTests(long roundId, long coderId, int coderStartNumber, " + - "int testCaseStartNumber, String sortingOrder, String sortingField, String accessToken)"; - try { - LoggingWrapperUtility.logEntrance(logger, signature, - new String[] {"roundId", "coderId", "coderStartNumber", "testCaseStartNumber", "sortingOrder", - "sortingField", "accessToken"}, - new Object[] {roundId, coderId, coderStartNumber, testCaseStartNumber, sortingOrder, sortingField, - accessToken}); - ValidationUtility.checkPositive(roundId, "roundId", IllegalArgumentException.class); - if(coderId != null) { - ValidationUtility.checkPositive(coderId, "coderId", IllegalArgumentException.class); - } - ValidationUtility.checkPositive(coderStartNumber, "coderStartNumber", IllegalArgumentException.class); - ValidationUtility.checkPositive(testCaseStartNumber, "testCaseStartNumber", IllegalArgumentException.class); - ValidationUtility.checkNotNullNorEmptyAfterTrimming(accessToken, "accessToken", - IllegalArgumentException.class); - - String jsonResult = callRestService(getSystemTestsResultsEndPointUrl, - createParameterMap(new String[] {"coderId", "coderStartNumber", "testCaseStartNumber", - "sortingOrder", "sortingField"}, - new String[] {coderId == null ? null : coderId.toString(), String.valueOf(coderStartNumber), - String.valueOf(testCaseStartNumber), sortingOrder, sortingField}), - createParameterMap(new String[] {ROUND_ID}, new String[] {String.valueOf(roundId)}), - accessToken); - ObjectMapper mapper = createObjectMapper(); - - SystemTestResourceWrapper result = - mapper.readValue(jsonResult.getBytes(), new TypeReference() {}); - - LoggingWrapperUtility.logExit(logger, signature, new Object[] {result}); - - return result; - } catch (IllegalArgumentException iae) { - throw LoggingWrapperUtility.logException(logger, signature, - new MarathonMatchAnalyticsServiceException("The parameter is invalid.", iae)); - } catch (IOException e) { - throw LoggingWrapperUtility.logException(logger, signature, - new MarathonMatchAnalyticsServiceException("Error occurred when process json string.", e)); - } - } - - /** - * Build a json node based on an existing response. - * - * @param url the url. - * @param queryParams the map of query parameters. - * @param pathParams the map of path parameters. - * @param accessToken the access token. - * @return the json node of the response. - * @throws IOException if any error occurs when reading data. - * @throws MarathonMatchAnalyticsServiceException if the rest call is failed. - */ - private String callRestService(String url, Map queryParams, Map pathParams, - String accessToken) throws IOException, MarathonMatchAnalyticsServiceException { - WebClient client = getWebClient(); - - if(queryParams != null) { - for(String key : queryParams.keySet()) { - if(queryParams.get(key) != null) { - client.query(key, queryParams.get(key)); - } - } - } - - // Set the api key for the rest call. - client.query("user_key", apiKey); - - if(pathParams != null) { - for(String key : pathParams.keySet()) { - url = url.replace(key, pathParams.get(key)); - } - } - - OAuthClientUtils.Consumer consumer = new OAuthClientUtils.Consumer(clientId, clientSecret); - ClientAccessToken clientAccessToken = new ClientAccessToken(OAuthConstants.BEARER_TOKEN_TYPE, accessToken); - String authHeader = OAuthClientUtils.createAuthorizationHeader(consumer, clientAccessToken); - client.replaceHeader("Authorization", authHeader); - - Response response = client.path(url).get(); - - if (response.getStatus() != 200) { - throw new MarathonMatchAnalyticsServiceException("The rest call is failed :" + response.getStatus()); - } else { - return IOUtils.toString((InputStream) response.getEntity(), "UTF-8"); - } - } - - /** - * Create the map by given input keys and values. - * - * @param key the keys - * @param value the values. - * @return the map. - */ - private Map createParameterMap(String[] key, String[] value) { - // Create a null object. - if(key == null && value == null) { - return null; - } - Map map = new HashMap(); - for(int i = 0; i < key.length; i++) { - map.put(key[i], value[i]); - } - return map; - } - - /** - * Gets the WebClient instance to make call to remote service. - * - * @return the WebClient instance - */ - private WebClient getWebClient() { - return WebClient.create(getRemoteServiceBaseUrl()); - } - - /** - * Create the object mapper. - * - * @return the object mapper instance. - */ - private ObjectMapper createObjectMapper() { - ObjectMapper mapper = new ObjectMapper(); - mapper.configure(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES, false); - mapper.setDateFormat(dateFormat); - return mapper; + throw new MarathonMatchAnalyticsServiceException("not implemented"); } /** @@ -642,7 +275,7 @@ private ObjectMapper createObjectMapper() { * @return the remote service base url */ public String getRemoteServiceBaseUrl() { - return remoteServiceBaseUrl; + throw new IllegalStateException("not implemented"); } /** @@ -651,7 +284,7 @@ public String getRemoteServiceBaseUrl() { * @param remoteServiceBaseUrl the remote service base url */ public void setRemoteServiceBaseUrl(String remoteServiceBaseUrl) { - this.remoteServiceBaseUrl = remoteServiceBaseUrl; + throw new IllegalStateException("not implemented"); } /** @@ -660,7 +293,7 @@ public void setRemoteServiceBaseUrl(String remoteServiceBaseUrl) { * @return the get mM basic info end point url */ public String getGetMMBasicInfoEndPointUrl() { - return getMMBasicInfoEndPointUrl; + throw new IllegalStateException("not implemented"); } /** @@ -669,7 +302,7 @@ public String getGetMMBasicInfoEndPointUrl() { * @param getMMBasicInfoEndPointUrl the get mM basic info end point url */ public void setGetMMBasicInfoEndPointUrl(String getMMBasicInfoEndPointUrl) { - this.getMMBasicInfoEndPointUrl = getMMBasicInfoEndPointUrl; + throw new IllegalStateException("not implemented"); } /** @@ -678,7 +311,7 @@ public void setGetMMBasicInfoEndPointUrl(String getMMBasicInfoEndPointUrl) { * @return the get mM registrants end point url */ public String getGetMMRegistrantsEndPointUrl() { - return getMMRegistrantsEndPointUrl; + throw new IllegalStateException("not implemented"); } /** @@ -687,7 +320,7 @@ public String getGetMMRegistrantsEndPointUrl() { * @param getMMRegistrantsEndPointUrl the get mM registrants end point url */ public void setGetMMRegistrantsEndPointUrl(String getMMRegistrantsEndPointUrl) { - this.getMMRegistrantsEndPointUrl = getMMRegistrantsEndPointUrl; + throw new IllegalStateException("not implemented"); } /** @@ -696,7 +329,7 @@ public void setGetMMRegistrantsEndPointUrl(String getMMRegistrantsEndPointUrl) { * @return the get all mM submissions end point url */ public String getGetAllMMSubmissionsEndPointUrl() { - return getAllMMSubmissionsEndPointUrl; + throw new IllegalStateException("not implemented"); } /** @@ -705,7 +338,7 @@ public String getGetAllMMSubmissionsEndPointUrl() { * @param getAllMMSubmissionsEndPointUrl the get all mM submissions end point url */ public void setGetAllMMSubmissionsEndPointUrl(String getAllMMSubmissionsEndPointUrl) { - this.getAllMMSubmissionsEndPointUrl = getAllMMSubmissionsEndPointUrl; + throw new IllegalStateException("not implemented"); } /** @@ -714,7 +347,7 @@ public void setGetAllMMSubmissionsEndPointUrl(String getAllMMSubmissionsEndPoint * @return the get match results end point url */ public String getGetMatchResultsEndPointUrl() { - return getMatchResultsEndPointUrl; + throw new IllegalStateException("not implemented"); } /** @@ -723,7 +356,7 @@ public String getGetMatchResultsEndPointUrl() { * @param getMatchResultsEndPointUrl the get match results end point url */ public void setGetMatchResultsEndPointUrl(String getMatchResultsEndPointUrl) { - this.getMatchResultsEndPointUrl = getMatchResultsEndPointUrl; + throw new IllegalStateException("not implemented"); } /** @@ -732,7 +365,7 @@ public void setGetMatchResultsEndPointUrl(String getMatchResultsEndPointUrl) { * @return the get competitor details end point url */ public String getGetCompetitorDetailsEndPointUrl() { - return getCompetitorDetailsEndPointUrl; + throw new IllegalStateException("not implemented"); } /** @@ -741,7 +374,7 @@ public String getGetCompetitorDetailsEndPointUrl() { * @param getCompetitorDetailsEndPointUrl the get competitor details end point url */ public void setGetCompetitorDetailsEndPointUrl(String getCompetitorDetailsEndPointUrl) { - this.getCompetitorDetailsEndPointUrl = getCompetitorDetailsEndPointUrl; + throw new IllegalStateException("not implemented"); } /** @@ -750,7 +383,7 @@ public void setGetCompetitorDetailsEndPointUrl(String getCompetitorDetailsEndPoi * @return the get marathon match listings end point url */ public String getGetMarathonMatchListingsEndPointUrl() { - return getMarathonMatchListingsEndPointUrl; + throw new IllegalStateException("not implemented"); } /** @@ -759,7 +392,7 @@ public String getGetMarathonMatchListingsEndPointUrl() { * @param getMarathonMatchListingsEndPointUrl the get marathon match listings end point url */ public void setGetMarathonMatchListingsEndPointUrl(String getMarathonMatchListingsEndPointUrl) { - this.getMarathonMatchListingsEndPointUrl = getMarathonMatchListingsEndPointUrl; + throw new IllegalStateException("not implemented"); } /** @@ -768,7 +401,7 @@ public void setGetMarathonMatchListingsEndPointUrl(String getMarathonMatchListin * @param clientId the client id */ public void setClientId(String clientId) { - this.clientId = clientId; + throw new IllegalStateException("not implemented"); } /** @@ -777,7 +410,7 @@ public void setClientId(String clientId) { * @param clientSecret the client secret */ public void setClientSecret(String clientSecret) { - this.clientSecret = clientSecret; + } /** @@ -786,7 +419,7 @@ public void setClientSecret(String clientSecret) { * @param apiKey the api key */ public void setApiKey(String apiKey) { - this.apiKey = apiKey; + } /** @@ -796,7 +429,7 @@ public void setApiKey(String apiKey) { * @since 1.3 */ public String getGetSystemTestsResultsEndPointUrl() { - return getSystemTestsResultsEndPointUrl; + throw new IllegalStateException("not implemented"); } /** @@ -806,7 +439,7 @@ public String getGetSystemTestsResultsEndPointUrl() { * @since 1.3 */ public void setGetSystemTestsResultsEndPointUrl(String getSystemTestsResultsEndPointUrl) { - this.getSystemTestsResultsEndPointUrl = getSystemTestsResultsEndPointUrl; + } } diff --git a/src/java/main/com/topcoder/direct/services/view/action/project/ProjectWorkManagementAction.java b/src/java/main/com/topcoder/direct/services/view/action/project/ProjectWorkManagementAction.java new file mode 100644 index 000000000..341b18c88 --- /dev/null +++ b/src/java/main/com/topcoder/direct/services/view/action/project/ProjectWorkManagementAction.java @@ -0,0 +1,1165 @@ +/* + * Copyright (C) 2015 TopCoder Inc., All Rights Reserved. + */ +package com.topcoder.direct.services.view.action.project; + + +import com.appirio.client.asp.ASPClient; +import com.appirio.client.asp.ASPClientFactory; +import com.appirio.client.asp.api.SubmissionFile; +import com.appirio.client.asp.api.WorkStep; +import com.topcoder.direct.services.configs.ServerConfiguration; +import com.topcoder.direct.services.view.action.BaseDirectStrutsAction; +import com.topcoder.direct.services.view.action.FormAction; +import com.topcoder.direct.services.view.action.contest.launch.MimeTypeRetriever; +import com.topcoder.direct.services.view.dto.SoftwareContestWinnerDTO; +import com.topcoder.direct.services.view.dto.contest.ContestDashboardDTO; +import com.topcoder.direct.services.view.dto.contest.ContestFinalFixDTO; +import com.topcoder.direct.services.view.dto.contest.ContestRoundType; +import com.topcoder.direct.services.view.dto.contest.ContestStatus; +import com.topcoder.direct.services.view.dto.contest.ProjectPhaseDTO; +import com.topcoder.direct.services.view.dto.contest.ProjectPhaseStatus; +import com.topcoder.direct.services.view.dto.contest.ProjectPhaseType; +import com.topcoder.direct.services.view.dto.contest.SoftwareContestSubmissionsDTO; +import com.topcoder.direct.services.view.dto.project.ProjectContestDTO; +import com.topcoder.direct.services.view.dto.project.ProjectContestsListDTO; +import com.topcoder.direct.services.view.form.ProjectIdForm; +import com.topcoder.direct.services.view.util.AuthorizationProvider; +import com.topcoder.direct.services.view.util.DataProvider; +import com.topcoder.direct.services.view.util.DirectUtils; +import com.topcoder.management.deliverable.Submission; +import com.topcoder.management.deliverable.Upload; +import com.topcoder.project.phases.Phase; +import com.topcoder.shared.dataAccess.DataAccess; +import com.topcoder.shared.dataAccess.Request; +import com.topcoder.shared.dataAccess.resultSet.ResultSetContainer; +import com.topcoder.shared.util.DBMS; +import org.apache.log4j.Logger; + +import javax.servlet.http.Cookie; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpSession; +import java.io.File; +import java.io.FilenameFilter; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.TreeMap; + +/** + * Action supporting project work management page. + * + * @author TCSASSEMBLER + * @version 1.0 + */ +public class ProjectWorkManagementAction extends BaseDirectStrutsAction implements FormAction { + + /** + * the phase name of the submission phase. + */ + private static final String SUBMISSION_PHASE = "submission"; + + /** + * The phase name of the checkpoint submission phase. + */ + private static final String CHECKPOINT_SUBMISSION_PHASE = "checkpoint_submission"; + + /** + * The phase name of the final fix phase. + */ + private static final String FINAL_FIX_PHASE = "final_fix"; + + /** + * The work step name. + */ + private String workStepName; + + /** + * The base path of the studio contest submissions. Injected via spring. + */ + private String studioSubmissionBase; + + + /** + * The base path of the software contest submissions. Injected via spring. + * + * @since 1.1 + */ + private String softwareSubmissionBase; + + /** + * The contest id. + */ + private long contestId; + + /** + * The phase name. + */ + private String phaseName; + + /** + * The id of the work step. + */ + private String workStepId; + + /** + * The list of work steps of a project. + */ + private List workSteps; + + /** + * The cache maps user id to user handle. + */ + private Map userHandlesMap; + + /** + * The demand work id of the direct project. + */ + private String demandWorkId; + + /** + *

+ * Represents the MIME type retriever used to retrieve the MIME types. + *

+ *

+ *

+ * It's injected by the setter and it will be not null when the logic of the action is performed. + *

+ */ + private MimeTypeRetriever mimeTypeRetriever; + + /** + * Logger for this class. + */ + private static final Logger logger = Logger.getLogger(ProjectWorkManagementAction.class); + + /** + *

A ProjectIdForm providing the ID of a requested project.

+ */ + private ProjectIdForm formData = new ProjectIdForm(); + + /** + * The display name for the work step type. The key is workstep type name in enum, the value is the display name in direct. + */ + private static final Map WORK_STEP_DISPLAY_NAME = new HashMap(); + + /** + * Static initializer which initialize the map which maps the step type to its display name. + */ + static { + WORK_STEP_DISPLAY_NAME.put(WorkStep.StepType.designConcepts.name(), "Design Concepts"); + WORK_STEP_DISPLAY_NAME.put(WorkStep.StepType.completeDesigns.name(), "Complete Designs"); + WORK_STEP_DISPLAY_NAME.put(WorkStep.StepType.finalFixes.name(), "Final Fixes"); + WORK_STEP_DISPLAY_NAME.put(WorkStep.StepType.code.name(), "Code"); + } + + /** + * Gets the the jwt cookie for current user. + * + * @return the jwt cookie. + * @throws Exception if there is no jwt cookie for current user. + */ + private String getJWTCookieValue() throws Exception { + HttpServletRequest servletRequest = DirectUtils.getServletRequest(); + Cookie[] cookies = servletRequest.getCookies(); + String tcjwt = null; + for (Cookie c : cookies) { + if (c != null && c.getName().equalsIgnoreCase(ServerConfiguration.JWT_COOOKIE_KEY)) { + tcjwt = c.getValue(); + } + } + + if (tcjwt != null && tcjwt.trim().length() > 0) { + return tcjwt; + } else { + String errorMessage = "You don't have required jwt cookie to access the work manager page." + + " Please try login again."; + DirectUtils.setErrorMessageInErrorPage(errorMessage); + throw new Exception(errorMessage); + } + } + + + /** + * Checks whether current user has permission to access the work manager. + * + * @throws Exception if any error. + */ + private void checkPermission() throws Exception { + if (!AuthorizationProvider.isUserGrantedToAccessWorkManager( + DirectUtils.getTCSubjectFromSession(), + getFormData().getProjectId())) { + String errorMessage = "You don't have permission to access the work manager page."; + DirectUtils.setErrorMessageInErrorPage(errorMessage); + throw new Exception(errorMessage); + } + } + + + /** + * The action redirects to project-work-management.jsp + * + * @throws Exception + */ + @Override + protected void executeAction() throws Exception { + + // check jwt cookie + getJWTCookieValue(); + + // check user permission + checkPermission(); + + // sets the demand work id. + this.setDemandWorkId(DataProvider.getDirectProjectDemandWorkId(this.getFormData().getProjectId())); + } + + /** + * The ajax action to get the work steps via asp client for current project. + * + * @return the result code. + */ + public String getDirectProjectWorkSteps() { + try { + + String tcjwt = getJWTCookieValue(); + + checkPermission(); + + ASPClient aspClient = ASPClientFactory.build(tcjwt); + + logger.info("Retrieving work steps..."); + + // get the worksteps via API + this.workSteps = aspClient.retrieveWorkSteps(String.valueOf(getFormData().getProjectId())); + + logger.info("Found " + this.workSteps.size() + " steps"); + +/* + WorkStep step1 = new WorkStep(); + step1.setId("ws1"); + step1.setStatus("Active"); + step1.setStepType(WorkStep.StepType.designConcepts); + + WorkStep step2 = new WorkStep(); + step2.setId("ws2"); + step2.setStatus("Active"); + step2.setStepType(WorkStep.StepType.completeDesigns); + + WorkStep step3 = new WorkStep(); + step3.setId("ws3"); + step3.setStatus("Active"); + step3.setStepType(WorkStep.StepType.finalFixes); + + this.workSteps = new ArrayList(); + this.workSteps.add(step1); + this.workSteps.add(step2); + this.workSteps.add(step3); +*/ + + + // put work steps in session + HttpSession session = DirectUtils.getServletRequest().getSession(true); + for (WorkStep ws : workSteps) { + session.setAttribute(ws.getId(), ws); + } + + // construct the result + List> result = new ArrayList>(); + + for (WorkStep step : this.workSteps) { + Map item = new HashMap(); + item.put("id", step.getId()); + item.put("label", WORK_STEP_DISPLAY_NAME.get(step.getStepType().name())); + item.put("type", "folder"); + item.put("workStepType", step.getStepType().name()); + result.add(item); + } + + setResult(result); + + } catch (Throwable e) { + + logger.error("Unable to retrieve work steps", e); + + if (getModel() != null) { + setResult(e); + } + } + + return SUCCESS; + } + + /** + * Checks whether the work step is in design (studio) or development. + * + * @param workStepName the type name of the work step. + * @return true if it's in design, false if it's in development + */ + private boolean isWorkStepForStudio(String workStepName) { + if (getWorkStepName() == null || getWorkStepName().trim().length() == 0) { + throw new IllegalArgumentException("Workstep name should not be null for method isWorkStepForStudio"); + } + + if (getWorkStepName().equalsIgnoreCase(WorkStep.StepType.designConcepts.name()) + || getWorkStepName().equalsIgnoreCase(WorkStep.StepType.completeDesigns.name()) + || getWorkStepName().equalsIgnoreCase(WorkStep.StepType.finalFixes.name())) { + return true; + } else if (getWorkStepName().equalsIgnoreCase(WorkStep.StepType.code.name())) { + return false; + } else { + throw new IllegalArgumentException("Unknown workstep name:" + workStepName); + } + } + + /** + * The ajax action to get the active / completed design challenges for the selected work step. + * + * @return the result code. + */ + public String getChallengesForWorkStepAndProject() { + try { + + checkPermission(); + + List> result = new ArrayList>(); + + logger.info("Getting design challenges..."); + + ProjectContestsListDTO projectContests = DataProvider.getProjectContests( + DirectUtils.getTCSubjectFromSession().getUserId(), + getFormData().getProjectId()); + + for (ProjectContestDTO contestDTO : projectContests.getContests()) { + // filter out the status (active, completed) - studio contests + if (!contestDTO.getStatus().equals(ContestStatus.DRAFT) + && !contestDTO.getStatus().equals(ContestStatus.DELETED) + && !contestDTO.getStatus().getName().toLowerCase().contains("cancelled") + && contestDTO.getIsStudio() == isWorkStepForStudio(getWorkStepName())) { + Map item = new HashMap(); + item.put("id", contestDTO.getContest().getId()); + item.put("label", contestDTO.getContest().getTitle()); + item.put("type", "folder"); + item.put("status", contestDTO.getStatus().toString()); + result.add(item); + } + } + + setResult(result); + + } catch (Throwable e) { + logger.error(String.format("Unable to retrieve challenges for project:%s, workstep:%s", + getFormData().getProjectId(), getWorkStepName()), e); + if (getModel() != null) { + setResult(e); + } + } + + return SUCCESS; + } + + /** + * Helper method to build the phase result for the ajax response. + * + * @param contestID the contest id + * @param phaseType the phase type + * @return the built map result. + */ + private static Map buildPhaseResult(long contestID, ProjectPhaseType phaseType) { + Map resultItem = new HashMap(); + resultItem.put("id", contestID + ":" + phaseType.toString()); + resultItem.put("label", phaseType.toString()); + resultItem.put("type", "phase"); + + return resultItem; + } + + /** + * Gets the phases that can be pushed for the passed in contest and work step type. + * + * @return the result code. + */ + public String getContestPhasesForWorkStep() { + try { + + checkPermission(); + + List> result = new ArrayList>(); + + // get the all phases for the contest + ContestDashboardDTO contestDashboardData = DataProvider.getContestDashboardData(getContestId(), true, + false); + List allPhases = contestDashboardData.getAllPhases(); + + Map closedPhasesMap = new HashMap(); + Map opennedPhasesMap = new HashMap(); + Map allPhasesMap = new HashMap(); + + for (ProjectPhaseDTO phase : allPhases) { + if (phase.getPhaseStatus().equals(ProjectPhaseStatus.CLOSED)) { + closedPhasesMap.put(phase.getPhaseType().toString(), phase); + } else if (phase.getPhaseStatus().equals(ProjectPhaseStatus.OPEN)) { + opennedPhasesMap.put(phase.getPhaseType().toString(), phase); + } + + allPhasesMap.put(phase.getPhaseType().toString(), phase); + } + + if (getWorkStepName().equalsIgnoreCase(WorkStep.StepType.designConcepts.name())) { + // check phases for designConcept work step + // If the WorkStep is designConcepts, and the chosen challenge has closed + // “checkpoint submission” and “checkpoint screening” phases, display the checkpoint submission phase. + if (closedPhasesMap.containsKey(ProjectPhaseType.CHECKPOINT_SUBMISSION.toString()) + && closedPhasesMap.containsKey(ProjectPhaseType.CHECKPOINT_SCREENING.toString())) { + result.add(buildPhaseResult(getContestId(), ProjectPhaseType.CHECKPOINT_SUBMISSION)); + } + + } else if (getWorkStepName().equalsIgnoreCase(WorkStep.StepType.completeDesigns.name())) { + // check phases for completeDesigns work step + // If the WorkStep is completeDesigns, and the chosen challenge has + // a closed “submission” and “screening” phases, + // display the submission phase. + if (closedPhasesMap.containsKey(ProjectPhaseType.SUBMISSION.toString()) + && closedPhasesMap.containsKey(ProjectPhaseType.SCREENING.toString())) { + result.add(buildPhaseResult(getContestId(), ProjectPhaseType.SUBMISSION)); + } + + } else if (getWorkStepName().equalsIgnoreCase(WorkStep.StepType.finalFixes.name())) { + // check phases for finalFixes work step + // If the WorkStep is finalFixes, and the chosen challenge has + // a closed “final fix” phases and no open final fix + // display the final fix phase. + if (closedPhasesMap.containsKey(ProjectPhaseType.FINAL_FIX.toString()) + && !opennedPhasesMap.containsKey(ProjectPhaseType.FINAL_FIX.toString())) { + result.add(buildPhaseResult(getContestId(), ProjectPhaseType.FINAL_FIX)); + } + } else if (getWorkStepName().equalsIgnoreCase(WorkStep.StepType.code.name())) { + // check phases for code work step (dev challenges) + // if the chosen challenge has a closed final + if (allPhasesMap.containsKey(ProjectPhaseType.FINAL_FIX.toString())) { + // the challenge has final fix, check if there is closed final fix/ final review and no open final fix + if (closedPhasesMap.containsKey(ProjectPhaseType.FINAL_FIX.toString()) + && closedPhasesMap.containsKey(ProjectPhaseType.FINAL_REVIEW.toString()) + && !opennedPhasesMap.containsKey(ProjectPhaseType.FINAL_FIX.toString())) { + result.add(buildPhaseResult(getContestId(), ProjectPhaseType.FINAL_FIX)); + } + } else { + // the challenge does not have final fix, check if there is closed submission/review phase + if (closedPhasesMap.containsKey(ProjectPhaseType.SUBMISSION.toString()) + && closedPhasesMap.containsKey(ProjectPhaseType.REVIEW.toString()) + && closedPhasesMap.containsKey(ProjectPhaseType.APPEALS.toString()) + && closedPhasesMap.containsKey(ProjectPhaseType.APPEALS_RESPONSE.toString())) { + result.add(buildPhaseResult(getContestId(), ProjectPhaseType.SUBMISSION)); + } + } + } + + setResult(result); + + } catch (Throwable e) { + logger.error("get workstep phases error", e); + if (getModel() != null) { + setResult(e); + } + } + + return SUCCESS; + } + + /** + * Gets the submission data brief to use on push button for the selected phase of the selected challenge. + * + * @return the result code. + */ + public String getSubmissionDataForPhase() { + try { + + checkPermission(); + + Map result = new HashMap(); + + // input: 1) phase 2) challenge id + + String pushStatus = "No submissions to push"; + + if (getPhaseName() != null) { + if (CHECKPOINT_SUBMISSION_PHASE.equalsIgnoreCase(getPhaseName()) && isWorkStepForStudio(getWorkStepName())) { + List checkpointSubmissions = DirectUtils.getStudioContestSubmissions(getContestId(), + ContestRoundType.CHECKPOINT, + DirectUtils.getTCSubjectFromSession(), getContestServiceFacade()); + + if (checkpointSubmissions != null) { + pushStatus = checkpointSubmissions.size() + " checkpoint submissions"; + } + + } else if (SUBMISSION_PHASE.equalsIgnoreCase(getPhaseName()) && isWorkStepForStudio(getWorkStepName())) { + List submissions = DirectUtils.getStudioContestSubmissions(getContestId(), + ContestRoundType.FINAL, + DirectUtils.getTCSubjectFromSession(), getContestServiceFacade()); + + if (submissions != null) { + pushStatus = submissions.size() + " submissions"; + } + } else if (FINAL_FIX_PHASE.equalsIgnoreCase(getPhaseName()) && isWorkStepForStudio(getWorkStepName())) { + List finalFixes = DataProvider.getContestFinalFixes(getContestId()); + + if (finalFixes != null && finalFixes.size() > 0) { + pushStatus = " final fix submissions"; + } + } else if (FINAL_FIX_PHASE.equalsIgnoreCase(getPhaseName()) && !isWorkStepForStudio(getWorkStepName())) { + List finalFixes = DataProvider.getContestFinalFixes(getContestId()); + + if (finalFixes != null && finalFixes.size() > 0) { + pushStatus = " final fixed submission"; + } + } else if (SUBMISSION_PHASE.equalsIgnoreCase(getPhaseName()) && !isWorkStepForStudio(getWorkStepName())) { + SoftwareContestSubmissionsDTO softwareSubmissionDTO = new SoftwareContestSubmissionsDTO(); + softwareSubmissionDTO.setProjectId(getContestId()); + DataProvider.setSoftwareSubmissionsData(softwareSubmissionDTO); + + List winners = softwareSubmissionDTO.getWinners(); + + if (winners != null && winners.size() > 0) { + pushStatus = " 1st place submission"; + } + } + } + + result.put("pushStatus", pushStatus); + + setResult(result); + + } catch (Throwable e) { + logger.error("get submission data error", e); + if (getModel() != null) { + setResult(e); + } + } + + return SUCCESS; + } + + /** + * Push the submissions of the selected contest and phase for the selected workstep via API. + * + * @return result code. + */ + public String pushSubmissions() { + try { + + String tcjwt = getJWTCookieValue(); + + checkPermission(); + + Map result = new HashMap(); + + // input: 1) phase 2) challenge id 3) WorkStep + + if (tcjwt != null && tcjwt.trim().length() > 0) { + + // build the client + ASPClient aspClient = ASPClientFactory.build(tcjwt); + + // get workstep from the session + WorkStep workStep = (WorkStep) DirectUtils.getServletRequest().getSession(true).getAttribute( + getWorkStepId()); + + List> submissionsToPush = new ArrayList>(); + + userHandlesMap = new HashMap(); + + // construct the correct submissions for the given contest ID and phase + + if (getPhaseName() != null) { + if (CHECKPOINT_SUBMISSION_PHASE.equalsIgnoreCase(getPhaseName())) { + List checkpointSubmissions = DirectUtils.getStudioContestSubmissions(getContestId(), + ContestRoundType.CHECKPOINT, + DirectUtils.getTCSubjectFromSession(), getContestServiceFacade()); + + Map> organizingMap = new HashMap>(); + + for (Submission s : checkpointSubmissions) { + + Long submissionUserId = Long.parseLong(s.getCreationUser()); + + if (organizingMap.containsKey(submissionUserId)) { + Map userSubmissionMap = organizingMap.get(submissionUserId); + userSubmissionMap.put(s.getUserRank(), s); + } else { + Map userSubmissionMap = new TreeMap(); + userSubmissionMap.put(s.getUserRank(), s); + organizingMap.put(submissionUserId, userSubmissionMap); + userHandlesMap.put(submissionUserId, + this.getUserService().getUserHandle(submissionUserId)); + } + } + + for (Long key : organizingMap.keySet()) { + Map value = organizingMap.get(key); + List userSubmissionsToPush = new ArrayList(); + for (Map.Entry entry : value.entrySet()) { + userSubmissionsToPush.add(getStudioSubmissionDataForAPI(entry.getValue(), false)); + } + submissionsToPush.add(userSubmissionsToPush); + } + + + } else if (SUBMISSION_PHASE.equalsIgnoreCase(getPhaseName()) && isWorkStepForStudio(getWorkStepName())) { + + List finalRoundSubmissions = DirectUtils.getStudioContestSubmissions(getContestId(), + ContestRoundType.FINAL, + DirectUtils.getTCSubjectFromSession(), getContestServiceFacade()); + + Map> organizingMap = new HashMap>(); + + for (Submission s : finalRoundSubmissions) { + + Long submissionUserId = Long.parseLong(s.getCreationUser()); + + if (organizingMap.containsKey(submissionUserId)) { + Map userSubmissionMap = organizingMap.get(submissionUserId); + userSubmissionMap.put(s.getUserRank(), s); + } else { + Map userSubmissionMap = new TreeMap(); + userSubmissionMap.put(s.getUserRank(), s); + organizingMap.put(submissionUserId, userSubmissionMap); + userHandlesMap.put(submissionUserId, + this.getUserService().getUserHandle(submissionUserId)); + } + } + + for (Long key : organizingMap.keySet()) { + Map value = organizingMap.get(key); + List userSubmissionsToPush = new ArrayList(); + for (Map.Entry entry : value.entrySet()) { + userSubmissionsToPush.add(getStudioSubmissionDataForAPI(entry.getValue(), false)); + } + submissionsToPush.add(userSubmissionsToPush); + } + } else if (FINAL_FIX_PHASE.equalsIgnoreCase(getPhaseName()) && isWorkStepForStudio(getWorkStepName())) { + List finalFixesSubmissions = DirectUtils.getStudioContestSubmissions(getContestId(), + ContestRoundType.STUDIO_FINAL_FIX_SUBMISSION, + DirectUtils.getTCSubjectFromSession(), getContestServiceFacade()); + + if (finalFixesSubmissions != null && finalFixesSubmissions.size() > 0) { + + // find out the latest final fix submission + Submission latestSubmission = finalFixesSubmissions.get(0); + for (int i = 1, n = finalFixesSubmissions.size(); i < n; ++i) { + if (latestSubmission.getModificationTimestamp().compareTo( + finalFixesSubmissions.get(i).getModificationTimestamp()) < 0) { + latestSubmission = finalFixesSubmissions.get(i); + } + } + + userHandlesMap.put(Long.parseLong(latestSubmission.getCreationUser()), + this.getUserService().getUserHandle( + Long.parseLong(latestSubmission.getCreationUser()))); + + List finalFixSubmissionsToPush = new ArrayList(); + + finalFixSubmissionsToPush.add(getStudioSubmissionDataForAPI(latestSubmission, true)); + + submissionsToPush.add(finalFixSubmissionsToPush); + } + + } else if (SUBMISSION_PHASE.equalsIgnoreCase(getPhaseName()) && !isWorkStepForStudio(getWorkStepName())) { + SoftwareContestSubmissionsDTO softwareSubmissionDTO = new SoftwareContestSubmissionsDTO(); + softwareSubmissionDTO.setProjectId(getContestId()); + DataProvider.setSoftwareSubmissionsData(softwareSubmissionDTO); + + SoftwareContestWinnerDTO firstPlaceWinner = softwareSubmissionDTO.getFirstPlaceWinner(); + + Submission[] submissions = getContestServiceFacade().getSoftwareProjectSubmissions( + getCurrentUser(), firstPlaceWinner.getProjectId()); + + for (Submission sub : submissions) { + if (sub.getId() == firstPlaceWinner.getSubmissionId()) { + // find the winner + List winnerSubmissionToPush = new ArrayList(); + + winnerSubmissionToPush.add(getSoftwareSubmissionDataForAPI(sub)); + + submissionsToPush.add(winnerSubmissionToPush); + } + } + + } else if (FINAL_FIX_PHASE.equalsIgnoreCase(getPhaseName()) && !isWorkStepForStudio(getWorkStepName())) { + Phase lastClosedFinalFixPhase = DirectUtils.getLastClosedFinalFixPhase( + this.getProjectServices(), getContestId()); + List finalFixes = DataProvider.getContestFinalFixes( + getContestId()); + Upload[] uploads = this.getContestServiceFacade().getActiveUploads(getContestId(), DirectUtils.FINAL_FIX_UPLOAD_TYPE_ID); + for (Upload upload : uploads) { + if (upload.getProjectPhase() != null && upload.getProjectPhase().longValue() == lastClosedFinalFixPhase.getId()) { + Submission finalFixSubmission = new Submission(); + long finalFixSubmissionId = 0; + long submitterId = 0; + for (ContestFinalFixDTO ff : finalFixes) { + if (ff.getUploadId() == upload.getId()) { + finalFixSubmissionId = upload.getId(); + submitterId = ff.getFinalFixerUserId(); + finalFixSubmission.setUpload(upload); + } + } + + if (finalFixSubmissionId > 0 && submitterId > 0) { + finalFixSubmission.setId(finalFixSubmissionId); + finalFixSubmission.setCreationUser(String.valueOf(submitterId)); + List finalFixSubmissionToPush = new ArrayList(); + + finalFixSubmissionToPush.add(getSoftwareSubmissionDataForAPI(finalFixSubmission)); + + submissionsToPush.add(finalFixSubmissionToPush); + } + } + } + } + } + + if (workStep == null) { + throw new IllegalArgumentException("The specified work step could not be found"); + } + + if (submissionsToPush == null || submissionsToPush.size() == 0) { + throw new IllegalArgumentException( + "The specified challenge and phase do not have submissions to push"); + } + +// ObjectWriter ow = new ObjectMapper().writer().withDefaultPrettyPrinter(); +// String submissionsJson = ow.writeValueAsString(submissionsToPush); +// String workStepJson = ow.writeValueAsString(workStep); + + logger.info("Starting submission publishing..."); + + aspClient.publishSubmissionsToWorkStep(workStep, submissionsToPush); + + logger.info("Submissions published"); +// +// logger.info(submissionsJson); +// logger.info(workStepJson); + + } else { + throw new Exception("You don't have permission to push submissions for workstep in the project." + + " Please try login again."); + } + + + setResult(result); + + } catch (Throwable e) { + logger.error("Unable to publish submissions", e); + if (getModel() != null) { + setResult(e); + } + } + + return SUCCESS; + } + + /** + * Builds the submission for the asp client to use. + * + * @param submission the submission object + * @return the built asp client submission DTO. + * @throws Exception if any error. + */ + private com.appirio.client.asp.api.Submission getSoftwareSubmissionDataForAPI(Submission submission) throws Exception { + logger.info( + "Processing software submission " + submission.getId() + " for user " + submission.getCreationUser()); + com.appirio.client.asp.api.Submission s = new com.appirio.client.asp.api.Submission(); + s.setSubmitterId(submission.getCreationUser()); + s.setTopcoderSubmissionId(String.valueOf(submission.getId())); + List files = new ArrayList(); + s.setFiles(files); + + System.out.println("software submission base:" + getSoftwareSubmissionBase()); + System.out.println("submission upload:" + submission.getUpload()); + System.out.println("submission upload parameter:" + submission.getUpload().getParameter()); + + + files.add(createSubmissionFile(SubmissionFile.FileRole.DELIVERABLE, + getSoftwareSubmissionBase() + File.separator + submission.getUpload().getParameter())); + + return s; + } + + + /** + * Builds the com.appirio.client.asp.api.Submission from the direct submission. + * + * @param submission the direct submission + * @param isOriginalSubmissionNeeded whether the original source file is needed. + * @return result code + * @throws Exception if any error occus. + */ + private com.appirio.client.asp.api.Submission getStudioSubmissionDataForAPI(Submission submission, + boolean isOriginalSubmissionNeeded) throws Exception { + logger.info("Processing studio submission " + submission.getId() + " for user " + submission.getCreationUser()); + com.appirio.client.asp.api.Submission s = new com.appirio.client.asp.api.Submission(); + //s.setSubmitterId(String.valueOf(submission.getUpload().getOwner())); + s.setSubmitterId(submission.getCreationUser()); + s.setTopcoderSubmissionId(String.valueOf(submission.getId())); + + List files = new ArrayList(); + s.setFiles(files); + + // 1) get the COVER and PREVIEW first + DataAccess dataAccessor = new DataAccess(DBMS.TCS_OLTP_DATASOURCE_NAME); + Request request = new Request(); + request.setContentHandle("studio_submission_artifacts"); + request.setProperty("subid", String.valueOf(submission.getId())); + + final ResultSetContainer resultContainer = dataAccessor.getData(request).get("studio_submission_artifacts"); + + final long recordNum = resultContainer.size(); + + if (recordNum > 0) { + // means the submission has images files - the results is sorted by order asc + for (int i = 0; i < recordNum; i++) { + long sortOrder = resultContainer.getIntItem(i, "sort_order"); + long imageTypeId = resultContainer.getLongItem(i, "image_type_id"); + String imageFileName = resultContainer.getStringItem(i, "file_name"); + SubmissionFile.FileRole fileRole = SubmissionFile.FileRole.PREVIEW; + + if (imageTypeId == 29L || imageTypeId == 31L) { + if (sortOrder == 1) { + fileRole = SubmissionFile.FileRole.COVER; + } + + files.add(createSubmissionFile(fileRole, getImageFilePath(submission, imageFileName))); + } + } + } + + // 2) get the DELIVERABLE + if (isOriginalSubmissionNeeded) { + // get the source submission + files.add(createSubmissionFile(SubmissionFile.FileRole.DELIVERABLE, getSourceSubmissionPath(submission))); + } else { + // get the preview submission + files.add(createSubmissionFile(SubmissionFile.FileRole.DELIVERABLE, getPreviewFilePath(submission))); + } + + return s; + } + + /** + * Creates a SubmissionFile instance with the given file role and absolute file path. + * + * @param fileRole the file role + * @param path the absolute path of the file. + * @return created SubmissionFile instance. + */ + private SubmissionFile createSubmissionFile(SubmissionFile.FileRole fileRole, String path) { + SubmissionFile submissionFile = new SubmissionFile(); + submissionFile.setFileRole(fileRole); + File f = new File(path); + submissionFile.setMimeType(mimeTypeRetriever.getMimeTypeFromFileName(f.getName())); + submissionFile.setPath(path); + + return submissionFile; + } + + + /** + * Creates the absolute submission base path for the studio submission. + * + * @param submission the studio submission. + * @return the base path of the submission. + */ + private String createAbsoluteStudioSubmissionBasePath(Submission submission) { + StringBuilder buf = new StringBuilder(200); + buf.append(getStudioSubmissionBase()); + buf.append(System.getProperty("file.separator")); + buf.append(submission.getUpload().getProject()); + buf.append(System.getProperty("file.separator")); + //buf.append(this.userHandlesMap.get(Long.parseLong(submission.getCreationUser()))); + // files are stored on disk with lowercase handle + buf.append(this.userHandlesMap.get(Long.parseLong(submission.getCreationUser())).toLowerCase()); + buf.append("_"); + buf.append(submission.getCreationUser()); + buf.append(System.getProperty("file.separator")); + + logger.info(String.format("createAbsoluteStudioSubmissionBasePath- submissionID:%d, base path:%s", + submission.getId(), buf.toString())); + + return buf.toString(); + } + + /** + * Gets the absolute path of the preview deliverable zip. + * + * @param submission the submission. + * @return the absolute path of the preview deliverable zip. + */ + private String getPreviewFilePath(Submission submission) { + String baseDirPath = createAbsoluteStudioSubmissionBasePath(submission); + File baseDir = new File(baseDirPath); + + String[] fileNames = baseDir.list(new SubmissionPresentationFilter("preview", submission.getId())); + + if (fileNames == null || fileNames.length < 1) { + logger.error("Unable to find preview file " + baseDir.getAbsolutePath() + "/" + submission.getId() + + "_preview.zip"); + throw new IllegalArgumentException( + String.format( + "No preview zip file found for contest %s and submissionID %s. Please verify the submission was uploaded successfully.", + submission.getUpload().getProject(), + submission.getId())); + } + + logger.info(String.format("getPreviewFilePath- submissionID:%d, path:%s", + submission.getId(), baseDirPath + fileNames[0])); + + return baseDirPath + fileNames[0]; + } + + /** + * Gets the absolute preview image file path. + * + * @param submission the submission. + * @param imageFileName the image file name. + * @return the absolute path of the preview image. + */ + private String getImageFilePath(Submission submission, String imageFileName) { + String path = createAbsoluteStudioSubmissionBasePath(submission) + imageFileName; + + logger.info(String.format("getImageFilePath- submissionID:%d, image file name:%s, path:%s", + submission.getId(), imageFileName, path)); + + return path; + } + + /** + * Gets the absolute path of the source submission. + * + * @param submission the submission. + * @return the absolute path of the submission. + */ + private String getSourceSubmissionPath(Submission submission) { + String path = createAbsoluteStudioSubmissionBasePath(submission) + submission.getUpload().getParameter(); + + logger.info(String.format("getSourceSubmissionPath- submissionID:%d, path:%s", + submission.getId(), path)); + return path; + } + + + /** + * Gets the forum data. + * + * @return the form data. + */ + @Override + public ProjectIdForm getFormData() { + return formData; + } + + /** + * Gets the work steps. + * + * @return the work steps. + */ + public List getWorkSteps() { + return workSteps; + } + + /** + * Sets the work steps. + * + * @param workSteps the work steps. + */ + public void setWorkSteps(List workSteps) { + this.workSteps = workSteps; + } + + /** + * Gets the work step name. + * + * @return the work step name. + */ + public String getWorkStepName() { + return workStepName; + } + + /** + * Sets the work step name. + * + * @param workStepName the work step name. + */ + public void setWorkStepName(String workStepName) { + this.workStepName = workStepName; + } + + /** + * Gets the contest id. + * + * @return the contest id. + */ + public long getContestId() { + return contestId; + } + + /** + * Sets the contest id. + * + * @param contestId the contest id. + */ + public void setContestId(long contestId) { + this.contestId = contestId; + } + + /** + * Gets the phase name. + * + * @return the phase name. + */ + public String getPhaseName() { + return phaseName; + } + + /** + * Sets the phase name. + * + * @param phaseName the phase name. + */ + public void setPhaseName(String phaseName) { + this.phaseName = phaseName; + } + + /** + * Gets the studio submission base path. + * + * @return the studio submission base path. + */ + public String getStudioSubmissionBase() { + return studioSubmissionBase; + } + + /** + * Sets the studio submission base path. + * + * @param studioSubmissionBase the studio submission base path. + */ + public void setStudioSubmissionBase(String studioSubmissionBase) { + this.studioSubmissionBase = studioSubmissionBase; + } + + /** + * Gets the software submission base path. + * + * @return the software submission base path. + * @since 1.1 + */ + public String getSoftwareSubmissionBase() { + return softwareSubmissionBase; + } + + /** + * Sets the software submission base path. + * + * @param softwareSubmissionBase the software submission base path. + * @since 1.1 + */ + public void setSoftwareSubmissionBase(String softwareSubmissionBase) { + this.softwareSubmissionBase = softwareSubmissionBase; + } + + /** + * Gets the work step id. + * + * @return the work step id. + */ + public String getWorkStepId() { + return workStepId; + } + + /** + * Sets the work step id. + * + * @param workStepId the work step id. + */ + public void setWorkStepId(String workStepId) { + this.workStepId = workStepId; + } + + /** + * Gets the demand work id. + * + * @return the demand work id. + */ + public String getDemandWorkId() { + return demandWorkId; + } + + /** + * Sets the demand work id. + * + * @param demandWorkId the demand work id. + */ + public void setDemandWorkId(String demandWorkId) { + this.demandWorkId = demandWorkId; + } + + /** + * Gets the MIME type retriever. + * + * @return the MIME type retriever. + */ + public MimeTypeRetriever getMimeTypeRetriever() { + return mimeTypeRetriever; + } + + /** + * Sets the MIME type retriever. + * + * @param mimeTypeRetriever the MIME type retriever. + */ + public void setMimeTypeRetriever(MimeTypeRetriever mimeTypeRetriever) { + this.mimeTypeRetriever = mimeTypeRetriever; + } + + public static class SubmissionPresentationFilter implements FilenameFilter { + + /** + *

A String providing the prefix for the filenames to be used for filtering the files.

+ */ + private String filenamePrefix = null; + + /** + *

Constructs new SubmissionPresentationFilter instance for finding the file matching the specified + * prefix.

+ * + * @param filenamePrefix a String providing the filter for file names. + * @since Studio Submission Slideshow + */ + public SubmissionPresentationFilter(String filenamePrefix) { + this.filenamePrefix = filenamePrefix; + } + + /** + *

Constructs new SubmissionPresentationFilter instance for finding the file for specified type + * of alternate presentation of specified submission.

+ * + * @param type a String referencing the type of requested alternate presentation. + * @param submissionId a Long providing the ID of a submission. + */ + public SubmissionPresentationFilter(String type, Long submissionId) { + this.filenamePrefix = submissionId + "_" + type + "."; + } + + /** + *

Tests if a specified file should be included in a file list.

+ * + * @param dir a File representing the directory in which the file was found. + * @param name a String providing name the name of the file. + * @return true if and only if the name should be included in the file list; false + * otherwise. + */ + public boolean accept(File dir, String name) { + return name.startsWith(this.filenamePrefix); + } + } +} diff --git a/src/java/main/com/topcoder/direct/services/view/util/AuthorizationProvider.java b/src/java/main/com/topcoder/direct/services/view/util/AuthorizationProvider.java index 3fd339a6f..7027c90f2 100644 --- a/src/java/main/com/topcoder/direct/services/view/util/AuthorizationProvider.java +++ b/src/java/main/com/topcoder/direct/services/view/util/AuthorizationProvider.java @@ -1,8 +1,9 @@ /* - * Copyright (C) 2010 - 2014 TopCoder Inc., All Rights Reserved. + * Copyright (C) 2010 - 2015 TopCoder Inc., All Rights Reserved. */ package com.topcoder.direct.services.view.util; +import com.topcoder.direct.services.view.dto.contest.ContestCopilotDTO; import com.topcoder.project.service.ProjectServices; import com.topcoder.security.TCSubject; import com.topcoder.security.groups.model.GroupPermissionType; @@ -16,6 +17,7 @@ import javax.servlet.ServletContext; import javax.servlet.http.HttpServletRequest; +import java.util.List; /** *

An utility class providing the methods for making authorization decisions.

@@ -73,8 +75,15 @@ * *

* + *

+ * Version 1.7 (TC Direct - ASP Integration Work Management) + *

    + *
  • Added method {@link #isUserGrantedToAccessWorkManager(TCSubject, long)}
  • + *
+ *

+ * * @author isv, GreatKevin - * @version 1.6 + * @version 1.7 */ public class AuthorizationProvider { @@ -254,4 +263,37 @@ public static boolean isUserGrantedToModifyMilestone(TCSubject tcSubject, long m final ResultSetContainer resultContainer = dataAccessor.getData(request).get("has_milestone_write_permission"); return resultContainer.size() > 0; } + + /** + *

+ * Checks if the specified user has permission to access work manager related. + *

+ * + * @param tcSubject a TCSubject providing the user subject. + * @param directProjectId a long providing the direct project ID. + * @return true if has permission, false otherwise. + * @throws Exception if any error. + * @since 1.7 + */ + public static boolean isUserGrantedToAccessWorkManager(TCSubject tcSubject, long directProjectId) throws Exception { + // check if user is one of the following roles, if yes, pass the permission checking and return + if (DirectUtils.isTcStaff(tcSubject) || DirectUtils.isTcOperations(tcSubject) || + DirectUtils.isTCPlatformSpecialist(tcSubject)) { + // pass permission checking + return true; + } + + // check if user is one of the copilot of the project + // 1) get the copilots of the project + List copilots = DataProvider.getCopilotsForDirectProject(directProjectId); + + for (ContestCopilotDTO copilot : copilots) { + if (copilot.getUserId() == tcSubject.getUserId()) { + // pass permission checking + return true; + } + } + + return false; + } } diff --git a/src/java/main/com/topcoder/direct/services/view/util/DataProvider.java b/src/java/main/com/topcoder/direct/services/view/util/DataProvider.java index 84cc0d1e5..0112b3362 100644 --- a/src/java/main/com/topcoder/direct/services/view/util/DataProvider.java +++ b/src/java/main/com/topcoder/direct/services/view/util/DataProvider.java @@ -1437,7 +1437,8 @@ public static LatestActivitiesDTO getLatestActivitiesForUserProjects(long userId final Map projects = new HashMap(); final Map contests = new HashMap();//here - final ResultSetContainer resultContainer = dataAccessor.getData(request).get("direct_latest_activities_replatforming"); + final ResultSetContainer resultContainer = dataAccessor.getData(request).get( + "direct_latest_activities_replatforming"); final int recordNum = resultContainer.size(); for (int i = 0; i < recordNum; i++) { @@ -2043,7 +2044,7 @@ private static List getLatestThreePosters(String lastPosters) throw public static List searchUserContests(TCSubject tcSubject, String searchFor, final Date begin, final Date end) throws Exception { List contests = DirectUtils.getContestServiceFacade().getCommonProjectContestData( - tcSubject); + tcSubject); List filteredContests; if (StringUtils.isBlank(searchFor) && begin == null && end == null) { filteredContests = contests; @@ -2416,7 +2417,7 @@ public static void getDashboardProjectMetricsReport(TCSubject currentUser, long stats.setTotalBudget(row.getStringItem("total_budget")); stats.setActualCost(row.getDoubleItem("actual_cost")); stats.setStartDate(getDate(row,"create_date")); - stats.setCompletionDate(getDate(row,"completion_date")); + stats.setCompletionDate(getDate(row, "completion_date")); stats.setTotalContests(row.getIntItem("total_number")); // draft @@ -2440,8 +2441,8 @@ public static void getDashboardProjectMetricsReport(TCSubject currentUser, long stats.setCostCanceled(row.getDoubleItem("cost_cancelled")); stats.setProjectedCost(row.getDoubleItem("cost_draft") + row.getDoubleItem("cost_scheduled") + - row.getDoubleItem("cost_active") + row.getDoubleItem("cost_finished") + - row.getDoubleItem("cost_cancelled") + row.getDoubleItem("project_level_cost")); + row.getDoubleItem("cost_active") + row.getDoubleItem("cost_finished") + + row.getDoubleItem("cost_cancelled") + row.getDoubleItem("project_level_cost")); stats.setPlannedCost(row.getDoubleItem("planned_cost")); statses.add(stats); @@ -3006,7 +3007,8 @@ public static List getProjectTypedContests(long userId, lo final Map projects = new HashMap(); final List contests = new ArrayList(); - final ResultSetContainer resultContainer = dataAccessor.getData(request).get("direct_my_typed_contests_replatforming"); + final ResultSetContainer resultContainer = dataAccessor.getData(request).get( + "direct_my_typed_contests_replatforming"); final int recordNum = resultContainer.size(); for (int i = 0; i < recordNum; i++) { long tcDirectProjectId = resultContainer.getLongItem(i, "tc_direct_project_id"); @@ -7282,7 +7284,7 @@ public static List getEnterpriseDashboardCo String phases = resultContainer.getStringItem(i, "phases"); long monthCount = resultContainer.getLongItem(i, "monthcount"); - EnterpriseDashboardMonthPipelineDTO item = resultMap.get((monthCount/100) * 12 + (monthCount % 100) -1); + EnterpriseDashboardMonthPipelineDTO item = resultMap.get((monthCount / 100) * 12 + (monthCount % 100) - 1); if (currentPhase != null && ((String)status).equalsIgnoreCase(ProjectStatus.ACTIVE.getName())) { // active @@ -7499,7 +7501,7 @@ else if (((String)status).equalsIgnoreCase(ProjectStatus.DRAFT.getName())) long monthCount = resultContainer.getLongItem(i, "monthcount"); EnterpriseDashboardMonthProjectPipelineDTO item = - resultMap.get((monthCount/100) * 12 + (monthCount % 100) -1); + resultMap.get((monthCount / 100) * 12 + (monthCount % 100) - 1); if (projectStatusId == 4L) { item.setTotalCompletedProjects(item.getTotalCompletedProjects() + 1); @@ -7914,6 +7916,36 @@ public static InputStream generateWinnerSheet(long tcDirectProjectId) throws Exc return new ByteArrayInputStream(saveTo.toByteArray()); } + /** + * Gets the demand work id of the direct project, return null if the project does not exist or the direct project does not + * demand work id. + * + * @param tcDirectProjectId the id of the direct project + * @return the demand work id of the direct project or null the project does not exist or the direct project does not + * demand work id. + * @throws Exception if any error + */ + public static String getDirectProjectDemandWorkId(long tcDirectProjectId) throws Exception { + DataAccess dataAccessor = new DataAccess(DBMS.TCS_OLTP_DATASOURCE_NAME); + Request request = new Request(); + // this refers to a query tool command/query + request.setContentHandle("demand_work_id"); + request.setProperty("tcdirectid", String.valueOf(tcDirectProjectId)); + ResultSetContainer resultSetContainer = dataAccessor.getData(request).get("demand_work_id"); + + + if (resultSetContainer != null && resultSetContainer.size() > 0) { + ResultSetRow resultSetRow = resultSetContainer.get(0); + if (resultSetRow.getItem("demand_work_id").getResultData() != null) { + return resultSetRow.getStringItem("demand_work_id"); + } else { + return null; + } + } + + return null; + } + /** *

Generates the Excel worksheet with results for contests for specified TC Direct * project.

diff --git a/src/java/main/com/topcoder/direct/services/view/util/DirectUtils.java b/src/java/main/com/topcoder/direct/services/view/util/DirectUtils.java index 6e2beb0cb..02855a25d 100644 --- a/src/java/main/com/topcoder/direct/services/view/util/DirectUtils.java +++ b/src/java/main/com/topcoder/direct/services/view/util/DirectUtils.java @@ -854,7 +854,7 @@ public final class DirectUtils { * * @since 1.8.5 */ - private static final int FINAL_FIX_UPLOAD_TYPE_ID = 3; + public static final int FINAL_FIX_UPLOAD_TYPE_ID = 3; private static final String IS_CLIENT_USER_SQL = "SELECT client_id FROM client_user_xref cux, user_account ua, common_oltp:user u" + " WHERE cux.user_id = ua.user_account_id AND UPPER(ua.user_name) = UPPER(u.handle) AND u.user_id = ?"; @@ -1176,7 +1176,10 @@ public static List getStudioSubmissionArtifacts(long submissionId) throw List names = new ArrayList(); for (int i = 0; i < recordNum; i++) { - names.add(resultContainer.getStringItem(i, "file_name")); + long imageTypeId = resultContainer.getLongItem(i, "image_type_id"); + if(imageTypeId == 30L) { + names.add(resultContainer.getStringItem(i, "file_name")); + } } return names; diff --git a/src/java/main/com/topcoder/direct/services/view/util/JSPHelper.java b/src/java/main/com/topcoder/direct/services/view/util/JSPHelper.java index 3a26fd4e9..28892e7f7 100644 --- a/src/java/main/com/topcoder/direct/services/view/util/JSPHelper.java +++ b/src/java/main/com/topcoder/direct/services/view/util/JSPHelper.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2010-2013 TopCoder Inc., All Rights Reserved. + * Copyright (C) 2010 - 2015 TopCoder Inc., All Rights Reserved. */ package com.topcoder.direct.services.view.util; @@ -15,10 +15,10 @@ import com.topcoder.security.groups.services.dto.UserDTO; import com.topcoder.service.pipeline.CommonPipelineData; import com.topcoder.service.user.UserServiceException; +import com.topcoder.shared.util.ApplicationServer; import org.apache.commons.io.FileUtils; import org.springframework.web.context.WebApplicationContext; import org.springframework.web.context.support.WebApplicationContextUtils; -import com.topcoder.shared.util.ApplicationServer; import javax.servlet.ServletContext; import javax.servlet.http.HttpServletRequest; @@ -28,8 +28,8 @@ import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; -import java.util.List; import java.util.HashMap; +import java.util.List; import java.util.Map; /** @@ -135,8 +135,15 @@ * *

* + *

+ * Version 1.3.4 (TC Direct - ASP Integration Work Management) + *

    + *
  • Added method {@link #hasPermissionToAccessWorkManager(long)}
  • + *
+ *

+ * * @author isv, pvmagacho, flexme, GreatKevin, FireIce, GreatKevin - * @version 1.3.3 + * @version 1.3.4 */ public class JSPHelper { @@ -649,6 +656,29 @@ public static boolean hasWriteProjectPermission(long projectId) throws Exception return AuthorizationProvider.isUserGrantedWriteAccessToProject(DirectUtils.getTCSubjectFromSession(), projectId); } + /** + * Checks whether current user has permission to access work manager. + * + * @param projectId the id of the given project. + * @return true if current user has write permission on the given project, false otherwise. + * @throws Exception if any error occurs. + * @since 1.3.4 + */ + public static boolean hasPermissionToAccessWorkManager(long projectId) throws Exception { + return AuthorizationProvider.isUserGrantedToAccessWorkManager(DirectUtils.getTCSubjectFromSession(), projectId); + } + + /** + * Gets the demand work id of the specified direct project. + * + * @param projectId the id of the direct project. + * @return the demand work id, null if no exist or no demand work id. + * @throws Exception if any error occurs. + */ + public static String getDirectProjectDemandWorkId(long projectId) throws Exception { + return DataProvider.getDirectProjectDemandWorkId(projectId); + } + /** * Gets the current login user id. * diff --git a/src/web/WEB-INF/includes/newHeader.jsp b/src/web/WEB-INF/includes/newHeader.jsp index df40d3236..566dec1b1 100644 --- a/src/web/WEB-INF/includes/newHeader.jsp +++ b/src/web/WEB-INF/includes/newHeader.jsp @@ -14,6 +14,9 @@ - Version 1.3 (TopCoder Direct - My Created Challenges) - - Add "My" in top nav - + - Version 1.4 (TC Direct - ASP Integration Work Management) + - - Add "Work Manager" for project dashboard. + - - Description: The new cockpit header and navigation. --%> <%@ page import="com.topcoder.direct.services.configs.ServerConfiguration" %> @@ -483,8 +486,18 @@ "> Tasks
  • class="active"> - ">VM Management + ">VM Management
  • + + + + + +
  • class="active"> + ">Work Manager +
  • +
    + diff --git a/src/web/WEB-INF/project-work-management.jsp b/src/web/WEB-INF/project-work-management.jsp new file mode 100644 index 000000000..a3af31ad1 --- /dev/null +++ b/src/web/WEB-INF/project-work-management.jsp @@ -0,0 +1,160 @@ +<%@ page import="com.topcoder.shared.util.ApplicationServer" %> +<%-- + - Author: TCSASSEMBLER + - + - Version: 1.0 (TC Direct - ASP Integration Work Management) + - Copyright (C) 2015 TopCoder Inc., All Rights Reserved. + - + - Description: This page renders the project work step management view. +--%> +<%@ page contentType="text/html;charset=UTF-8" language="java" %> +<%@ include file="/WEB-INF/includes/taglibs.jsp" %> + + + + + Topcoder Direct + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    +
    +
    + + + +
    + + + + +
    + + +
    + +
    + + +
    + + <% + String[] splits = ApplicationServer.SERVER_NAME.split("."); + String topServerName = "topcoder.com"; + if (splits != null && splits.length >= 2) { + topServerName = splits[splits.length - 2] + "." + splits[splits.length - 1]; + } + %> + +

    Work Management

    Work Manager Project +
    + + +
    + + +
    + +
    + +
    + + + + +
    + +
    + +
    + +
    + + + + diff --git a/src/web/css/direct/hcolumns.css b/src/web/css/direct/hcolumns.css new file mode 100644 index 000000000..313a13a4d --- /dev/null +++ b/src/web/css/direct/hcolumns.css @@ -0,0 +1,128 @@ +/* column view container */ +.column-view-container { + width: 70%; + height: 400px; + padding: 0; + border: 1px solid #ccc; + background: #FFF; + display: block; + overflow-x: auto; + overflow-y: hidden; + margin-top: 25px; + margin-bottom: 40px; + font-size: 13px; + float: left; +} + +#pushButtonDiv { + float: left; + width: 25%; + height: 400px; +} + +#pushButtonDiv a { + position: relative; + top: 50%; + left: 20%; + display: none; + padding: 3px 7px !important; +} + +/* the composition div for colums */ +.column-view-composition { + display: table; + white-space: nowrap; +} + +/**/ +.column { + display: table-cell; + border-right: 1px solid #999; +} + +.column:last-child { + border-right: 0; +} + +.column:only-child { + border-right: 1px solid #999; +} + +/* for error messages */ +.column > p { + margin: 10px; + color: #666; +} + +/* for column listing */ +.column ul { + margin: 0; + padding: 0; + height: 400px; + overflow-y: auto; + list-style: none; +} + +.column ul li { + position: relative; + margin: 0; + padding: 10px 20px 10px 10px; + overflow: hidden; + -o-text-overflow: ellipsis; /* pour Opera 9 */ + text-overflow: ellipsis; /* pour le reste du monde */ +} + +.column ul li:hover { + cursor: pointer; +} + +.column ul li i { + position: absolute; + top: 9px; + right: 5px; +} + +.column ul li:hover, .column ul li.active { + background: #999999; + color: #FFFFFF; +} + +.column ul li:hover a, .column ul li.active a { + color: #FFFFFF; +} + +.column ul li.search { + margin: 0; + padding: 5px; +} + +.column ul li.search input { + width: 100%; + margin: 0; +} + +/* icon type, could be replace with FontAwesome */ +[class^="icon-"], [class*=" icon-"] { + display: inline-block; + width: 14px; + height: 14px; + margin-top: 1px; + *margin-right: .3em; + line-height: 14px; + vertical-align: text-top; + background-image: url("../../images/glyphicons-halflings.png"); + background-position: 14px 14px; + background-repeat: no-repeat; +} + +.icon-chevron-right { + background-position: -456px -72px; +} + +.icon-globe { + background-position: -336px -144px; +} + +.icon-file { + background-position: -23px -24px; +} diff --git a/src/web/images/glyphicons-halflings.png b/src/web/images/glyphicons-halflings.png new file mode 100644 index 000000000..a99699932 Binary files /dev/null and b/src/web/images/glyphicons-halflings.png differ diff --git a/src/web/scripts/jquery-1.11.1.min.js b/src/web/scripts/jquery-1.11.1.min.js new file mode 100644 index 000000000..ab28a2472 --- /dev/null +++ b/src/web/scripts/jquery-1.11.1.min.js @@ -0,0 +1,4 @@ +/*! jQuery v1.11.1 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */ +!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=c.slice,e=c.concat,f=c.push,g=c.indexOf,h={},i=h.toString,j=h.hasOwnProperty,k={},l="1.11.1",m=function(a,b){return new m.fn.init(a,b)},n=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,o=/^-ms-/,p=/-([\da-z])/gi,q=function(a,b){return b.toUpperCase()};m.fn=m.prototype={jquery:l,constructor:m,selector:"",length:0,toArray:function(){return d.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:d.call(this)},pushStack:function(a){var b=m.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return m.each(this,a,b)},map:function(a){return this.pushStack(m.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:c.sort,splice:c.splice},m.extend=m.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||m.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(e=arguments[h]))for(d in e)a=g[d],c=e[d],g!==c&&(j&&c&&(m.isPlainObject(c)||(b=m.isArray(c)))?(b?(b=!1,f=a&&m.isArray(a)?a:[]):f=a&&m.isPlainObject(a)?a:{},g[d]=m.extend(j,f,c)):void 0!==c&&(g[d]=c));return g},m.extend({expando:"jQuery"+(l+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===m.type(a)},isArray:Array.isArray||function(a){return"array"===m.type(a)},isWindow:function(a){return null!=a&&a==a.window},isNumeric:function(a){return!m.isArray(a)&&a-parseFloat(a)>=0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},isPlainObject:function(a){var b;if(!a||"object"!==m.type(a)||a.nodeType||m.isWindow(a))return!1;try{if(a.constructor&&!j.call(a,"constructor")&&!j.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}if(k.ownLast)for(b in a)return j.call(a,b);for(b in a);return void 0===b||j.call(a,b)},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?h[i.call(a)]||"object":typeof a},globalEval:function(b){b&&m.trim(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(o,"ms-").replace(p,q)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,c){var d,e=0,f=a.length,g=r(a);if(c){if(g){for(;f>e;e++)if(d=b.apply(a[e],c),d===!1)break}else for(e in a)if(d=b.apply(a[e],c),d===!1)break}else if(g){for(;f>e;e++)if(d=b.call(a[e],e,a[e]),d===!1)break}else for(e in a)if(d=b.call(a[e],e,a[e]),d===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(n,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(r(Object(a))?m.merge(c,"string"==typeof a?[a]:a):f.call(c,a)),c},inArray:function(a,b,c){var d;if(b){if(g)return g.call(b,a,c);for(d=b.length,c=c?0>c?Math.max(0,d+c):c:0;d>c;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,b){var c=+b.length,d=0,e=a.length;while(c>d)a[e++]=b[d++];if(c!==c)while(void 0!==b[d])a[e++]=b[d++];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,f=0,g=a.length,h=r(a),i=[];if(h)for(;g>f;f++)d=b(a[f],f,c),null!=d&&i.push(d);else for(f in a)d=b(a[f],f,c),null!=d&&i.push(d);return e.apply([],i)},guid:1,proxy:function(a,b){var c,e,f;return"string"==typeof b&&(f=a[b],b=a,a=f),m.isFunction(a)?(c=d.call(arguments,2),e=function(){return a.apply(b||this,c.concat(d.call(arguments)))},e.guid=a.guid=a.guid||m.guid++,e):void 0},now:function(){return+new Date},support:k}),m.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){h["[object "+b+"]"]=b.toLowerCase()});function r(a){var b=a.length,c=m.type(a);return"function"===c||m.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var s=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+-new Date,v=a.document,w=0,x=0,y=gb(),z=gb(),A=gb(),B=function(a,b){return a===b&&(l=!0),0},C="undefined",D=1<<31,E={}.hasOwnProperty,F=[],G=F.pop,H=F.push,I=F.push,J=F.slice,K=F.indexOf||function(a){for(var b=0,c=this.length;c>b;b++)if(this[b]===a)return b;return-1},L="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",M="[\\x20\\t\\r\\n\\f]",N="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",O=N.replace("w","w#"),P="\\["+M+"*("+N+")(?:"+M+"*([*^$|!~]?=)"+M+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+O+"))|)"+M+"*\\]",Q=":("+N+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+P+")*)|.*)\\)|)",R=new RegExp("^"+M+"+|((?:^|[^\\\\])(?:\\\\.)*)"+M+"+$","g"),S=new RegExp("^"+M+"*,"+M+"*"),T=new RegExp("^"+M+"*([>+~]|"+M+")"+M+"*"),U=new RegExp("="+M+"*([^\\]'\"]*?)"+M+"*\\]","g"),V=new RegExp(Q),W=new RegExp("^"+O+"$"),X={ID:new RegExp("^#("+N+")"),CLASS:new RegExp("^\\.("+N+")"),TAG:new RegExp("^("+N.replace("w","w*")+")"),ATTR:new RegExp("^"+P),PSEUDO:new RegExp("^"+Q),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+L+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/^(?:input|select|textarea|button)$/i,Z=/^h\d$/i,$=/^[^{]+\{\s*\[native \w/,_=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ab=/[+~]/,bb=/'|\\/g,cb=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),db=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)};try{I.apply(F=J.call(v.childNodes),v.childNodes),F[v.childNodes.length].nodeType}catch(eb){I={apply:F.length?function(a,b){H.apply(a,J.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function fb(a,b,d,e){var f,h,j,k,l,o,r,s,w,x;if((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,d=d||[],!a||"string"!=typeof a)return d;if(1!==(k=b.nodeType)&&9!==k)return[];if(p&&!e){if(f=_.exec(a))if(j=f[1]){if(9===k){if(h=b.getElementById(j),!h||!h.parentNode)return d;if(h.id===j)return d.push(h),d}else if(b.ownerDocument&&(h=b.ownerDocument.getElementById(j))&&t(b,h)&&h.id===j)return d.push(h),d}else{if(f[2])return I.apply(d,b.getElementsByTagName(a)),d;if((j=f[3])&&c.getElementsByClassName&&b.getElementsByClassName)return I.apply(d,b.getElementsByClassName(j)),d}if(c.qsa&&(!q||!q.test(a))){if(s=r=u,w=b,x=9===k&&a,1===k&&"object"!==b.nodeName.toLowerCase()){o=g(a),(r=b.getAttribute("id"))?s=r.replace(bb,"\\$&"):b.setAttribute("id",s),s="[id='"+s+"'] ",l=o.length;while(l--)o[l]=s+qb(o[l]);w=ab.test(a)&&ob(b.parentNode)||b,x=o.join(",")}if(x)try{return I.apply(d,w.querySelectorAll(x)),d}catch(y){}finally{r||b.removeAttribute("id")}}}return i(a.replace(R,"$1"),b,d,e)}function gb(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function hb(a){return a[u]=!0,a}function ib(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function jb(a,b){var c=a.split("|"),e=a.length;while(e--)d.attrHandle[c[e]]=b}function kb(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||D)-(~a.sourceIndex||D);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function lb(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function mb(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function nb(a){return hb(function(b){return b=+b,hb(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function ob(a){return a&&typeof a.getElementsByTagName!==C&&a}c=fb.support={},f=fb.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=fb.setDocument=function(a){var b,e=a?a.ownerDocument||a:v,g=e.defaultView;return e!==n&&9===e.nodeType&&e.documentElement?(n=e,o=e.documentElement,p=!f(e),g&&g!==g.top&&(g.addEventListener?g.addEventListener("unload",function(){m()},!1):g.attachEvent&&g.attachEvent("onunload",function(){m()})),c.attributes=ib(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ib(function(a){return a.appendChild(e.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=$.test(e.getElementsByClassName)&&ib(function(a){return a.innerHTML="
    ",a.firstChild.className="i",2===a.getElementsByClassName("i").length}),c.getById=ib(function(a){return o.appendChild(a).id=u,!e.getElementsByName||!e.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if(typeof b.getElementById!==C&&p){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){var c=typeof a.getAttributeNode!==C&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return typeof b.getElementsByTagName!==C?b.getElementsByTagName(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return typeof b.getElementsByClassName!==C&&p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=$.test(e.querySelectorAll))&&(ib(function(a){a.innerHTML="",a.querySelectorAll("[msallowclip^='']").length&&q.push("[*^$]="+M+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+M+"*(?:value|"+L+")"),a.querySelectorAll(":checked").length||q.push(":checked")}),ib(function(a){var b=e.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+M+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=$.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ib(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",Q)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=$.test(o.compareDocumentPosition),t=b||$.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===e||a.ownerDocument===v&&t(v,a)?-1:b===e||b.ownerDocument===v&&t(v,b)?1:k?K.call(k,a)-K.call(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,f=a.parentNode,g=b.parentNode,h=[a],i=[b];if(!f||!g)return a===e?-1:b===e?1:f?-1:g?1:k?K.call(k,a)-K.call(k,b):0;if(f===g)return kb(a,b);c=a;while(c=c.parentNode)h.unshift(c);c=b;while(c=c.parentNode)i.unshift(c);while(h[d]===i[d])d++;return d?kb(h[d],i[d]):h[d]===v?-1:i[d]===v?1:0},e):n},fb.matches=function(a,b){return fb(a,null,null,b)},fb.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(U,"='$1']"),!(!c.matchesSelector||!p||r&&r.test(b)||q&&q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return fb(b,n,null,[a]).length>0},fb.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},fb.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&E.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},fb.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},fb.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=fb.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=fb.selectors={cacheLength:50,createPseudo:hb,match:X,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(cb,db),a[3]=(a[3]||a[4]||a[5]||"").replace(cb,db),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||fb.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&fb.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return X.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&V.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(cb,db).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+M+")"+a+"("+M+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||typeof a.getAttribute!==C&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=fb.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h;if(q){if(f){while(p){l=b;while(l=l[p])if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){k=q[u]||(q[u]={}),j=k[a]||[],n=j[0]===w&&j[1],m=j[0]===w&&j[2],l=n&&q.childNodes[n];while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if(1===l.nodeType&&++m&&l===b){k[a]=[w,n,m];break}}else if(s&&(j=(b[u]||(b[u]={}))[a])&&j[0]===w)m=j[1];else while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if((h?l.nodeName.toLowerCase()===r:1===l.nodeType)&&++m&&(s&&((l[u]||(l[u]={}))[a]=[w,m]),l===b))break;return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||fb.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?hb(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=K.call(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:hb(function(a){var b=[],c=[],d=h(a.replace(R,"$1"));return d[u]?hb(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),!c.pop()}}),has:hb(function(a){return function(b){return fb(a,b).length>0}}),contains:hb(function(a){return function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:hb(function(a){return W.test(a||"")||fb.error("unsupported lang: "+a),a=a.replace(cb,db).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Z.test(a.nodeName)},input:function(a){return Y.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:nb(function(){return[0]}),last:nb(function(a,b){return[b-1]}),eq:nb(function(a,b,c){return[0>c?c+b:c]}),even:nb(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:nb(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:nb(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:nb(function(a,b,c){for(var d=0>c?c+b:c;++db;b++)d+=a[b].value;return d}function rb(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(i=b[u]||(b[u]={}),(h=i[d])&&h[0]===w&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function sb(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function tb(a,b,c){for(var d=0,e=b.length;e>d;d++)fb(a,b[d],c);return c}function ub(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function vb(a,b,c,d,e,f){return d&&!d[u]&&(d=vb(d)),e&&!e[u]&&(e=vb(e,f)),hb(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||tb(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:ub(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=ub(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?K.call(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=ub(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):I.apply(g,r)})}function wb(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=rb(function(a){return a===b},h,!0),l=rb(function(a){return K.call(b,a)>-1},h,!0),m=[function(a,c,d){return!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d))}];f>i;i++)if(c=d.relative[a[i].type])m=[rb(sb(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return vb(i>1&&sb(m),i>1&&qb(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(R,"$1"),c,e>i&&wb(a.slice(i,e)),f>e&&wb(a=a.slice(e)),f>e&&qb(a))}m.push(c)}return sb(m)}function xb(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,m,o,p=0,q="0",r=f&&[],s=[],t=j,u=f||e&&d.find.TAG("*",k),v=w+=null==t?1:Math.random()||.1,x=u.length;for(k&&(j=g!==n&&g);q!==x&&null!=(l=u[q]);q++){if(e&&l){m=0;while(o=a[m++])if(o(l,g,h)){i.push(l);break}k&&(w=v)}c&&((l=!o&&l)&&p--,f&&r.push(l))}if(p+=q,c&&q!==p){m=0;while(o=b[m++])o(r,s,g,h);if(f){if(p>0)while(q--)r[q]||s[q]||(s[q]=G.call(i));s=ub(s)}I.apply(i,s),k&&!f&&s.length>0&&p+b.length>1&&fb.uniqueSort(i)}return k&&(w=v,j=t),r};return c?hb(f):f}return h=fb.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=wb(b[c]),f[u]?d.push(f):e.push(f);f=A(a,xb(e,d)),f.selector=a}return f},i=fb.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(cb,db),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=X.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(cb,db),ab.test(j[0].type)&&ob(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&qb(j),!a)return I.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,ab.test(a)&&ob(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ib(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),ib(function(a){return a.innerHTML="","#"===a.firstChild.getAttribute("href")})||jb("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ib(function(a){return a.innerHTML="",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||jb("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ib(function(a){return null==a.getAttribute("disabled")})||jb(L,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),fb}(a);m.find=s,m.expr=s.selectors,m.expr[":"]=m.expr.pseudos,m.unique=s.uniqueSort,m.text=s.getText,m.isXMLDoc=s.isXML,m.contains=s.contains;var t=m.expr.match.needsContext,u=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,v=/^.[^:#\[\.,]*$/;function w(a,b,c){if(m.isFunction(b))return m.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return m.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(v.test(b))return m.filter(b,a,c);b=m.filter(b,a)}return m.grep(a,function(a){return m.inArray(a,b)>=0!==c})}m.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?m.find.matchesSelector(d,a)?[d]:[]:m.find.matches(a,m.grep(b,function(a){return 1===a.nodeType}))},m.fn.extend({find:function(a){var b,c=[],d=this,e=d.length;if("string"!=typeof a)return this.pushStack(m(a).filter(function(){for(b=0;e>b;b++)if(m.contains(d[b],this))return!0}));for(b=0;e>b;b++)m.find(a,d[b],c);return c=this.pushStack(e>1?m.unique(c):c),c.selector=this.selector?this.selector+" "+a:a,c},filter:function(a){return this.pushStack(w(this,a||[],!1))},not:function(a){return this.pushStack(w(this,a||[],!0))},is:function(a){return!!w(this,"string"==typeof a&&t.test(a)?m(a):a||[],!1).length}});var x,y=a.document,z=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,A=m.fn.init=function(a,b){var c,d;if(!a)return this;if("string"==typeof a){if(c="<"===a.charAt(0)&&">"===a.charAt(a.length-1)&&a.length>=3?[null,a,null]:z.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||x).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof m?b[0]:b,m.merge(this,m.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:y,!0)),u.test(c[1])&&m.isPlainObject(b))for(c in b)m.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}if(d=y.getElementById(c[2]),d&&d.parentNode){if(d.id!==c[2])return x.find(a);this.length=1,this[0]=d}return this.context=y,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):m.isFunction(a)?"undefined"!=typeof x.ready?x.ready(a):a(m):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),m.makeArray(a,this))};A.prototype=m.fn,x=m(y);var B=/^(?:parents|prev(?:Until|All))/,C={children:!0,contents:!0,next:!0,prev:!0};m.extend({dir:function(a,b,c){var d=[],e=a[b];while(e&&9!==e.nodeType&&(void 0===c||1!==e.nodeType||!m(e).is(c)))1===e.nodeType&&d.push(e),e=e[b];return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),m.fn.extend({has:function(a){var b,c=m(a,this),d=c.length;return this.filter(function(){for(b=0;d>b;b++)if(m.contains(this,c[b]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=t.test(a)||"string"!=typeof a?m(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&m.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?m.unique(f):f)},index:function(a){return a?"string"==typeof a?m.inArray(this[0],m(a)):m.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(m.unique(m.merge(this.get(),m(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function D(a,b){do a=a[b];while(a&&1!==a.nodeType);return a}m.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return m.dir(a,"parentNode")},parentsUntil:function(a,b,c){return m.dir(a,"parentNode",c)},next:function(a){return D(a,"nextSibling")},prev:function(a){return D(a,"previousSibling")},nextAll:function(a){return m.dir(a,"nextSibling")},prevAll:function(a){return m.dir(a,"previousSibling")},nextUntil:function(a,b,c){return m.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return m.dir(a,"previousSibling",c)},siblings:function(a){return m.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return m.sibling(a.firstChild)},contents:function(a){return m.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:m.merge([],a.childNodes)}},function(a,b){m.fn[a]=function(c,d){var e=m.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=m.filter(d,e)),this.length>1&&(C[a]||(e=m.unique(e)),B.test(a)&&(e=e.reverse())),this.pushStack(e)}});var E=/\S+/g,F={};function G(a){var b=F[a]={};return m.each(a.match(E)||[],function(a,c){b[c]=!0}),b}m.Callbacks=function(a){a="string"==typeof a?F[a]||G(a):m.extend({},a);var b,c,d,e,f,g,h=[],i=!a.once&&[],j=function(l){for(c=a.memory&&l,d=!0,f=g||0,g=0,e=h.length,b=!0;h&&e>f;f++)if(h[f].apply(l[0],l[1])===!1&&a.stopOnFalse){c=!1;break}b=!1,h&&(i?i.length&&j(i.shift()):c?h=[]:k.disable())},k={add:function(){if(h){var d=h.length;!function f(b){m.each(b,function(b,c){var d=m.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&f(c)})}(arguments),b?e=h.length:c&&(g=d,j(c))}return this},remove:function(){return h&&m.each(arguments,function(a,c){var d;while((d=m.inArray(c,h,d))>-1)h.splice(d,1),b&&(e>=d&&e--,f>=d&&f--)}),this},has:function(a){return a?m.inArray(a,h)>-1:!(!h||!h.length)},empty:function(){return h=[],e=0,this},disable:function(){return h=i=c=void 0,this},disabled:function(){return!h},lock:function(){return i=void 0,c||k.disable(),this},locked:function(){return!i},fireWith:function(a,c){return!h||d&&!i||(c=c||[],c=[a,c.slice?c.slice():c],b?i.push(c):j(c)),this},fire:function(){return k.fireWith(this,arguments),this},fired:function(){return!!d}};return k},m.extend({Deferred:function(a){var b=[["resolve","done",m.Callbacks("once memory"),"resolved"],["reject","fail",m.Callbacks("once memory"),"rejected"],["notify","progress",m.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return m.Deferred(function(c){m.each(b,function(b,f){var g=m.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&m.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?m.extend(a,d):d}},e={};return d.pipe=d.then,m.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=d.call(arguments),e=c.length,f=1!==e||a&&m.isFunction(a.promise)?e:0,g=1===f?a:m.Deferred(),h=function(a,b,c){return function(e){b[a]=this,c[a]=arguments.length>1?d.call(arguments):e,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(e>1)for(i=new Array(e),j=new Array(e),k=new Array(e);e>b;b++)c[b]&&m.isFunction(c[b].promise)?c[b].promise().done(h(b,k,c)).fail(g.reject).progress(h(b,j,i)):--f;return f||g.resolveWith(k,c),g.promise()}});var H;m.fn.ready=function(a){return m.ready.promise().done(a),this},m.extend({isReady:!1,readyWait:1,holdReady:function(a){a?m.readyWait++:m.ready(!0)},ready:function(a){if(a===!0?!--m.readyWait:!m.isReady){if(!y.body)return setTimeout(m.ready);m.isReady=!0,a!==!0&&--m.readyWait>0||(H.resolveWith(y,[m]),m.fn.triggerHandler&&(m(y).triggerHandler("ready"),m(y).off("ready")))}}});function I(){y.addEventListener?(y.removeEventListener("DOMContentLoaded",J,!1),a.removeEventListener("load",J,!1)):(y.detachEvent("onreadystatechange",J),a.detachEvent("onload",J))}function J(){(y.addEventListener||"load"===event.type||"complete"===y.readyState)&&(I(),m.ready())}m.ready.promise=function(b){if(!H)if(H=m.Deferred(),"complete"===y.readyState)setTimeout(m.ready);else if(y.addEventListener)y.addEventListener("DOMContentLoaded",J,!1),a.addEventListener("load",J,!1);else{y.attachEvent("onreadystatechange",J),a.attachEvent("onload",J);var c=!1;try{c=null==a.frameElement&&y.documentElement}catch(d){}c&&c.doScroll&&!function e(){if(!m.isReady){try{c.doScroll("left")}catch(a){return setTimeout(e,50)}I(),m.ready()}}()}return H.promise(b)};var K="undefined",L;for(L in m(k))break;k.ownLast="0"!==L,k.inlineBlockNeedsLayout=!1,m(function(){var a,b,c,d;c=y.getElementsByTagName("body")[0],c&&c.style&&(b=y.createElement("div"),d=y.createElement("div"),d.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(d).appendChild(b),typeof b.style.zoom!==K&&(b.style.cssText="display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1",k.inlineBlockNeedsLayout=a=3===b.offsetWidth,a&&(c.style.zoom=1)),c.removeChild(d))}),function(){var a=y.createElement("div");if(null==k.deleteExpando){k.deleteExpando=!0;try{delete a.test}catch(b){k.deleteExpando=!1}}a=null}(),m.acceptData=function(a){var b=m.noData[(a.nodeName+" ").toLowerCase()],c=+a.nodeType||1;return 1!==c&&9!==c?!1:!b||b!==!0&&a.getAttribute("classid")===b};var M=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,N=/([A-Z])/g;function O(a,b,c){if(void 0===c&&1===a.nodeType){var d="data-"+b.replace(N,"-$1").toLowerCase();if(c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:M.test(c)?m.parseJSON(c):c}catch(e){}m.data(a,b,c)}else c=void 0}return c}function P(a){var b;for(b in a)if(("data"!==b||!m.isEmptyObject(a[b]))&&"toJSON"!==b)return!1;return!0}function Q(a,b,d,e){if(m.acceptData(a)){var f,g,h=m.expando,i=a.nodeType,j=i?m.cache:a,k=i?a[h]:a[h]&&h; +if(k&&j[k]&&(e||j[k].data)||void 0!==d||"string"!=typeof b)return k||(k=i?a[h]=c.pop()||m.guid++:h),j[k]||(j[k]=i?{}:{toJSON:m.noop}),("object"==typeof b||"function"==typeof b)&&(e?j[k]=m.extend(j[k],b):j[k].data=m.extend(j[k].data,b)),g=j[k],e||(g.data||(g.data={}),g=g.data),void 0!==d&&(g[m.camelCase(b)]=d),"string"==typeof b?(f=g[b],null==f&&(f=g[m.camelCase(b)])):f=g,f}}function R(a,b,c){if(m.acceptData(a)){var d,e,f=a.nodeType,g=f?m.cache:a,h=f?a[m.expando]:m.expando;if(g[h]){if(b&&(d=c?g[h]:g[h].data)){m.isArray(b)?b=b.concat(m.map(b,m.camelCase)):b in d?b=[b]:(b=m.camelCase(b),b=b in d?[b]:b.split(" ")),e=b.length;while(e--)delete d[b[e]];if(c?!P(d):!m.isEmptyObject(d))return}(c||(delete g[h].data,P(g[h])))&&(f?m.cleanData([a],!0):k.deleteExpando||g!=g.window?delete g[h]:g[h]=null)}}}m.extend({cache:{},noData:{"applet ":!0,"embed ":!0,"object ":"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(a){return a=a.nodeType?m.cache[a[m.expando]]:a[m.expando],!!a&&!P(a)},data:function(a,b,c){return Q(a,b,c)},removeData:function(a,b){return R(a,b)},_data:function(a,b,c){return Q(a,b,c,!0)},_removeData:function(a,b){return R(a,b,!0)}}),m.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=m.data(f),1===f.nodeType&&!m._data(f,"parsedAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=m.camelCase(d.slice(5)),O(f,d,e[d])));m._data(f,"parsedAttrs",!0)}return e}return"object"==typeof a?this.each(function(){m.data(this,a)}):arguments.length>1?this.each(function(){m.data(this,a,b)}):f?O(f,a,m.data(f,a)):void 0},removeData:function(a){return this.each(function(){m.removeData(this,a)})}}),m.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=m._data(a,b),c&&(!d||m.isArray(c)?d=m._data(a,b,m.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=m.queue(a,b),d=c.length,e=c.shift(),f=m._queueHooks(a,b),g=function(){m.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return m._data(a,c)||m._data(a,c,{empty:m.Callbacks("once memory").add(function(){m._removeData(a,b+"queue"),m._removeData(a,c)})})}}),m.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.lengthh;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},W=/^(?:checkbox|radio)$/i;!function(){var a=y.createElement("input"),b=y.createElement("div"),c=y.createDocumentFragment();if(b.innerHTML="
    a",k.leadingWhitespace=3===b.firstChild.nodeType,k.tbody=!b.getElementsByTagName("tbody").length,k.htmlSerialize=!!b.getElementsByTagName("link").length,k.html5Clone="<:nav>"!==y.createElement("nav").cloneNode(!0).outerHTML,a.type="checkbox",a.checked=!0,c.appendChild(a),k.appendChecked=a.checked,b.innerHTML="",k.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue,c.appendChild(b),b.innerHTML="",k.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,k.noCloneEvent=!0,b.attachEvent&&(b.attachEvent("onclick",function(){k.noCloneEvent=!1}),b.cloneNode(!0).click()),null==k.deleteExpando){k.deleteExpando=!0;try{delete b.test}catch(d){k.deleteExpando=!1}}}(),function(){var b,c,d=y.createElement("div");for(b in{submit:!0,change:!0,focusin:!0})c="on"+b,(k[b+"Bubbles"]=c in a)||(d.setAttribute(c,"t"),k[b+"Bubbles"]=d.attributes[c].expando===!1);d=null}();var X=/^(?:input|select|textarea)$/i,Y=/^key/,Z=/^(?:mouse|pointer|contextmenu)|click/,$=/^(?:focusinfocus|focusoutblur)$/,_=/^([^.]*)(?:\.(.+)|)$/;function ab(){return!0}function bb(){return!1}function cb(){try{return y.activeElement}catch(a){}}m.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,n,o,p,q,r=m._data(a);if(r){c.handler&&(i=c,c=i.handler,e=i.selector),c.guid||(c.guid=m.guid++),(g=r.events)||(g=r.events={}),(k=r.handle)||(k=r.handle=function(a){return typeof m===K||a&&m.event.triggered===a.type?void 0:m.event.dispatch.apply(k.elem,arguments)},k.elem=a),b=(b||"").match(E)||[""],h=b.length;while(h--)f=_.exec(b[h])||[],o=q=f[1],p=(f[2]||"").split(".").sort(),o&&(j=m.event.special[o]||{},o=(e?j.delegateType:j.bindType)||o,j=m.event.special[o]||{},l=m.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&m.expr.match.needsContext.test(e),namespace:p.join(".")},i),(n=g[o])||(n=g[o]=[],n.delegateCount=0,j.setup&&j.setup.call(a,d,p,k)!==!1||(a.addEventListener?a.addEventListener(o,k,!1):a.attachEvent&&a.attachEvent("on"+o,k))),j.add&&(j.add.call(a,l),l.handler.guid||(l.handler.guid=c.guid)),e?n.splice(n.delegateCount++,0,l):n.push(l),m.event.global[o]=!0);a=null}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,n,o,p,q,r=m.hasData(a)&&m._data(a);if(r&&(k=r.events)){b=(b||"").match(E)||[""],j=b.length;while(j--)if(h=_.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=m.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,n=k[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),i=f=n.length;while(f--)g=n[f],!e&&q!==g.origType||c&&c.guid!==g.guid||h&&!h.test(g.namespace)||d&&d!==g.selector&&("**"!==d||!g.selector)||(n.splice(f,1),g.selector&&n.delegateCount--,l.remove&&l.remove.call(a,g));i&&!n.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||m.removeEvent(a,o,r.handle),delete k[o])}else for(o in k)m.event.remove(a,o+b[j],c,d,!0);m.isEmptyObject(k)&&(delete r.handle,m._removeData(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,k,l,n,o=[d||y],p=j.call(b,"type")?b.type:b,q=j.call(b,"namespace")?b.namespace.split("."):[];if(h=l=d=d||y,3!==d.nodeType&&8!==d.nodeType&&!$.test(p+m.event.triggered)&&(p.indexOf(".")>=0&&(q=p.split("."),p=q.shift(),q.sort()),g=p.indexOf(":")<0&&"on"+p,b=b[m.expando]?b:new m.Event(p,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=q.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+q.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:m.makeArray(c,[b]),k=m.event.special[p]||{},e||!k.trigger||k.trigger.apply(d,c)!==!1)){if(!e&&!k.noBubble&&!m.isWindow(d)){for(i=k.delegateType||p,$.test(i+p)||(h=h.parentNode);h;h=h.parentNode)o.push(h),l=h;l===(d.ownerDocument||y)&&o.push(l.defaultView||l.parentWindow||a)}n=0;while((h=o[n++])&&!b.isPropagationStopped())b.type=n>1?i:k.bindType||p,f=(m._data(h,"events")||{})[b.type]&&m._data(h,"handle"),f&&f.apply(h,c),f=g&&h[g],f&&f.apply&&m.acceptData(h)&&(b.result=f.apply(h,c),b.result===!1&&b.preventDefault());if(b.type=p,!e&&!b.isDefaultPrevented()&&(!k._default||k._default.apply(o.pop(),c)===!1)&&m.acceptData(d)&&g&&d[p]&&!m.isWindow(d)){l=d[g],l&&(d[g]=null),m.event.triggered=p;try{d[p]()}catch(r){}m.event.triggered=void 0,l&&(d[g]=l)}return b.result}},dispatch:function(a){a=m.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(m._data(this,"events")||{})[a.type]||[],k=m.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=m.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,g=0;while((e=f.handlers[g++])&&!a.isImmediatePropagationStopped())(!a.namespace_re||a.namespace_re.test(e.namespace))&&(a.handleObj=e,a.data=e.data,c=((m.event.special[e.origType]||{}).handle||e.handler).apply(f.elem,i),void 0!==c&&(a.result=c)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!=this;i=i.parentNode||this)if(1===i.nodeType&&(i.disabled!==!0||"click"!==a.type)){for(e=[],f=0;h>f;f++)d=b[f],c=d.selector+" ",void 0===e[c]&&(e[c]=d.needsContext?m(c,this).index(i)>=0:m.find(c,this,null,[i]).length),e[c]&&e.push(d);e.length&&g.push({elem:i,handlers:e})}return h]","i"),hb=/^\s+/,ib=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,jb=/<([\w:]+)/,kb=/\s*$/g,rb={option:[1,""],legend:[1,"
    ","
    "],area:[1,"",""],param:[1,"",""],thead:[1,"","
    "],tr:[2,"","
    "],col:[2,"","
    "],td:[3,"","
    "],_default:k.htmlSerialize?[0,"",""]:[1,"X
    ","
    "]},sb=db(y),tb=sb.appendChild(y.createElement("div"));rb.optgroup=rb.option,rb.tbody=rb.tfoot=rb.colgroup=rb.caption=rb.thead,rb.th=rb.td;function ub(a,b){var c,d,e=0,f=typeof a.getElementsByTagName!==K?a.getElementsByTagName(b||"*"):typeof a.querySelectorAll!==K?a.querySelectorAll(b||"*"):void 0;if(!f)for(f=[],c=a.childNodes||a;null!=(d=c[e]);e++)!b||m.nodeName(d,b)?f.push(d):m.merge(f,ub(d,b));return void 0===b||b&&m.nodeName(a,b)?m.merge([a],f):f}function vb(a){W.test(a.type)&&(a.defaultChecked=a.checked)}function wb(a,b){return m.nodeName(a,"table")&&m.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function xb(a){return a.type=(null!==m.find.attr(a,"type"))+"/"+a.type,a}function yb(a){var b=pb.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function zb(a,b){for(var c,d=0;null!=(c=a[d]);d++)m._data(c,"globalEval",!b||m._data(b[d],"globalEval"))}function Ab(a,b){if(1===b.nodeType&&m.hasData(a)){var c,d,e,f=m._data(a),g=m._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;e>d;d++)m.event.add(b,c,h[c][d])}g.data&&(g.data=m.extend({},g.data))}}function Bb(a,b){var c,d,e;if(1===b.nodeType){if(c=b.nodeName.toLowerCase(),!k.noCloneEvent&&b[m.expando]){e=m._data(b);for(d in e.events)m.removeEvent(b,d,e.handle);b.removeAttribute(m.expando)}"script"===c&&b.text!==a.text?(xb(b).text=a.text,yb(b)):"object"===c?(b.parentNode&&(b.outerHTML=a.outerHTML),k.html5Clone&&a.innerHTML&&!m.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):"input"===c&&W.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):"option"===c?b.defaultSelected=b.selected=a.defaultSelected:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}}m.extend({clone:function(a,b,c){var d,e,f,g,h,i=m.contains(a.ownerDocument,a);if(k.html5Clone||m.isXMLDoc(a)||!gb.test("<"+a.nodeName+">")?f=a.cloneNode(!0):(tb.innerHTML=a.outerHTML,tb.removeChild(f=tb.firstChild)),!(k.noCloneEvent&&k.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||m.isXMLDoc(a)))for(d=ub(f),h=ub(a),g=0;null!=(e=h[g]);++g)d[g]&&Bb(e,d[g]);if(b)if(c)for(h=h||ub(a),d=d||ub(f),g=0;null!=(e=h[g]);g++)Ab(e,d[g]);else Ab(a,f);return d=ub(f,"script"),d.length>0&&zb(d,!i&&ub(a,"script")),d=h=e=null,f},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,l,n=a.length,o=db(b),p=[],q=0;n>q;q++)if(f=a[q],f||0===f)if("object"===m.type(f))m.merge(p,f.nodeType?[f]:f);else if(lb.test(f)){h=h||o.appendChild(b.createElement("div")),i=(jb.exec(f)||["",""])[1].toLowerCase(),l=rb[i]||rb._default,h.innerHTML=l[1]+f.replace(ib,"<$1>")+l[2],e=l[0];while(e--)h=h.lastChild;if(!k.leadingWhitespace&&hb.test(f)&&p.push(b.createTextNode(hb.exec(f)[0])),!k.tbody){f="table"!==i||kb.test(f)?""!==l[1]||kb.test(f)?0:h:h.firstChild,e=f&&f.childNodes.length;while(e--)m.nodeName(j=f.childNodes[e],"tbody")&&!j.childNodes.length&&f.removeChild(j)}m.merge(p,h.childNodes),h.textContent="";while(h.firstChild)h.removeChild(h.firstChild);h=o.lastChild}else p.push(b.createTextNode(f));h&&o.removeChild(h),k.appendChecked||m.grep(ub(p,"input"),vb),q=0;while(f=p[q++])if((!d||-1===m.inArray(f,d))&&(g=m.contains(f.ownerDocument,f),h=ub(o.appendChild(f),"script"),g&&zb(h),c)){e=0;while(f=h[e++])ob.test(f.type||"")&&c.push(f)}return h=null,o},cleanData:function(a,b){for(var d,e,f,g,h=0,i=m.expando,j=m.cache,l=k.deleteExpando,n=m.event.special;null!=(d=a[h]);h++)if((b||m.acceptData(d))&&(f=d[i],g=f&&j[f])){if(g.events)for(e in g.events)n[e]?m.event.remove(d,e):m.removeEvent(d,e,g.handle);j[f]&&(delete j[f],l?delete d[i]:typeof d.removeAttribute!==K?d.removeAttribute(i):d[i]=null,c.push(f))}}}),m.fn.extend({text:function(a){return V(this,function(a){return void 0===a?m.text(this):this.empty().append((this[0]&&this[0].ownerDocument||y).createTextNode(a))},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=wb(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=wb(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?m.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||m.cleanData(ub(c)),c.parentNode&&(b&&m.contains(c.ownerDocument,c)&&zb(ub(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++){1===a.nodeType&&m.cleanData(ub(a,!1));while(a.firstChild)a.removeChild(a.firstChild);a.options&&m.nodeName(a,"select")&&(a.options.length=0)}return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return m.clone(this,a,b)})},html:function(a){return V(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a)return 1===b.nodeType?b.innerHTML.replace(fb,""):void 0;if(!("string"!=typeof a||mb.test(a)||!k.htmlSerialize&&gb.test(a)||!k.leadingWhitespace&&hb.test(a)||rb[(jb.exec(a)||["",""])[1].toLowerCase()])){a=a.replace(ib,"<$1>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(m.cleanData(ub(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,m.cleanData(ub(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,l=this.length,n=this,o=l-1,p=a[0],q=m.isFunction(p);if(q||l>1&&"string"==typeof p&&!k.checkClone&&nb.test(p))return this.each(function(c){var d=n.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(l&&(i=m.buildFragment(a,this[0].ownerDocument,!1,this),c=i.firstChild,1===i.childNodes.length&&(i=c),c)){for(g=m.map(ub(i,"script"),xb),f=g.length;l>j;j++)d=i,j!==o&&(d=m.clone(d,!0,!0),f&&m.merge(g,ub(d,"script"))),b.call(this[j],d,j);if(f)for(h=g[g.length-1].ownerDocument,m.map(g,yb),j=0;f>j;j++)d=g[j],ob.test(d.type||"")&&!m._data(d,"globalEval")&&m.contains(h,d)&&(d.src?m._evalUrl&&m._evalUrl(d.src):m.globalEval((d.text||d.textContent||d.innerHTML||"").replace(qb,"")));i=c=null}return this}}),m.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){m.fn[a]=function(a){for(var c,d=0,e=[],g=m(a),h=g.length-1;h>=d;d++)c=d===h?this:this.clone(!0),m(g[d])[b](c),f.apply(e,c.get());return this.pushStack(e)}});var Cb,Db={};function Eb(b,c){var d,e=m(c.createElement(b)).appendTo(c.body),f=a.getDefaultComputedStyle&&(d=a.getDefaultComputedStyle(e[0]))?d.display:m.css(e[0],"display");return e.detach(),f}function Fb(a){var b=y,c=Db[a];return c||(c=Eb(a,b),"none"!==c&&c||(Cb=(Cb||m("