+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- ~ Licensed to the Apache Software Foundation (ASF) under one
- ~ or more contributor license agreements. See the NOTICE file
- ~ distributed with this work for additional information
- ~ regarding copyright ownership. The ASF licenses this file
- ~ to you under the Apache License, Version 2.0 (the
- ~ "License"); you may not use this file except in compliance
- ~ with the License. You may obtain a copy of the License at
- ~
- ~ http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing,
- ~ software distributed under the License is distributed on an
- ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- ~ KIND, either express or implied. See the License for the
- ~ specific language governing permissions and limitations
- ~ under the License.
- -->
-
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
- <modelVersion>4.0.0</modelVersion>
- <parent>
- <groupId>org.apache.archiva</groupId>
- <artifactId>archiva-web</artifactId>
- <version>1.4-M4-SNAPSHOT</version>
- </parent>
- <artifactId>archiva-webapp</artifactId>
- <packaging>war</packaging>
- <name>Archiva Web :: Application</name>
-
- <properties>
- <archiva.baseRestUrl />
- <rest.admin.pwd />
- <tomcatContextXml>${basedir}/src/test/tomcat/tomcat-context-archiva.xml</tomcatContextXml>
- <archivaAppServerBase>${project.build.directory}/appserver-base</archivaAppServerBase>
- </properties>
-
- <dependencies>
- <dependency>
- <groupId>org.apache.archiva</groupId>
- <artifactId>generic-metadata-support</artifactId>
- </dependency>
- <dependency>
- <groupId>org.apache.archiva</groupId>
- <artifactId>npanday-support</artifactId>
- </dependency>
- <dependency>
- <groupId>org.apache.archiva</groupId>
- <artifactId>repository-statistics</artifactId>
- </dependency>
- <dependency>
- <groupId>org.apache.archiva</groupId>
- <artifactId>problem-reports</artifactId>
- </dependency>
- <dependency>
- <groupId>org.apache.archiva</groupId>
- <artifactId>audit</artifactId>
- </dependency>
- <dependency>
- <groupId>org.apache.archiva</groupId>
- <artifactId>archiva-scheduler-repository</artifactId>
- </dependency>
- <dependency>
- <groupId>org.apache.archiva</groupId>
- <artifactId>archiva-indexer</artifactId>
- </dependency>
- <dependency>
- <groupId>org.codehaus.plexus</groupId>
- <artifactId>plexus-utils</artifactId>
- </dependency>
- <dependency>
- <groupId>org.apache.ant</groupId>
- <artifactId>ant</artifactId>
- </dependency>
- <dependency>
- <groupId>org.apache.maven.indexer</groupId>
- <artifactId>indexer-core</artifactId>
- <exclusions>
- <exclusion>
- <groupId>org.codehaus.plexus</groupId>
- <artifactId>plexus-container-default</artifactId>
- </exclusion>
- <exclusion>
- <groupId>classworlds</groupId>
- <artifactId>classworlds</artifactId>
- </exclusion>
- <exclusion>
- <groupId>commons-logging</groupId>
- <artifactId>commons-logging</artifactId>
- </exclusion>
- <exclusion>
- <groupId>velocity</groupId>
- <artifactId>velocity-dep</artifactId>
- </exclusion>
- <exclusion>
- <groupId>org.apache.maven</groupId>
- <artifactId>maven-plugin-registry</artifactId>
- </exclusion>
- <exclusion>
- <groupId>org.apache.maven</groupId>
- <artifactId>maven-settings</artifactId>
- </exclusion>
- <exclusion>
- <groupId>com.google.code.atinject</groupId>
- <artifactId>atinject</artifactId>
- </exclusion>
- </exclusions>
- </dependency>
- <dependency>
- <groupId>org.apache.archiva</groupId>
- <artifactId>archiva-proxy</artifactId>
- <exclusions>
- <exclusion>
- <groupId>commons-logging</groupId>
- <artifactId>commons-logging-api</artifactId>
- </exclusion>
- </exclusions>
- </dependency>
- <dependency>
- <groupId>org.apache.archiva</groupId>
- <artifactId>archiva-repository-layer</artifactId>
- </dependency>
- <dependency>
- <groupId>org.apache.archiva</groupId>
- <artifactId>archiva-xml-tools</artifactId>
- <exclusions>
- <exclusion>
- <groupId>xerces</groupId>
- <artifactId>xercesImpl</artifactId>
- </exclusion>
- </exclusions>
- </dependency>
- <dependency>
- <groupId>org.apache.archiva</groupId>
- <artifactId>archiva-security</artifactId>
- </dependency>
- <dependency>
- <groupId>org.apache.archiva</groupId>
- <artifactId>archiva-core-consumers</artifactId>
- </dependency>
- <dependency>
- <groupId>org.apache.archiva</groupId>
- <artifactId>archiva-configuration</artifactId>
- <!-- TODO uncomment when repository admin will be finished
- <scope>runtime</scope>
- -->
- </dependency>
- <dependency>
- <groupId>org.apache.archiva</groupId>
- <artifactId>archiva-metadata-consumer</artifactId>
- <scope>runtime</scope>
- </dependency>
- <dependency>
- <groupId>org.apache.archiva</groupId>
- <artifactId>archiva-lucene-consumers</artifactId>
- </dependency>
- <dependency>
- <groupId>org.apache.lucene</groupId>
- <artifactId>lucene-core</artifactId>
- </dependency>
- <dependency>
- <groupId>org.apache.lucene</groupId>
- <artifactId>lucene-queries</artifactId>
- </dependency>
- <dependency>
- <groupId>org.apache.lucene</groupId>
- <artifactId>lucene-memory</artifactId>
- </dependency>
- <dependency>
- <groupId>org.apache.lucene</groupId>
- <artifactId>lucene-highlighter</artifactId>
- </dependency>
- <dependency>
- <groupId>org.apache.archiva</groupId>
- <artifactId>stage-repository-merge</artifactId>
- </dependency>
- <dependency>
- <groupId>org.apache.archiva</groupId>
- <artifactId>archiva-signature-consumers</artifactId>
- </dependency>
- <dependency>
- <groupId>org.apache.archiva</groupId>
- <artifactId>archiva-applet</artifactId>
- <!-- TODO: actually, just exclude from WAR plugin -->
- <scope>provided</scope>
- </dependency>
- <dependency>
- <groupId>org.apache.archiva</groupId>
- <artifactId>archiva-rss</artifactId>
- </dependency>
- <dependency>
- <groupId>org.apache.archiva</groupId>
- <artifactId>archiva-rest-services</artifactId>
- <exclusions>
- <exclusion>
- <groupId>org.eclipse.jetty</groupId>
- <artifactId>jetty-server</artifactId>
- </exclusion>
- <exclusion>
- <groupId>org.eclipse.jetty</groupId>
- <artifactId>jetty-continuation</artifactId>
- </exclusion>
- <exclusion>
- <groupId>org.eclipse.jetty</groupId>
- <artifactId>jetty-http</artifactId>
- </exclusion>
- <exclusion>
- <groupId>org.eclipse.jetty</groupId>
- <artifactId>jetty-io</artifactId>
- </exclusion>
- <exclusion>
- <groupId>org.eclipse.jetty</groupId>
- <artifactId>jetty-util</artifactId>
- </exclusion>
- <exclusion>
- <groupId>org.eclipse.jetty</groupId>
- <artifactId>jetty-security</artifactId>
- </exclusion>
- <exclusion>
- <groupId>commons-logging</groupId>
- <artifactId>commons-logging</artifactId>
- </exclusion>
- <exclusion>
- <groupId>org.apache.geronimo.specs</groupId>
- <artifactId>geronimo-servlet_3.0_spec</artifactId>
- </exclusion>
- <exclusion>
- <groupId>org.apache.geronimo.specs</groupId>
- <artifactId>geronimo-javamail_1.4_spec</artifactId>
- </exclusion>
- <exclusion>
- <groupId>org.apache.geronimo.specs</groupId>
- <artifactId>geronimo-servlet_2.5_spec</artifactId>
- </exclusion>
- </exclusions>
- </dependency>
- <dependency>
- <groupId>org.apache.archiva</groupId>
- <artifactId>archiva-rest-api</artifactId>
- <exclusions>
- <exclusion>
- <groupId>org.eclipse.jetty</groupId>
- <artifactId>jetty-server</artifactId>
- </exclusion>
- <exclusion>
- <groupId>org.eclipse.jetty</groupId>
- <artifactId>jetty-continuation</artifactId>
- </exclusion>
- <exclusion>
- <groupId>org.eclipse.jetty</groupId>
- <artifactId>jetty-http</artifactId>
- </exclusion>
- <exclusion>
- <groupId>org.eclipse.jetty</groupId>
- <artifactId>jetty-io</artifactId>
- </exclusion>
- <exclusion>
- <groupId>org.eclipse.jetty</groupId>
- <artifactId>jetty-util</artifactId>
- </exclusion>
- <exclusion>
- <groupId>org.eclipse.jetty</groupId>
- <artifactId>jetty-security</artifactId>
- </exclusion>
- <exclusion>
- <groupId>commons-logging</groupId>
- <artifactId>commons-logging</artifactId>
- </exclusion>
- <exclusion>
- <groupId>org.apache.geronimo.specs</groupId>
- <artifactId>geronimo-servlet_3.0_spec</artifactId>
- </exclusion>
- <exclusion>
- <groupId>org.apache.geronimo.specs</groupId>
- <artifactId>geronimo-javamail_1.4_spec</artifactId>
- </exclusion>
- <exclusion>
- <groupId>org.apache.geronimo.specs</groupId>
- <artifactId>geronimo-servlet_2.5_spec</artifactId>
- </exclusion>
- </exclusions>
- </dependency>
- <dependency>
- <groupId>javax.servlet</groupId>
- <artifactId>servlet-api</artifactId>
- <scope>provided</scope>
- </dependency>
- <dependency>
- <groupId>javax.servlet</groupId>
- <artifactId>jsp-api</artifactId>
- <scope>provided</scope>
- </dependency>
- <dependency>
- <groupId>opensymphony</groupId>
- <artifactId>sitemesh</artifactId>
- </dependency>
-
- <dependency>
- <groupId>taglibs</groupId>
- <artifactId>standard</artifactId>
- </dependency>
-
- <dependency>
- <groupId>javax.servlet</groupId>
- <artifactId>jstl</artifactId>
- </dependency>
- <dependency>
- <groupId>org.codehaus.plexus</groupId>
- <artifactId>plexus-slf4j-logging</artifactId>
- <scope>runtime</scope>
- <exclusions>
- <exclusion>
- <groupId>org.codehaus.plexus</groupId>
- <artifactId>plexus-component-api</artifactId>
- </exclusion>
- </exclusions>
- </dependency>
- <dependency>
- <groupId>org.slf4j</groupId>
- <artifactId>slf4j-ext</artifactId>
- </dependency>
- <dependency>
- <groupId>org.slf4j</groupId>
- <artifactId>jcl-over-slf4j</artifactId>
- <scope>provided</scope>
- </dependency>
- <dependency>
- <groupId>org.apache.logging.log4j.adapters</groupId>
- <artifactId>log4j12-api</artifactId>
- <scope>runtime</scope>
- </dependency>
- <dependency>
- <groupId>org.apache.logging.log4j</groupId>
- <artifactId>log4j-core</artifactId>
- <scope>runtime</scope>
- </dependency>
- <dependency>
- <groupId>org.apache.logging.log4j.adapters</groupId>
- <artifactId>slf4j-impl</artifactId>
- <scope>runtime</scope>
- </dependency>
- <dependency>
- <groupId>httpunit</groupId>
- <artifactId>httpunit</artifactId>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>commons-lang</groupId>
- <artifactId>commons-lang</artifactId>
- </dependency>
- <dependency>
- <groupId>org.apache.commons</groupId>
- <artifactId>commons-compress</artifactId>
- </dependency>
- <dependency>
- <groupId>commons-configuration</groupId>
- <artifactId>commons-configuration</artifactId>
- <exclusions>
- <exclusion>
- <groupId>commons-beanutils</groupId>
- <artifactId>commons-beanutils-core</artifactId>
- </exclusion>
- <exclusion>
- <groupId>commons-logging</groupId>
- <artifactId>commons-logging</artifactId>
- </exclusion>
- </exclusions>
- </dependency>
- <dependency>
- <groupId>commons-digester</groupId>
- <artifactId>commons-digester</artifactId>
- <exclusions>
- <exclusion>
- <groupId>commons-logging</groupId>
- <artifactId>commons-logging</artifactId>
- </exclusion>
- </exclusions>
- </dependency>
- <dependency>
- <groupId>commons-beanutils</groupId>
- <artifactId>commons-beanutils</artifactId>
- <exclusions>
- <exclusion>
- <groupId>commons-logging</groupId>
- <artifactId>commons-logging</artifactId>
- </exclusion>
- </exclusions>
- </dependency>
- <dependency>
- <groupId>org.codehaus.jackson</groupId>
- <artifactId>jackson-jaxrs</artifactId>
- </dependency>
- <dependency>
- <groupId>org.codehaus.jackson</groupId>
- <artifactId>jackson-xc</artifactId>
- </dependency>
- <dependency>
- <groupId>org.codehaus.jackson</groupId>
- <artifactId>jackson-core-asl</artifactId>
- </dependency>
- <dependency>
- <groupId>org.apache.cxf</groupId>
- <artifactId>cxf-bundle-jaxrs</artifactId>
- <exclusions>
- <exclusion>
- <groupId>org.eclipse.jetty</groupId>
- <artifactId>jetty-server</artifactId>
- </exclusion>
- <exclusion>
- <groupId>org.eclipse.jetty</groupId>
- <artifactId>jetty-continuation</artifactId>
- </exclusion>
- <exclusion>
- <groupId>org.eclipse.jetty</groupId>
- <artifactId>jetty-http</artifactId>
- </exclusion>
- <exclusion>
- <groupId>org.eclipse.jetty</groupId>
- <artifactId>jetty-io</artifactId>
- </exclusion>
- <exclusion>
- <groupId>org.eclipse.jetty</groupId>
- <artifactId>jetty-util</artifactId>
- </exclusion>
- <exclusion>
- <groupId>org.eclipse.jetty</groupId>
- <artifactId>jetty-security</artifactId>
- </exclusion>
- <exclusion>
- <groupId>commons-logging</groupId>
- <artifactId>commons-logging</artifactId>
- </exclusion>
- <exclusion>
- <groupId>org.apache.geronimo.specs</groupId>
- <artifactId>geronimo-servlet_3.0_spec</artifactId>
- </exclusion>
- <exclusion>
- <groupId>org.apache.geronimo.specs</groupId>
- <artifactId>geronimo-javamail_1.4_spec</artifactId>
- </exclusion>
- <exclusion>
- <groupId>org.apache.geronimo.specs</groupId>
- <artifactId>geronimo-servlet_2.5_spec</artifactId>
- </exclusion>
- <exclusion>
- <groupId>org.codehaus.jettison</groupId>
- <artifactId>jettison</artifactId>
- </exclusion>
- <exclusion>
- <groupId>com.sun.xml.bind</groupId>
- <artifactId>jaxb-impl</artifactId>
- </exclusion>
- <exclusion>
- <groupId>javax.xml.bind</groupId>
- <artifactId>jaxb-api</artifactId>
- </exclusion>
- </exclusions>
- </dependency>
- <dependency>
- <groupId>ognl</groupId>
- <artifactId>ognl</artifactId>
- <version>3.0.2</version>
- </dependency>
- <dependency>
- <groupId>org.apache.struts</groupId>
- <artifactId>struts2-core</artifactId>
- </dependency>
- <dependency>
- <groupId>org.apache.struts</groupId>
- <artifactId>struts2-sitemesh-plugin</artifactId>
- <version>${struts.version}</version>
- </dependency>
- <dependency>
- <groupId>org.apache.archiva.redback.components.registry</groupId>
- <artifactId>spring-registry-api</artifactId>
- <exclusions>
- <exclusion>
- <groupId>org.springframework</groupId>
- <artifactId>spring-test</artifactId>
- </exclusion>
- </exclusions>
- </dependency>
- <dependency>
- <groupId>org.apache.archiva.redback.components.registry</groupId>
- <artifactId>spring-registry-commons</artifactId>
- <exclusions>
- <exclusion>
- <groupId>org.springframework</groupId>
- <artifactId>spring-test</artifactId>
- </exclusion>
- </exclusions>
- </dependency>
- <dependency>
- <groupId>org.apache.archiva.redback.components.cache</groupId>
- <artifactId>spring-cache-api</artifactId>
- </dependency>
- <dependency>
- <groupId>org.apache.archiva.redback.components</groupId>
- <artifactId>spring-jdo2</artifactId>
- </dependency>
- <dependency>
- <groupId>org.apache.archiva.redback.components.cache</groupId>
- <artifactId>spring-cache-ehcache</artifactId>
- <exclusions>
- <exclusion>
- <groupId>commons-logging</groupId>
- <artifactId>commons-logging</artifactId>
- </exclusion>
- </exclusions>
- </dependency>
- <dependency>
- <groupId>net.sf.ehcache</groupId>
- <artifactId>ehcache-core</artifactId>
- <exclusions>
- <exclusion>
- <groupId>commons-logging</groupId>
- <artifactId>commons-logging</artifactId>
- </exclusion>
- </exclusions>
- </dependency>
- <!-- Redback Dependencies -->
-
- <dependency>
- <groupId>org.apache.archiva.redback</groupId>
- <artifactId>redback-struts2-integration</artifactId>
- <exclusions>
- <exclusion>
- <groupId>org.slf4j</groupId>
- <artifactId>jcl-over-slf4j</artifactId>
- </exclusion>
- </exclusions>
- </dependency>
- <dependency>
- <groupId>org.apache.archiva.redback</groupId>
- <artifactId>redback-common-integrations</artifactId>
- </dependency>
-
- <dependency>
- <groupId>org.apache.archiva.redback</groupId>
- <artifactId>redback-keys-memory</artifactId>
- <exclusions>
- <exclusion>
- <groupId>commons-logging</groupId>
- <artifactId>commons-logging</artifactId>
- </exclusion>
- </exclusions>
- </dependency>
-
- <dependency>
- <groupId>org.apache.archiva.redback</groupId>
- <artifactId>redback-rest-services</artifactId>
- <exclusions>
- <exclusion>
- <groupId>org.eclipse.jetty</groupId>
- <artifactId>jetty-server</artifactId>
- </exclusion>
- <exclusion>
- <groupId>org.eclipse.jetty</groupId>
- <artifactId>jetty-continuation</artifactId>
- </exclusion>
- <exclusion>
- <groupId>org.eclipse.jetty</groupId>
- <artifactId>jetty-http</artifactId>
- </exclusion>
- <exclusion>
- <groupId>org.eclipse.jetty</groupId>
- <artifactId>jetty-io</artifactId>
- </exclusion>
- <exclusion>
- <groupId>org.eclipse.jetty</groupId>
- <artifactId>jetty-util</artifactId>
- </exclusion>
- <exclusion>
- <groupId>org.eclipse.jetty</groupId>
- <artifactId>jetty-security</artifactId>
- </exclusion>
- <exclusion>
- <groupId>commons-logging</groupId>
- <artifactId>commons-logging</artifactId>
- </exclusion>
- <exclusion>
- <groupId>org.apache.geronimo.specs</groupId>
- <artifactId>geronimo-servlet_3.0_spec</artifactId>
- </exclusion>
- <exclusion>
- <groupId>org.apache.geronimo.specs</groupId>
- <artifactId>geronimo-javamail_1.4_spec</artifactId>
- </exclusion>
- <exclusion>
- <groupId>org.apache.geronimo.specs</groupId>
- <artifactId>geronimo-servlet_2.5_spec</artifactId>
- </exclusion>
- </exclusions>
- </dependency>
-
- <dependency>
- <groupId>org.apache.archiva.redback</groupId>
- <artifactId>redback-struts2-content</artifactId>
- <scope>runtime</scope>
- <type>war</type>
- </dependency>
-
- <!-- Other dependencies -->
- <dependency>
- <groupId>org.apache.archiva</groupId>
- <artifactId>archiva-webdav</artifactId>
- <exclusions>
- <exclusion>
- <groupId>org.slf4j</groupId>
- <artifactId>jcl-over-slf4j</artifactId>
- </exclusion>
- </exclusions>
- </dependency>
- <dependency>
- <groupId>org.apache.archiva</groupId>
- <artifactId>archiva-web-common</artifactId>
- </dependency>
- <dependency>
- <groupId>org.apache.struts</groupId>
- <artifactId>struts2-spring-plugin</artifactId>
- <scope>runtime</scope>
- </dependency>
- <dependency>
- <groupId>commons-io</groupId>
- <artifactId>commons-io</artifactId>
- </dependency>
- <dependency>
- <groupId>org.springframework</groupId>
- <artifactId>spring-web</artifactId>
- </dependency>
- <dependency>
- <groupId>javax.mail</groupId>
- <artifactId>mail</artifactId>
- <scope>provided</scope>
- </dependency>
- <dependency>
- <groupId>javax.activation</groupId>
- <artifactId>activation</artifactId>
- <scope>provided</scope>
- </dependency>
- <dependency>
- <groupId>org.apache.archiva.redback.components</groupId>
- <artifactId>spring-taskqueue</artifactId>
- </dependency>
- <dependency>
- <groupId>org.apache.archiva.redback.components</groupId>
- <artifactId>spring-quartz</artifactId>
- </dependency>
- <dependency>
- <groupId>org.quartz-scheduler</groupId>
- <artifactId>quartz</artifactId>
- <exclusions>
- <exclusion>
- <groupId>c3p0</groupId>
- <artifactId>c3p0</artifactId>
- </exclusion>
- <exclusion>
- <groupId>javax.transaction</groupId>
- <artifactId>jta</artifactId>
- </exclusion>
- </exclusions>
- </dependency>
- <dependency>
- <groupId>commons-fileupload</groupId>
- <artifactId>commons-fileupload</artifactId>
- </dependency>
- <dependency>
- <groupId>commons-codec</groupId>
- <artifactId>commons-codec</artifactId>
- </dependency>
- <dependency>
- <groupId>stax</groupId>
- <artifactId>stax</artifactId>
- <exclusions>
- <exclusion>
- <groupId>stax</groupId>
- <artifactId>stax-api</artifactId>
- </exclusion>
- </exclusions>
- </dependency>
- <dependency>
- <groupId>org.apache.maven.wagon</groupId>
- <artifactId>wagon-http</artifactId>
- <scope>runtime</scope>
- </dependency>
- <dependency>
- <groupId>org.apache.maven.wagon</groupId>
- <artifactId>wagon-http-lightweight</artifactId>
- <scope>runtime</scope>
- </dependency>
- <dependency>
- <groupId>org.apache.maven.wagon</groupId>
- <artifactId>wagon-file</artifactId>
- <scope>runtime</scope>
- </dependency>
- <dependency>
- <groupId>org.apache.httpcomponents</groupId>
- <artifactId>httpclient</artifactId>
- <version>${httpclient.version}</version>
- <exclusions>
- <exclusion>
- <groupId>commons-logging</groupId>
- <artifactId>commons-logging</artifactId>
- </exclusion>
- </exclusions>
- </dependency>
- <dependency>
- <groupId>org.apache.httpcomponents</groupId>
- <artifactId>httpcore</artifactId>
- <version>${httpclient.core.version}</version>
- <exclusions>
- <exclusion>
- <groupId>commons-logging</groupId>
- <artifactId>commons-logging</artifactId>
- </exclusion>
- </exclusions>
- </dependency>
- <dependency>
- <groupId>commons-logging</groupId>
- <artifactId>commons-logging</artifactId>
- <scope>runtime</scope>
- </dependency>
-
- <dependency>
- <groupId>org.apache.archiva</groupId>
- <artifactId>metadata-model</artifactId>
- </dependency>
-
- <dependency>
- <groupId>org.apache.maven</groupId>
- <artifactId>maven-model</artifactId>
- <version>${maven3x.version}</version>
- </dependency>
- <dependency>
- <groupId>org.apache.maven</groupId>
- <artifactId>maven-model-builder</artifactId>
- <version>${maven3x.version}</version>
- </dependency>
- <dependency>
- <groupId>org.sonatype.sisu</groupId>
- <artifactId>sisu-inject-plexus</artifactId>
- <exclusions>
- <exclusion>
- <groupId>org.sonatype.sisu</groupId>
- <artifactId>sisu-guice</artifactId>
- </exclusion>
- </exclusions>
- </dependency>
- <dependency>
- <groupId>org.sonatype.sisu</groupId>
- <artifactId>sisu-guice</artifactId>
- <exclusions>
- <exclusion>
- <groupId>org.sonatype.sisu</groupId>
- <artifactId>sisu-guava</artifactId>
- </exclusion>
- </exclusions>
- </dependency>
- <dependency>
- <groupId>org.apache.archiva</groupId>
- <artifactId>archiva-plexus-bridge</artifactId>
- </dependency>
-
- <dependency>
- <groupId>org.apache.archiva</groupId>
- <artifactId>archiva-repository-admin-api</artifactId>
- </dependency>
-
-
- <dependency>
- <groupId>org.apache.archiva</groupId>
- <artifactId>archiva-repository-admin-default</artifactId>
- </dependency>
-
- <dependency>
- <groupId>org.apache.archiva</groupId>
- <artifactId>metadata-repository-api</artifactId>
- </dependency>
- <dependency>
- <groupId>org.apache.archiva</groupId>
- <artifactId>metadata-store-jcr</artifactId>
- </dependency>
- <dependency>
- <groupId>org.apache.jackrabbit</groupId>
- <artifactId>jackrabbit-jcr-commons</artifactId>
- </dependency>
- <dependency>
- <groupId>org.apache.jackrabbit</groupId>
- <artifactId>jackrabbit-core</artifactId>
- <exclusions>
- <exclusion>
- <groupId>commons-logging</groupId>
- <artifactId>commons-logging</artifactId>
- </exclusion>
- <exclusion>
- <groupId>org.slf4j</groupId>
- <artifactId>jcl-over-slf4j</artifactId>
- </exclusion>
- <exclusion>
- <groupId>commons-dbcp</groupId>
- <artifactId>commons-dbcp</artifactId>
- </exclusion>
- </exclusions>
- </dependency>
- <dependency>
- <groupId>org.apache.velocity</groupId>
- <artifactId>velocity</artifactId>
- </dependency>
- <dependency>
- <groupId>org.apache.velocity</groupId>
- <artifactId>velocity-tools</artifactId>
- <version>1.3</version>
- <scope>runtime</scope>
- <exclusions>
- <exclusion>
- <groupId>commons-logging</groupId>
- <artifactId>commons-logging</artifactId>
- </exclusion>
- <exclusion>
- <groupId>velocity</groupId>
- <artifactId>velocity-dep</artifactId>
- </exclusion>
- <exclusion>
- <groupId>velocity</groupId>
- <artifactId>velocity</artifactId>
- </exclusion>
- <exclusion>
- <groupId>struts</groupId>
- <artifactId>struts</artifactId>
- </exclusion>
- </exclusions>
- </dependency>
- <dependency>
- <groupId>org.apache.archiva</groupId>
- <!-- FIXME: temporary coupling to plugin, should be runtime -->
- <artifactId>maven2-repository</artifactId>
- <exclusions>
- <exclusion>
- <groupId>log4j</groupId>
- <artifactId>log4j</artifactId>
- </exclusion>
- </exclusions>
- </dependency>
- <dependency>
- <groupId>org.mockito</groupId>
- <artifactId>mockito-all</artifactId>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.apache.struts</groupId>
- <artifactId>struts2-junit-plugin</artifactId>
- <scope>test</scope>
- <version>${struts.version}</version>
- <exclusions>
- <exclusion>
- <groupId>org.springframework</groupId>
- <artifactId>spring-test</artifactId>
- </exclusion>
- </exclusions>
- </dependency>
- <dependency>
- <groupId>org.springframework</groupId>
- <artifactId>spring-test</artifactId>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>cglib</groupId>
- <artifactId>cglib</artifactId>
- </dependency>
- <dependency>
- <groupId>jpox</groupId>
- <artifactId>jpox</artifactId>
- <exclusions>
- <exclusion>
- <groupId>javax.transaction</groupId>
- <artifactId>jta</artifactId>
- </exclusion>
- <exclusion>
- <groupId>log4j</groupId>
- <artifactId>log4j</artifactId>
- </exclusion>
- </exclusions>
- </dependency>
- <dependency>
- <groupId>jpox</groupId>
- <artifactId>jpox-ehcache</artifactId>
- <exclusions>
- <exclusion>
- <groupId>commons-logging</groupId>
- <artifactId>commons-logging</artifactId>
- </exclusion>
- <exclusion>
- <groupId>ehcache</groupId>
- <artifactId>ehcache</artifactId>
- </exclusion>
- <exclusion>
- <groupId>log4j</groupId>
- <artifactId>log4j</artifactId>
- </exclusion>
- </exclusions>
- </dependency>
- <dependency>
- <groupId>org.eclipse.jetty</groupId>
- <artifactId>jetty-server</artifactId>
- <version>${jettyVersion}</version>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.eclipse.jetty</groupId>
- <artifactId>jetty-continuation</artifactId>
- <version>${jettyVersion}</version>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.eclipse.jetty</groupId>
- <artifactId>jetty-http</artifactId>
- <version>${jettyVersion}</version>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.eclipse.jetty</groupId>
- <artifactId>jetty-io</artifactId>
- <version>${jettyVersion}</version>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.eclipse.jetty</groupId>
- <artifactId>jetty-util</artifactId>
- <version>${jettyVersion}</version>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.eclipse.jetty</groupId>
- <artifactId>jetty-security</artifactId>
- <version>${jettyVersion}</version>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.eclipse.jetty</groupId>
- <artifactId>jetty-plus</artifactId>
- <version>${jettyVersion}</version>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.apache.archiva.redback</groupId>
- <artifactId>redback-rest-services</artifactId>
- <classifier>tests</classifier>
- <scope>test</scope>
- </dependency>
-
- <!-- taglib annotation plugin -->
- <dependency>
- <groupId>org.apache.struts</groupId>
- <artifactId>struts-annotations</artifactId>
- <version>1.0.5</version>
- <scope>compile</scope>
- <optional>true</optional>
- </dependency>
-
- <dependency>
- <groupId>org.apache.archiva</groupId>
- <artifactId>archiva-web-common</artifactId>
- <classifier>tests</classifier>
- <scope>test</scope>
- <version>${project.version}</version>
- </dependency>
-
- <dependency>
- <groupId>org.apache.archiva</groupId>
- <artifactId>archiva-test-utils</artifactId>
- <version>${project.version}</version>
- <scope>test</scope>
- <exclusions>
- <exclusion>
- <groupId>org.slf4j</groupId>
- <artifactId>slf4j-simple</artifactId>
- </exclusion>
- <exclusion>
- <groupId>org.springframework</groupId>
- <artifactId>spring-test</artifactId>
- </exclusion>
- </exclusions>
- </dependency>
- </dependencies>
- <build>
- <resources>
- <resource>
- <directory>src/main/resources</directory>
- </resource>
- <resource>
- <directory>src/main/filtered-resources</directory>
- <filtering>true</filtering>
- </resource>
- </resources>
- <plugins>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-surefire-plugin</artifactId>
- <configuration>
- <argLine>-XX:MaxPermSize=256m -client</argLine>
- <runOrder>alphabetical</runOrder>
- <systemPropertyVariables>
- <appserver.base>${project.build.directory}/appserver-base</appserver.base>
- <plexus.home>${project.build.directory}/appserver-base</plexus.home>
- <derby.system.home>${project.build.directory}/appserver-base</derby.system.home>
- <archiva.baseRestUrl>${archiva.baseRestUrl}</archiva.baseRestUrl>
- <rest.admin.pwd>${rest.admin.pwd}</rest.admin.pwd>
- <archiva.user.configFileName>${basedir}/target/archiva.xml</archiva.user.configFileName>
- <test.resources.path>${project.build.testOutputDirectory}</test.resources.path>
- <redback.jdbc.url>${redbackTestJdbcUrl}</redback.jdbc.url>
- <redback.jdbc.driver.name>${redbackTestJdbcDriver}</redback.jdbc.driver.name>
- <basedir>${basedir}</basedir>
- <java.io.tmpdir>${project.build.directory}</java.io.tmpdir>
- <buildDirectory>${project.build.directory}</buildDirectory>
- </systemPropertyVariables>
- </configuration>
- </plugin>
- <!-- hack for jetty:run, archiva web config files are checked in /WEB-INF/ dir -->
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-antrun-plugin</artifactId>
- <executions>
- <execution>
- <id>copy-web-config-files</id>
- <goals>
- <goal>run</goal>
- </goals>
- <phase>compile</phase>
- <configuration>
- <tasks>
- <mkdir dir="${basedir}/target/archiva/WEB-INF/" />
- <copy todir="${basedir}/target/archiva/WEB-INF/">
- <fileset dir="${basedir}/target" includes="classes/" excludes="**/struts.xml,**/ehcache.xml" />
- </copy>
- </tasks>
- </configuration>
- </execution>
- <execution>
- <phase>generate-resources</phase>
- <goals>
- <goal>run</goal>
- </goals>
- <configuration>
- <tasks>
- <copy todir="${project.build.directory}/appserver-base">
- <fileset dir="src/appserver-base" />
- </copy>
- </tasks>
- </configuration>
- </execution>
- </executions>
- </plugin>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-war-plugin</artifactId>
- <version>2.1.1</version>
- <configuration>
- <archiveClasses>false</archiveClasses>
- <dependentWarExcludes>META-INF/**,WEB-INF/web.xml,WEB-INF/classes/xwork.xml,WEB-INF/lib/**
- </dependentWarExcludes>
- <warSourceExcludes>
- WEB-INF/lib/xalan-*.jar,WEB-INF/lib/velocity-dep-*.jar,WEB-INF/lib/xml-apis-*.jar,WEB-INF/lib/wstx-asl-*.jar,WEB-INF/lib/stax-utils-*.jar,WEB-INF/lib/xercesImpl-*.jar,WEB-INF/lib/commons-lang-*.jar,WEB-INF/lib/commons-configuration-*.jar,WEB-INF/lib/jetty-*.jar
- </warSourceExcludes>
- <archive>
- <manifestFile>${project.build.outputDirectory}/META-INF/MANIFEST.MF</manifestFile>
- </archive>
- <overlays>
- <overlay>
- <id>redback-contents</id>
- <groupId>org.apache.archiva.redback</groupId>
- <artifactId>redback-struts2-content</artifactId>
- <excludes>
- <exclude>WEB-INF/lib/**.jar</exclude>
- <exclude>WEB-INF/web.xml</exclude>
- <exclude>META-INF/**</exclude>
- </excludes>
- </overlay>
- </overlays>
- </configuration>
- </plugin>
- <plugin>
- <groupId>org.apache.felix</groupId>
- <artifactId>maven-bundle-plugin</artifactId>
- <executions>
- <execution>
- <id>bundle-manifest</id>
- <phase>process-classes</phase>
- <goals>
- <goal>manifest</goal>
- </goals>
- <configuration>
- <instructions>
- <Bundle-SymbolicName>org.apache.archiva.webapp</Bundle-SymbolicName>
- <Bundle-Version>${project.version}</Bundle-Version>
- <Export-Package>
- org.apache.archiva.web.action*;version=${project.version},
- org.apache.archiva.web.interceptor*;version=${project.version},
- org.apache.archiva.web.mapper*;version=${project.version},
- org.apache.archiva.web.tags*;version=${project.version},
- org.apache.archiva.web.util*;version=${project.version},
- org.apache.archiva.web.validator*;version=${project.version}
- </Export-Package>
- <Import-Package>
- com.opensymphony.xwork2,
- com.opensymphony.xwork2.config,
- com.opensymphony.xwork2.interceptor,
- com.opensymphony.xwork2.util,
- com.opensymphony.xwork2.validator,
- com.opensymphony.xwork2.validator.validators,
- com.sun.syndication.feed.synd,
- com.sun.syndication.io,
- javax.annotation,
- javax.inject,
- javax.servlet,
- javax.servlet.http,
- javax.servlet.jsp,
- javax.servlet.jsp.tagext,
- org.apache.archiva.admin.model;version=${project.version},
- org.apache.archiva.admin.model.admin;version=${project.version},
- org.apache.archiva.admin.model.beans;version=${project.version},
- org.apache.archiva.admin.model.group;version=${project.version},
- org.apache.archiva.admin.model.managed;version=${project.version},
- org.apache.archiva.admin.model.networkproxy;version=${project.version},
- org.apache.archiva.admin.model.proxyconnector;version=${project.version},
- org.apache.archiva.admin.model.remote;version=${project.version},
- org.apache.archiva.admin.repository;version=${project.version},
- org.apache.archiva.admin.repository.admin;version=${project.version},
- org.apache.archiva.admin.repository.utils;version=${project.version},
- org.apache.archiva.audit;version=${project.version},
- org.apache.archiva.checksum;version=${project.version},
- org.apache.archiva.common;version=${project.version},
- org.apache.archiva.common.utils;version=${project.version},
- org.apache.archiva.configuration;version=${project.version},
- org.apache.archiva.consumers;version=${project.version},
- org.apache.archiva.dependency.tree.maven2;version=${project.version},
- org.apache.archiva.indexer.search;version=${project.version},
- org.apache.archiva.metadata.generic;version=${project.version},
- org.apache.archiva.metadata.model;version=${project.version},
- org.apache.archiva.metadata.repository;version=${project.version},
- org.apache.archiva.metadata.repository.filter;version=${project.version},
- org.apache.archiva.metadata.repository.stats;version=${project.version},
- org.apache.archiva.metadata.repository.storage.maven2;version=${project.version},
- org.apache.archiva.model;version=${project.version},
- org.apache.archiva.policies;version=${project.version},
- org.apache.archiva.reports;version=${project.version},
- org.apache.archiva.repository;version=${project.version},
- org.apache.archiva.repository.metadata;version=${project.version},
- org.apache.archiva.repository.scanner;version=${project.version},
- org.apache.archiva.rest.api.model;version=${project.version},
- org.apache.archiva.rest.api.services;version=${project.version},
- org.apache.archiva.rss.processor;version=${project.version},
- org.apache.archiva.scheduler;version=${project.version},
- org.apache.archiva.scheduler.indexing;version=${project.version},
- org.apache.archiva.scheduler.repository;version=${project.version},
- org.apache.archiva.security;version=${project.version},
- org.apache.archiva.stagerepository.merge;version=${project.version},
- org.apache.commons.codec;version="[1.3,2)",
- org.apache.commons.codec.binary;version="[1.3,2)",
- org.apache.commons.collections;version="[3.2,4)",
- org.apache.commons.io;version="[1.4,2)",
- org.apache.commons.lang*;version="[2.4,3)",
- org.apache.maven.artifact,
- org.apache.maven.artifact.versioning,
- org.apache.maven.model,
- org.apache.maven.model.io.xpp3,
- org.apache.maven.shared.dependency.tree,
- org.apache.maven.shared.dependency.tree.traversal,
- org.apache.struts2*;version="[2.2,3)",
- org.apache.taglibs.standard.tag.common.core,
- org.apache.taglibs.standard.tag.el.core,
- org.codehaus.plexus.cache,
- org.apache.archiva.redback.authentication,
- org.apache.archiva.redback.authorization,
- org.apache.archiva.redback.policy,
- org.apache.archiva.redback.system,
- org.apache.archiva.redback.users,
- org.codehaus.plexus.registry,
- org.apache.archiva.redback.components.taskqueue,
- org.codehaus.plexus.util,
- org.codehaus.redback.components.scheduler,
- org.apache.archiva.redback.integration.filter.authentication,
- org.codehaus.redback.integration.interceptor,
- org.apache.archiva.redback.rest.services,
- org.slf4j;resolution:=optional,
- org.springframework*;version="[3,4)",
- org.springframework.web*;version="[3,4)"
- </Import-Package>
- </instructions>
- </configuration>
- </execution>
- </executions>
- <configuration>
- <supportedProjectTypes>
- <supportedProjectType>jar</supportedProjectType>
- <supportedProjectType>bundle</supportedProjectType>
- <supportedProjectType>war</supportedProjectType>
- </supportedProjectTypes>
- </configuration>
- </plugin>
-
- <plugin>
- <groupId>org.mortbay.jetty</groupId>
- <artifactId>jetty-maven-plugin</artifactId>
- <version>${jettyVersion}</version>
- <configuration>
- <webApp>
- <contextPath>/</contextPath>
- <baseResource implementation="org.eclipse.jetty.util.resource.ResourceCollection">
- <resourcesAsCSV>src/main/webapp,target/archiva,target/redback</resourcesAsCSV>
- </baseResource>
- </webApp>
- <webAppConfig>
- <contextPath>/</contextPath>
- <descriptor>${basedir}/src/main/webapp/WEB_INF/web.xml</descriptor>
- <jettyEnvXml>${basedir}/src/jetty-env.xml</jettyEnvXml>
- </webAppConfig>
-
- <scanIntervalSeconds>10</scanIntervalSeconds>
- <!--
- <jettyConfig>${basedir}/src/jetty-env.xml</jettyConfig>
- -->
- <connectors>
- <connector implementation="org.eclipse.jetty.server.nio.SelectChannelConnector">
- <port>9091</port>
- <maxIdleTime>60000</maxIdleTime>
- </connector>
- </connectors>
- <systemProperties>
- <systemProperty>
- <name>plexus.home</name>
- <value>${project.build.directory}/appserver-base</value>
- </systemProperty>
- <systemProperty>
- <name>appserver.base</name>
- <value>${project.build.directory}/appserver-base</value>
- </systemProperty>
- <systemProperty>
- <name>appserver.home</name>
- <value>${project.build.directory}/appserver-home</value>
- </systemProperty>
- <systemProperty>
- <name>derby.system.home</name>
- <value>${project.build.directory}/appserver-base/logs</value>
- </systemProperty>
- </systemProperties>
- </configuration>
- <dependencies>
- <dependency>
- <groupId>org.apache.derby</groupId>
- <artifactId>derby</artifactId>
- <version>${derbyVersion}</version>
- </dependency>
- </dependencies>
- </plugin>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-dependency-plugin</artifactId>
- <executions>
- <execution>
- <id>unpack-redback-war</id>
- <goals>
- <goal>unpack</goal>
- </goals>
- <phase>compile</phase>
- <configuration>
- <artifactItems>
- <artifactItem>
- <groupId>org.apache.archiva.redback</groupId>
- <artifactId>redback-struts2-content</artifactId>
- <version>${redback.version}</version>
- <type>war</type>
- <overWrite>false</overWrite>
- <outputDirectory>${project.build.directory}/redback</outputDirectory>
- <excludes>**/struts-security.xml</excludes>
- </artifactItem>
- </artifactItems>
- </configuration>
- </execution>
- <execution>
- <id>copy</id>
- <phase>process-resources</phase>
- <goals>
- <goal>copy</goal>
- </goals>
- <configuration>
- <artifactItems>
- <artifactItem>
- <groupId>${project.groupId}</groupId>
- <artifactId>archiva-applet</artifactId>
- <version>${project.version}</version>
- <outputDirectory>src/main/webapp</outputDirectory>
- <destFileName>archiva-applet.jar</destFileName>
- </artifactItem>
- </artifactItems>
- </configuration>
- </execution>
- </executions>
- </plugin>
- </plugins>
- <pluginManagement>
- <plugins>
- <plugin>
- <groupId>org.apache.rat</groupId>
- <artifactId>apache-rat-plugin</artifactId>
- <configuration>
- <excludes>
- <exclude>appserver-base/**</exclude>
- <exclude>overlays/**</exclude>
- <exclude>src/appserver-base/conf/**</exclude>
- <exclude>src/appserver-base/logs/**</exclude>
- <exclude>src/main/webapp/WEB-INF/lib</exclude>
- <exclude>src/main/webapp/js/jquery-1.6.1.min.js</exclude>
- <exclude>src/main/webapp/js/jquery-ui-1.8.14.custom.min.js</exclude>
- <exclude>src/main/webapp/js/md5.js</exclude>
- <exclude>src/main/webapp/css/no-theme/**</exclude>
- <exclude>src/main/webapp/css/redback/**</exclude>
- <exclude>src/main/webapp/WEB-INF/jsp/redback/**</exclude>
- <exclude>src/main/resources/archiva-mime-types.txt</exclude>
- <exclude>src/test/resources/test-repo/**</exclude>
- <exclude>src/test/resources/**</exclude>
- <exclude>src/sql/**</exclude>
- <exclude>src/test/repositories/test-repo/**</exclude>
- <exclude>src/main/webapp/META-INF/MANIFEST.MF</exclude>
- <exclude>src/main/webapp/WEB-INF/classes/struts-security.xml</exclude>
- </excludes>
- </configuration>
- </plugin>
- </plugins>
- </pluginManagement>
- </build>
- <profiles>
- <profile>
- <id>mysql</id>
- <dependencies>
- <dependency>
- <groupId>mysql</groupId>
- <artifactId>mysql-connector-java</artifactId>
- <version>5.0.4</version>
- </dependency>
- </dependencies>
- <build>
- <plugins>
- <plugin>
- <groupId>org.mortbay.jetty</groupId>
- <artifactId>maven-jetty-plugin</artifactId>
- <configuration>
- <jettyEnvXml>src/jetty-env-mysql.xml</jettyEnvXml>
- </configuration>
- </plugin>
- </plugins>
- </build>
- </profile>
- <profile>
- <id>postgres</id>
- <dependencies>
- <dependency>
- <groupId>postgresql</groupId>
- <artifactId>postgresql</artifactId>
- <version>8.2-504.jdbc3</version>
- </dependency>
- </dependencies>
- <build>
- <plugins>
- <plugin>
- <groupId>org.mortbay.jetty</groupId>
- <artifactId>maven-jetty-plugin</artifactId>
- <configuration>
- <jettyEnvXml>src/jetty-env-postgres.xml</jettyEnvXml>
- </configuration>
- </plugin>
- </plugins>
- </build>
- </profile>
- <profile>
- <!-- profile for tomcat plugin dev an log output in the console -->
- <id>dev</id>
- <build>
- <plugins>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-dependency-plugin</artifactId>
- <executions>
- <!-- redefine to skip its execution in Tomcat -->
- <execution>
- <id>copy</id>
- <phase>process-resources</phase>
- <goals>
- <goal>copy</goal>
- </goals>
- <configuration>
- <skip>true</skip>
- <artifactItems>
- <artifactItem>
- <groupId>${project.groupId}</groupId>
- <artifactId>archiva-applet</artifactId>
- <version>${project.version}</version>
- <outputDirectory>src/main/webapp</outputDirectory>
- <destFileName>archiva-applet.jar</destFileName>
- </artifactItem>
- </artifactItems>
- </configuration>
- </execution>
- <!-- redefine to override exclude configuration (and add back struts-security.xml ) -->
- <execution>
- <id>unpack-redback-war</id>
- <goals>
- <goal>unpack</goal>
- </goals>
- <phase>compile</phase>
- <configuration>
- <artifactItems combine.self="override">
- <artifactItem>
- <groupId>org.apache.archiva.redback</groupId>
- <artifactId>redback-struts2-content</artifactId>
- <version>${redback.version}</version>
- <type>war</type>
- <overWrite>false</overWrite>
- <outputDirectory>${basedir}/src/main/webapp</outputDirectory>
- <excludes>**/web.xml,**/struts*.jar,**/sitemesh*.jar</excludes>
- </artifactItem>
- </artifactItems>
- </configuration>
- </execution>
- </executions>
- </plugin>
- </plugins>
- </build>
- <dependencies>
- <!-- TODO: Bug in the Tomcat plugin - it doesn't seem to respect runtime dependencies, so we redeclare it as compile -->
- <dependency>
- <groupId>org.apache.archiva</groupId>
- <artifactId>metadata-store-jcr</artifactId>
- <scope>compile</scope>
- </dependency>
- <dependency>
- <groupId>org.apache.jackrabbit</groupId>
- <artifactId>jackrabbit-core</artifactId>
- <scope>compile</scope>
- <exclusions>
- <exclusion>
- <groupId>commons-logging</groupId>
- <artifactId>commons-logging</artifactId>
- </exclusion>
- </exclusions>
- </dependency>
- </dependencies>
- </profile>
-
- <profile>
- <id>tomcat</id>
- <build>
- <plugins>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-dependency-plugin</artifactId>
- <executions>
- <!-- redefine to skip its execution in Tomcat -->
- <execution>
- <id>copy</id>
- <phase>process-resources</phase>
- <goals>
- <goal>copy</goal>
- </goals>
- <configuration>
- <skip>true</skip>
- <artifactItems>
- <artifactItem>
- <groupId>${project.groupId}</groupId>
- <artifactId>archiva-applet</artifactId>
- <version>${project.version}</version>
- <outputDirectory>src/main/webapp</outputDirectory>
- <destFileName>archiva-applet.jar</destFileName>
- </artifactItem>
- </artifactItems>
- </configuration>
- </execution>
- <!--
- redefine to override exclude configuration (and exclude back struts-security.xml :-)
- tomcat plugin 2.0 has a better support of war overlay
- -->
- <execution>
- <id>unpack-redback-war</id>
- <goals>
- <goal>unpack</goal>
- </goals>
- <phase>compile</phase>
- <configuration>
- <artifactItems combine.self="override">
- <artifactItem>
- <groupId>org.apache.archiva.redback</groupId>
- <artifactId>redback-struts2-content</artifactId>
- <version>${redback.version}</version>
- <type>war</type>
- <overWrite>false</overWrite>
- <outputDirectory>${basedir}/src/main/webapp</outputDirectory>
- <excludes>**/web.xml,**/**.jar,**/struts-security.xml</excludes>
- </artifactItem>
- </artifactItems>
- </configuration>
- </execution>
- </executions>
- </plugin>
- <plugin>
- <groupId>org.apache.tomcat.maven</groupId>
- <artifactId>tomcat6-maven-plugin</artifactId>
- <configuration>
- <port>9091</port>
- <path>/archiva</path>
- <contextFile>${tomcatContextXml}</contextFile>
- <systemProperties>
- <plexus.home>${archivaAppServerBase}</plexus.home>
- <appserver.base>${archivaAppServerBase}</appserver.base>
- <appserver.home>${archivaAppServerBase}</appserver.home>
- <derby.system.home>${archivaAppServerBase}/logs</derby.system.home>
- <redback.admin.creation.file>${basedir}/src/test/tomcat/auto-admin-creation.properties </redback.admin.creation.file>
- <java.io.tmpdir>${project.build.directory}</java.io.tmpdir>
- </systemProperties>
- <additionalClasspathDirs>
- <additionalClasspathDir>${basedir}/src/test/tomcat</additionalClasspathDir>
- </additionalClasspathDirs>
- </configuration>
- <dependencies>
- <dependency>
- <groupId>org.apache.derby</groupId>
- <artifactId>derby</artifactId>
- <version>${derbyVersion}</version>
- </dependency>
- <dependency>
- <groupId>javax.mail</groupId>
- <artifactId>mail</artifactId>
- <version>${javaxMailVersion}</version>
- </dependency>
- </dependencies>
- </plugin>
- <plugin>
- <groupId>org.apache.tomcat.maven</groupId>
- <artifactId>tomcat7-maven-plugin</artifactId>
- <configuration>
- <port>9091</port>
- <path>/archiva</path>
- <contextFile>${tomcatContextXml}</contextFile>
- <systemProperties>
- <plexus.home>${archivaAppServerBase}</plexus.home>
- <appserver.base>${archivaAppServerBase}</appserver.base>
- <appserver.home>${archivaAppServerBase}</appserver.home>
- <derby.system.home>${archivaAppServerBase}/logs</derby.system.home>
- <redback.admin.creation.file>${basedir}/src/test/tomcat/auto-admin-creation.properties</redback.admin.creation.file>
- <java.io.tmpdir>${project.build.directory}</java.io.tmpdir>
- </systemProperties>
- <additionalClasspathDirs>
- <additionalClasspathDir>${basedir}/src/test/tomcat</additionalClasspathDir>
- </additionalClasspathDirs>
- </configuration>
- <dependencies>
- <dependency>
- <groupId>org.apache.derby</groupId>
- <artifactId>derby</artifactId>
- <version>${derbyVersion}</version>
- </dependency>
- <dependency>
- <groupId>javax.mail</groupId>
- <artifactId>mail</artifactId>
- <version>1.4</version>
- </dependency>
- </dependencies>
- </plugin>
- </plugins>
- </build>
- </profile>
- </profiles>
-</project>
+++ /dev/null
-<configuration />
+++ /dev/null
-<configuration />
+++ /dev/null
-<?xml version="1.0"?>
-<!--
- ~ Licensed to the Apache Software Foundation (ASF) under one
- ~ or more contributor license agreements. See the NOTICE file
- ~ distributed with this work for additional information
- ~ regarding copyright ownership. The ASF licenses this file
- ~ to you under the Apache License, Version 2.0 (the
- ~ "License"); you may not use this file except in compliance
- ~ with the License. You may obtain a copy of the License at
- ~
- ~ http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing,
- ~ software distributed under the License is distributed on an
- ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- ~ KIND, either express or implied. See the License for the
- ~ specific language governing permissions and limitations
- ~ under the License.
- -->
-
-<!DOCTYPE Configure PUBLIC "-//Mort Bay Consulting//DTD Configure//EN" "http://jetty.mortbay.org/configure.dtd">
-<Configure class="org.mortbay.jetty.webapp.WebAppContext">
-
- <New id="validation_mail" class="org.mortbay.jetty.plus.naming.Resource">
- <Arg>mail/Session</Arg>
- <Arg>
- <New class="org.mortbay.naming.factories.MailSessionReference">
- <Set name="user"></Set>
- <Set name="password"></Set>
- <Set name="properties">
- <New class="java.util.Properties">
- <Put name="mail.smtp.host">localhost</Put>
- <Put name="mail.smtp.port">25</Put>
- </New>
- </Set>
- </New>
- </Arg>
- </New>
-
-<!-- START SNIPPET: setting-up-mysql
- In order to use this jetty-env, you need to setup your mysql locally.
-
- 1) Connect to mysql
-
- $ mysql -u root -p
-
- Welcome to the MySQL monitor. Commands end with ; or \g.
- Your MySQL connection id is 62
- Server version: 5.0.38-Ubuntu_0ubuntu1-log Ubuntu 7.04 distribution
-
- Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
-
- mysql>
-
- 2) Create the databases.
-
- mysql> create database archiva;
- Query OK, 1 row affected (0.00 sec)
-
- mysql> create database redback;
- Query OK, 1 row affected (0.00 sec)
-
- 3) Create the archiva user / permissions to (archiva and redback) tables.
-
- mysql> use mysql;
- Reading table information for completion of table and column names
- You can turn off this feature to get a quicker startup with -A
-
- Database changed
- mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP,ALTER,INDEX
- -> ON archiva.*
- -> TO 'archiva'@'localhost'
- -> IDENTIFIED BY 'sa';
- Query OK, 0 rows affected (0.00 sec)
-
- mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP,ALTER,INDEX
- -> ON redback.*
- -> TO 'archiva'@'localhost'
- -> IDENTIFIED BY 'sa';
- Query OK, 0 rows affected (0.00 sec)
-
- mysql>
-
- 4) Quit from mysql command shell, and verify the user creation.
-
- $ mysql -u archiva -p sa
- Enter password:
- Welcome to the MySQL monitor. Commands end with ; or \g.
- Your MySQL connection id is 77
- Server version: 5.0.38-Ubuntu_0ubuntu1-log Ubuntu 7.04 distribution
-
- Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
-
- mysql> use archiva;
- Database changed
- mysql> use redback;
- Database changed
- mysql> use mysql;
- ERROR 1044 (42000): Access denied for user 'archiva'@'localhost' to database 'mysql'
- mysql>
-
- 5) Done with mysql server setup. To use this jetty-env.xml use the following command line.
-
- $ mvn -Pmysql clean jetty:run
-
-END SNIPPET: setting-up-mysql
- -->
-
- <!-- users / Security Database -->
- <New id="users" class="org.mortbay.jetty.plus.naming.Resource">
- <Arg>jdbc/users</Arg>
- <Arg>
- <New class="com.mysql.jdbc.jdbc2.optional.MysqlDataSource">
- <!-- <Set name="url">jdbc:mysql://localhost/redback</Set> -->
- <Set name="serverName">localhost</Set>
- <Set name="databaseName">redback</Set>
- <Set name="user">archiva</Set>
- <Set name="password">sa</Set>
- </New>
- </Arg>
- </New>
-
- <New id="usersShutdown" class="org.mortbay.jetty.plus.naming.Resource">
- <Arg>jdbc/usersShutdown</Arg>
- <Arg>
- <New class="com.mysql.jdbc.jdbc2.optional.MysqlDataSource">
- <Set name="url">jdbc:mysql://localhost/redback</Set>
- <Set name="user">archiva</Set>
- <Set name="password">sa</Set>
- </New>
- </Arg>
- </New>
-
-</Configure>
-
+++ /dev/null
-<?xml version="1.0"?>
-<!--
- ~ Licensed to the Apache Software Foundation (ASF) under one
- ~ or more contributor license agreements. See the NOTICE file
- ~ distributed with this work for additional information
- ~ regarding copyright ownership. The ASF licenses this file
- ~ to you under the Apache License, Version 2.0 (the
- ~ "License"); you may not use this file except in compliance
- ~ with the License. You may obtain a copy of the License at
- ~
- ~ http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing,
- ~ software distributed under the License is distributed on an
- ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- ~ KIND, either express or implied. See the License for the
- ~ specific language governing permissions and limitations
- ~ under the License.
- -->
-
-<!DOCTYPE Configure PUBLIC "-//Mort Bay Consulting//DTD Configure//EN" "http://jetty.mortbay.org/configure.dtd">
-
-<Configure class="org.mortbay.jetty.webapp.WebAppContext">
-
-
-
-
-<New id="validation_mail" class="org.mortbay.jetty.plus.naming.Resource">
- <Arg>mail/Session</Arg>
- <Arg>
- <New class="org.mortbay.naming.factories.MailSessionReference">
- <Set name="user"></Set>
- <Set name="password"></Set>
- <Set name="properties">
- <New class="java.util.Properties">
- <Put name="mail.smtp.host">localhost</Put>
- <Put name="mail.from">continuum@localhost</Put>
- <Put name="mail.senderName">Continuum</Put>
- <Put name="mail.debug">true</Put>
- </New>
- </Set>
- </New>
- </Arg>
-</New>
-
-<New id="users" class="org.mortbay.jetty.plus.naming.Resource">
- <Arg>jdbc/users</Arg>
- <Arg>
- <New class="org.postgresql.ds.PGPoolingDataSource">
- <Set name="serverName">localhost</Set>
- <Set name="databaseName">users</Set>
- <Set name="user">postgres</Set>
- <Set name="password">sparky</Set>
- </New>
- </Arg>
-</New>
-<New id="users_shutdown" class="org.mortbay.jetty.plus.naming.Resource">
- <Arg>jdbc/users_shutdown</Arg>
- <Arg>
- <New class="org.postgresql.ds.PGPoolingDataSource">
- <Set name="serverName">localhost</Set>
- <Set name="databaseName">users</Set>
- <Set name="user">postgres</Set>
- <Set name="password">sparky</Set>
- </New>
- </Arg>
-</New>
-
-</Configure>
-
+++ /dev/null
-<?xml version="1.0"?>
-<!--
- ~ Licensed to the Apache Software Foundation (ASF) under one
- ~ or more contributor license agreements. See the NOTICE file
- ~ distributed with this work for additional information
- ~ regarding copyright ownership. The ASF licenses this file
- ~ to you under the Apache License, Version 2.0 (the
- ~ "License"); you may not use this file except in compliance
- ~ with the License. You may obtain a copy of the License at
- ~
- ~ http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing,
- ~ software distributed under the License is distributed on an
- ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- ~ KIND, either express or implied. See the License for the
- ~ specific language governing permissions and limitations
- ~ under the License.
- -->
-
-<!DOCTYPE Configure PUBLIC "-//Mort Bay Consulting//DTD Configure//EN" "http://jetty.mortbay.org/configure.dtd">
-<Configure id='wac' class="org.eclipse.jetty.webapp.WebAppContext">
-
- <New id="validation_mail" class="org.eclipse.jetty.plus.jndi.Resource">
- <Arg>mail/Session</Arg>
- <Arg>
- <New class="org.eclipse.jetty.jndi.factories.MailSessionReference">
- <Set name="user"></Set>
- <Set name="password"></Set>
- <Set name="properties">
- <New class="java.util.Properties">
- <Put name="mail.smtp.host">localhost</Put>
- <Put name="mail.from">archiva@localhost</Put>
- <Put name="mail.senderName">Archiva</Put>
- <Put name="mail.debug">true</Put>
- </New>
- </Set>
- </New>
- </Arg>
- </New>
-
- <!-- Users / Security Database -->
- <New id="users" class="org.eclipse.jetty.plus.jndi.Resource">
- <Arg><Ref id="wac"/></Arg>
- <Arg>jdbc/users</Arg>
- <Arg>
- <New class="org.apache.derby.jdbc.EmbeddedDataSource">
- <Set name="DatabaseName">../databases/users</Set>
- <Set name="user">sa</Set>
- <Set name="createDatabase">create</Set>
- </New>
- </Arg>
- </New>
-
- <New id="usersShutdown" class="org.eclipse.jetty.plus.jndi.Resource">
- <Arg><Ref id="wac"/></Arg>
- <Arg>jdbc/usersShutdown</Arg>
- <Arg>
- <New class="org.apache.derby.jdbc.EmbeddedDataSource">
- <Set name="DatabaseName">../databases/users</Set>
- <Set name="user">sa</Set>
- <Set name="shutdownDatabase">shutdown</Set>
- </New>
- </Arg>
- </New>
-
-</Configure>
-
+++ /dev/null
-package org.apache.archiva.web.action;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import com.opensymphony.xwork2.ActionContext;
-import com.opensymphony.xwork2.ActionSupport;
-import org.apache.archiva.admin.model.AuditInformation;
-import org.apache.archiva.audit.AuditEvent;
-import org.apache.archiva.audit.AuditListener;
-import org.apache.archiva.audit.Auditable;
-import org.apache.archiva.metadata.repository.RepositorySessionFactory;
-import org.apache.archiva.redback.users.User;
-import org.apache.archiva.security.ArchivaXworkUser;
-import org.apache.archiva.web.runtime.ArchivaRuntimeInfo;
-import org.apache.commons.lang.StringUtils;
-import org.apache.struts2.ServletActionContext;
-import org.apache.struts2.interceptor.SessionAware;
-import org.apache.archiva.redback.rest.services.RedbackRequestInformation;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.context.ApplicationContext;
-
-import javax.annotation.PostConstruct;
-import javax.inject.Inject;
-import javax.inject.Named;
-import javax.servlet.http.HttpServletRequest;
-import java.text.SimpleDateFormat;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-/**
- * LogEnabled and SessionAware ActionSupport
- */
-public abstract class AbstractActionSupport
- extends ActionSupport
- implements SessionAware, Auditable
-{
- protected Map<?, ?> session;
-
- protected Logger log = LoggerFactory.getLogger( getClass() );
-
- @Inject
- private List<AuditListener> auditListeners = new ArrayList<AuditListener>();
-
-
- @Inject
- @Named( value = "repositorySessionFactory" )
- protected RepositorySessionFactory repositorySessionFactory;
-
- @Inject
- protected ApplicationContext applicationContext;
-
- private String principal;
-
- @Inject
- private ArchivaRuntimeInfo archivaRuntimeInfo;
-
- @PostConstruct
- public void initialize()
- {
- // no op
- }
-
- @SuppressWarnings( "unchecked" )
- public void setSession( Map map )
- {
- this.session = map;
- }
-
- public void addAuditListener( AuditListener listener )
- {
- this.auditListeners.add( listener );
- }
-
- public void clearAuditListeners()
- {
- this.auditListeners.clear();
- }
-
- public void removeAuditListener( AuditListener listener )
- {
- this.auditListeners.remove( listener );
- }
-
- protected void triggerAuditEvent( String repositoryId, String resource, String action )
- {
- AuditEvent event = new AuditEvent( repositoryId, getPrincipal(), resource, action );
- event.setRemoteIP( getRemoteAddr() );
-
- for ( AuditListener listener : auditListeners )
- {
- listener.auditEvent( event );
- }
- }
-
- protected void triggerAuditEvent( String resource, String action )
- {
- AuditEvent event = new AuditEvent( null, getPrincipal(), resource, action );
- event.setRemoteIP( getRemoteAddr() );
-
- for ( AuditListener listener : auditListeners )
- {
- listener.auditEvent( event );
- }
- }
-
- protected void triggerAuditEvent( String action )
- {
- AuditEvent event = new AuditEvent( null, getPrincipal(), null, action );
- event.setRemoteIP( getRemoteAddr() );
-
- for ( AuditListener listener : auditListeners )
- {
- listener.auditEvent( event );
- }
- }
-
- private String getRemoteAddr()
- {
- HttpServletRequest request = ServletActionContext.getRequest();
- return request != null ? request.getRemoteAddr() : null;
- }
-
- @SuppressWarnings( "unchecked" )
- protected String getPrincipal()
- {
- if ( principal != null )
- {
- return principal;
- }
- return ArchivaXworkUser.getActivePrincipal( ActionContext.getContext().getSession() );
- }
-
- void setPrincipal( String principal )
- {
- this.principal = principal;
- }
-
- public void setAuditListeners( List<AuditListener> auditListeners )
- {
- this.auditListeners = auditListeners;
- }
-
- public void setRepositorySessionFactory( RepositorySessionFactory repositorySessionFactory )
- {
- this.repositorySessionFactory = repositorySessionFactory;
- }
-
- protected <T> Map<String, T> getBeansOfType( Class<T> clazz )
- {
- //TODO do some caching here !!!
- // olamy : with plexus we get only roleHint
- // as per convention we named spring bean role#hint remove role# if exists
- Map<String, T> springBeans = applicationContext.getBeansOfType( clazz );
-
- Map<String, T> beans = new HashMap<String, T>( springBeans.size() );
-
- for ( Map.Entry<String, T> entry : springBeans.entrySet() )
- {
- String key = StringUtils.substringAfterLast( entry.getKey(), "#" );
- beans.put( key, entry.getValue() );
- }
- return beans;
- }
-
-
- protected AuditInformation getAuditInformation()
- {
- AuditInformation auditInformation = new AuditInformation( new SimpleUser( getPrincipal() ), getRemoteAddr() );
-
- return auditInformation;
- }
-
- protected RedbackRequestInformation getRedbackRequestInformation()
- {
- return new RedbackRequestInformation( new SimpleUser( getPrincipal() ), getRemoteAddr() );
- }
-
- public String getArchivaVersion()
- {
- return archivaRuntimeInfo.getVersion();
- }
-
- public String getArchivaBuildNumber()
- {
- return archivaRuntimeInfo.getBuildNumber();
- }
-
- public String getArchivaBuildTimestamp()
- {
- return Long.toString(
- archivaRuntimeInfo.getTimestamp() );
- }
-
- public String getArchivaBuildTimestampDateStr()
- {
- SimpleDateFormat sfd = new SimpleDateFormat( "yyyy-MM-dd'T'HH:mm:ssz", getLocale() );
- return sfd.format( new Date( archivaRuntimeInfo.getTimestamp() ) );
- }
-
- /**
- * dummy information for audit events
- *
- * @since 1.4-M1
- */
- private static class SimpleUser
- implements User
- {
-
- private String principal;
-
- protected SimpleUser( String principal )
- {
- this.principal = principal;
- }
-
- public Object getPrincipal()
- {
- return this.principal;
- }
-
- public String getUsername()
- {
- return this.principal;
- }
-
- public void setUsername( String name )
- {
-
- }
-
- public String getFullName()
- {
- return null;
- }
-
- public void setFullName( String name )
- {
-
- }
-
- public String getEmail()
- {
- return null;
- }
-
- public void setEmail( String address )
- {
-
- }
-
- public String getPassword()
- {
- return null;
- }
-
- public void setPassword( String rawPassword )
- {
-
- }
-
- public String getEncodedPassword()
- {
- return null;
- }
-
- public void setEncodedPassword( String encodedPassword )
- {
-
- }
-
- public Date getLastPasswordChange()
- {
- return null;
- }
-
- public void setLastPasswordChange( Date passwordChangeDate )
- {
-
- }
-
- public List<String> getPreviousEncodedPasswords()
- {
- return null;
- }
-
- public void setPreviousEncodedPasswords( List<String> encodedPasswordList )
- {
-
- }
-
- public void addPreviousEncodedPassword( String encodedPassword )
- {
-
- }
-
- public boolean isPermanent()
- {
- return false;
- }
-
- public void setPermanent( boolean permanent )
- {
-
- }
-
- public boolean isLocked()
- {
- return false;
- }
-
- public void setLocked( boolean locked )
- {
-
- }
-
- public boolean isPasswordChangeRequired()
- {
- return false;
- }
-
- public void setPasswordChangeRequired( boolean changeRequired )
- {
-
- }
-
- public boolean isValidated()
- {
- return false;
- }
-
- public void setValidated( boolean valid )
- {
-
- }
-
- public int getCountFailedLoginAttempts()
- {
- return 0;
- }
-
- public void setCountFailedLoginAttempts( int count )
- {
-
- }
-
- public Date getAccountCreationDate()
- {
- return null;
- }
-
- public void setAccountCreationDate( Date date )
- {
-
- }
-
- public Date getLastLoginDate()
- {
- return null;
- }
-
- public void setLastLoginDate( Date date )
- {
-
- }
- }
-
-
-}
+++ /dev/null
-package org.apache.archiva.web.action;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import org.apache.archiva.security.AccessDeniedException;
-import org.apache.archiva.security.ArchivaSecurityException;
-import org.apache.archiva.security.PrincipalNotFoundException;
-import org.apache.archiva.security.UserRepositories;
-
-import javax.inject.Inject;
-import java.util.Collections;
-import java.util.List;
-
-public class AbstractRepositoryBasedAction
- extends AbstractActionSupport
-{
-
- @Inject
- private UserRepositories userRepositories;
-
- protected List<String> getObservableRepos()
- {
- try
- {
- List<String> ids = userRepositories.getObservableRepositoryIds( getPrincipal() );
- return ids == null ? Collections.<String>emptyList() : ids;
- }
- catch ( PrincipalNotFoundException e )
- {
- log.warn( e.getMessage(), e );
- }
- catch ( AccessDeniedException e )
- {
- log.warn( e.getMessage(), e );
- }
- catch ( ArchivaSecurityException e )
- {
- log.warn( e.getMessage(), e );
- }
- return Collections.emptyList();
- }
-
- public void setUserRepositories( UserRepositories userRepositories )
- {
- this.userRepositories = userRepositories;
- }
-}
+++ /dev/null
-package org.apache.archiva.web.action;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import org.apache.archiva.metadata.model.ProjectVersionMetadata;
-import org.apache.archiva.metadata.repository.MetadataResolutionException;
-import org.apache.archiva.metadata.repository.MetadataResolver;
-import org.apache.archiva.metadata.repository.RepositorySession;
-import org.apache.archiva.metadata.repository.storage.maven2.MavenProjectFacet;
-import org.apache.commons.collections.CollectionUtils;
-import org.apache.commons.lang.StringUtils;
-import org.springframework.context.annotation.Scope;
-import org.springframework.stereotype.Controller;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.LinkedHashSet;
-import java.util.List;
-import java.util.Set;
-
-/**
- * Browse the repository.
- *
- * @todo implement repository selectors (all or specific repository)
- */
-@Controller( "browseAction" )
-@Scope( "prototype" )
-public class BrowseAction
- extends AbstractRepositoryBasedAction
-{
- private String groupId;
-
- private String artifactId;
-
- private String repositoryId;
-
- private ProjectVersionMetadata sharedModel;
-
- private Collection<String> namespaces;
-
- private Collection<String> projectIds;
-
- private Collection<String> projectVersions;
-
- public String browse()
- throws MetadataResolutionException
- {
- List<String> selectedRepos = getObservableRepos();
- if ( CollectionUtils.isEmpty( selectedRepos ) )
- {
- return GlobalResults.ACCESS_TO_NO_REPOS;
- }
-
- Set<String> namespaces = new LinkedHashSet<String>();
-
- // TODO: this logic should be optional, particularly remembering we want to keep this code simple
- // it is located here to avoid the content repository implementation needing to do too much for what
- // is essentially presentation code
- Set<String> namespacesToCollapse;
- RepositorySession repositorySession = repositorySessionFactory.createSession();
- try
- {
- MetadataResolver metadataResolver = repositorySession.getResolver();
- namespacesToCollapse = new LinkedHashSet<String>();
- for ( String repoId : selectedRepos )
- {
- namespacesToCollapse.addAll( metadataResolver.resolveRootNamespaces( repositorySession, repoId ) );
- }
-
- for ( String n : namespacesToCollapse )
- {
- // TODO: check performance of this
- namespaces.add( collapseNamespaces( repositorySession, metadataResolver, selectedRepos, n ) );
- }
- }
- finally
- {
- repositorySession.close();
- }
-
- this.namespaces = getSortedList( namespaces );
- return SUCCESS;
- }
-
- private String collapseNamespaces( RepositorySession repositorySession, MetadataResolver metadataResolver,
- Collection<String> repoIds, String n )
- throws MetadataResolutionException
- {
- Set<String> subNamespaces = new LinkedHashSet<String>();
- for ( String repoId : repoIds )
- {
- subNamespaces.addAll( metadataResolver.resolveNamespaces( repositorySession, repoId, n ) );
- }
- if ( subNamespaces.size() != 1 )
- {
- log.debug( "{} is not collapsible as it has sub-namespaces: {}", n, subNamespaces );
- return n;
- }
- else
- {
- for ( String repoId : repoIds )
- {
- Collection<String> projects = metadataResolver.resolveProjects( repositorySession, repoId, n );
- if ( projects != null && !projects.isEmpty() )
- {
- log.debug( "{} is not collapsible as it has projects", n );
- return n;
- }
- }
- return collapseNamespaces( repositorySession, metadataResolver, repoIds,
- n + "." + subNamespaces.iterator().next() );
- }
- }
-
- public String browseGroup()
- throws MetadataResolutionException
- {
- if ( StringUtils.isEmpty( groupId ) )
- {
- // TODO: i18n
- addActionError( "You must specify a group ID to browse" );
- return ERROR;
- }
-
- List<String> selectedRepos = getObservableRepos();
- if ( CollectionUtils.isEmpty( selectedRepos ) )
- {
- return GlobalResults.ACCESS_TO_NO_REPOS;
- }
-
- Set<String> projects = new LinkedHashSet<String>();
-
- RepositorySession repositorySession = repositorySessionFactory.createSession();
- Set<String> namespaces;
- try
- {
- MetadataResolver metadataResolver = repositorySession.getResolver();
-
- Set<String> namespacesToCollapse = new LinkedHashSet<String>();
- for ( String repoId : selectedRepos )
- {
- namespacesToCollapse.addAll( metadataResolver.resolveNamespaces( repositorySession, repoId, groupId ) );
-
- projects.addAll( metadataResolver.resolveProjects( repositorySession, repoId, groupId ) );
- }
-
- // TODO: this logic should be optional, particularly remembering we want to keep this code simple
- // it is located here to avoid the content repository implementation needing to do too much for what
- // is essentially presentation code
- namespaces = new LinkedHashSet<String>();
- for ( String n : namespacesToCollapse )
- {
- // TODO: check performance of this
- namespaces.add(
- collapseNamespaces( repositorySession, metadataResolver, selectedRepos, groupId + "." + n ) );
- }
- }
- finally
- {
- repositorySession.close();
- }
-
- this.namespaces = getSortedList( namespaces );
- this.projectIds = getSortedList( projects );
- return SUCCESS;
- }
-
- private List<String> getSortedList( Set<String> set )
- {
- List<String> list = new ArrayList<String>( set );
- Collections.sort( list );
- return list;
- }
-
- public String browseArtifact()
- throws MetadataResolutionException
- {
- if ( StringUtils.isEmpty( groupId ) )
- {
- // TODO: i18n
- addActionError( "You must specify a group ID to browse" );
- return ERROR;
- }
-
- if ( StringUtils.isEmpty( artifactId ) )
- {
- // TODO: i18n
- addActionError( "You must specify a artifact ID to browse" );
- return ERROR;
- }
-
- List<String> selectedRepos = getObservableRepos();
- if ( CollectionUtils.isEmpty( selectedRepos ) )
- {
- return GlobalResults.ACCESS_TO_NO_REPOS;
- }
-
- RepositorySession repositorySession = repositorySessionFactory.createSession();
- try
- {
- MetadataResolver metadataResolver = repositorySession.getResolver();
-
- Set<String> versions = new LinkedHashSet<String>();
- for ( String repoId : selectedRepos )
- {
- versions.addAll(
- metadataResolver.resolveProjectVersions( repositorySession, repoId, groupId, artifactId ) );
- }
-
- // TODO: sort by known version ordering method
- this.projectVersions = new ArrayList<String>( versions );
-
- populateSharedModel( repositorySession, metadataResolver, selectedRepos, versions );
- }
- finally
- {
- repositorySession.close();
- }
-
- return SUCCESS;
- }
-
- private void populateSharedModel( RepositorySession repositorySession, MetadataResolver metadataResolver,
- Collection<String> selectedRepos, Collection<String> projectVersions )
- {
- sharedModel = new ProjectVersionMetadata();
-
- MavenProjectFacet mavenFacet = new MavenProjectFacet();
- mavenFacet.setGroupId( groupId );
- mavenFacet.setArtifactId( artifactId );
- sharedModel.addFacet( mavenFacet );
-
- boolean isFirstVersion = true;
-
- for ( String version : projectVersions )
- {
- ProjectVersionMetadata versionMetadata = null;
- for ( String repoId : selectedRepos )
- {
- if ( versionMetadata == null )
- {
- try
- {
- versionMetadata =
- metadataResolver.resolveProjectVersion( repositorySession, repoId, groupId, artifactId,
- version );
- }
- catch ( MetadataResolutionException e )
- {
- log.error(
- "Skipping invalid metadata while compiling shared model for " + groupId + ":" + artifactId
- + " in repo " + repoId + ": " + e.getMessage() );
- }
- }
- }
-
- if ( versionMetadata == null )
- {
- continue;
- }
-
- if ( isFirstVersion )
- {
- sharedModel = versionMetadata;
- sharedModel.setId( null );
- }
- else
- {
- MavenProjectFacet versionMetadataMavenFacet =
- (MavenProjectFacet) versionMetadata.getFacet( MavenProjectFacet.FACET_ID );
- if ( versionMetadataMavenFacet != null )
- {
- if ( mavenFacet.getPackaging() != null && !StringUtils.equalsIgnoreCase( mavenFacet.getPackaging(),
- versionMetadataMavenFacet.getPackaging() ) )
- {
- mavenFacet.setPackaging( null );
- }
- }
-
- if ( sharedModel.getName() != null && !StringUtils.equalsIgnoreCase( sharedModel.getName(),
- versionMetadata.getName() ) )
- {
- sharedModel.setName( "" );
- }
-
- if ( sharedModel.getDescription() != null && !StringUtils.equalsIgnoreCase(
- sharedModel.getDescription(), versionMetadata.getDescription() ) )
- {
- sharedModel.setDescription( null );
- }
-
- if ( sharedModel.getIssueManagement() != null && versionMetadata.getIssueManagement() != null
- && !StringUtils.equalsIgnoreCase( sharedModel.getIssueManagement().getUrl(),
- versionMetadata.getIssueManagement().getUrl() ) )
- {
- sharedModel.setIssueManagement( null );
- }
-
- if ( sharedModel.getCiManagement() != null && versionMetadata.getCiManagement() != null
- && !StringUtils.equalsIgnoreCase( sharedModel.getCiManagement().getUrl(),
- versionMetadata.getCiManagement().getUrl() ) )
- {
- sharedModel.setCiManagement( null );
- }
-
- if ( sharedModel.getOrganization() != null && versionMetadata.getOrganization() != null
- && !StringUtils.equalsIgnoreCase( sharedModel.getOrganization().getName(),
- versionMetadata.getOrganization().getName() ) )
- {
- sharedModel.setOrganization( null );
- }
-
- if ( sharedModel.getUrl() != null && !StringUtils.equalsIgnoreCase( sharedModel.getUrl(),
- versionMetadata.getUrl() ) )
- {
- sharedModel.setUrl( null );
- }
- }
-
- isFirstVersion = false;
- }
- }
-
- public String getGroupId()
- {
- return groupId;
- }
-
- public void setGroupId( String groupId )
- {
- this.groupId = groupId;
- }
-
- public String getArtifactId()
- {
- return artifactId;
- }
-
- public void setArtifactId( String artifactId )
- {
- this.artifactId = artifactId;
- }
-
- public Collection<String> getNamespaces()
- {
- return namespaces;
- }
-
- public String getRepositoryId()
- {
-
- return repositoryId;
- }
-
- public void setRepositoryId( String repositoryId )
- {
-
- this.repositoryId = repositoryId;
- }
-
- public ProjectVersionMetadata getSharedModel()
- {
- return sharedModel;
- }
-
- public Collection<String> getProjectIds()
- {
- return projectIds;
- }
-
- public Collection<String> getProjectVersions()
- {
- return projectVersions;
- }
-}
+++ /dev/null
-package org.apache.archiva.web.action;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import com.opensymphony.xwork2.Preparable;
-import com.opensymphony.xwork2.Validateable;
-import org.apache.archiva.admin.model.managed.ManagedRepositoryAdmin;
-import org.apache.archiva.audit.Auditable;
-import org.apache.archiva.checksum.ChecksumAlgorithm;
-import org.apache.archiva.common.utils.VersionUtil;
-import org.apache.archiva.maven2.model.Artifact;
-import org.apache.archiva.rest.api.services.ArchivaRestServiceException;
-import org.apache.archiva.rest.api.services.RepositoriesService;
-import org.apache.archiva.security.AccessDeniedException;
-import org.apache.archiva.security.ArchivaSecurityException;
-import org.apache.archiva.security.PrincipalNotFoundException;
-import org.apache.archiva.security.UserRepositories;
-import org.apache.commons.lang.StringUtils;
-import org.apache.archiva.redback.rest.services.RedbackAuthenticationThreadLocal;
-import org.springframework.context.annotation.Scope;
-import org.springframework.stereotype.Controller;
-
-import javax.annotation.PostConstruct;
-import javax.inject.Inject;
-import java.util.Collections;
-import java.util.List;
-
-/**
- * Delete an artifact. Metadata will be updated if one exists, otherwise it would be created.
- */
-@Controller( "deleteArtifactAction" )
-@Scope( "prototype" )
-public class DeleteArtifactAction
- extends AbstractActionSupport
- implements Validateable, Preparable, Auditable
-{
- /**
- * The groupId of the artifact to be deleted.
- */
- private String groupId;
-
- /**
- * The artifactId of the artifact to be deleted.
- */
- private String artifactId;
-
- /**
- * The version of the artifact to be deleted.
- */
- private String version;
-
- /**
- * @since 1.4-M2
- * The classifier of the artifact to be deleted (optionnal)
- */
- private String classifier;
-
- /**
- * @since 1.4-M2
- * The type of the artifact to be deleted (optionnal) (default jar)
- */
- private String type;
-
- /**
- * The repository where the artifact is to be deleted.
- */
- private String repositoryId;
-
- /**
- * List of managed repositories to delete from.
- */
- private List<String> managedRepos;
-
- @Inject
- private UserRepositories userRepositories;
-
- @Inject
- private ManagedRepositoryAdmin managedRepositoryAdmin;
-
- @Inject
- private RepositoriesService repositoriesService;
-
- private ChecksumAlgorithm[] algorithms = new ChecksumAlgorithm[]{ ChecksumAlgorithm.SHA1, ChecksumAlgorithm.MD5 };
-
- @PostConstruct
- public void initialize()
- {
- super.initialize();
- }
-
- public String getGroupId()
- {
- return groupId;
- }
-
- public void setGroupId( String groupId )
- {
- this.groupId = groupId;
- }
-
- public String getArtifactId()
- {
- return artifactId;
- }
-
- public void setArtifactId( String artifactId )
- {
- this.artifactId = artifactId;
- }
-
- public String getVersion()
- {
- return version;
- }
-
- public void setVersion( String version )
- {
- this.version = version;
- }
-
- public String getRepositoryId()
- {
- return repositoryId;
- }
-
- public void setRepositoryId( String repositoryId )
- {
- this.repositoryId = repositoryId;
- }
-
- public List<String> getManagedRepos()
- {
- return managedRepos;
- }
-
- public void setManagedRepos( List<String> managedRepos )
- {
- this.managedRepos = managedRepos;
- }
-
- public void prepare()
- {
- managedRepos = getManagableRepos();
- }
-
- public String getClassifier()
- {
- return classifier;
- }
-
- public void setClassifier( String classifier )
- {
- this.classifier = classifier;
- }
-
- public String getType()
- {
- return type;
- }
-
- public void setType( String type )
- {
- this.type = type;
- }
-
- public String input()
- {
- return INPUT;
- }
-
- private void reset()
- {
- // reset the fields so the form is clear when
- // the action returns to the jsp page
- groupId = "";
- artifactId = "";
- version = "";
- repositoryId = "";
- classifier = "";
- type = "";
- }
-
- public String doDelete()
- {
- // services need a ThreadLocal variable to test karma
- RedbackAuthenticationThreadLocal.set( getRedbackRequestInformation() );
- try
- {
- Artifact artifact = new Artifact();
- artifact.setGroupId( groupId );
- artifact.setArtifactId( artifactId );
- artifact.setVersion( version );
- artifact.setClassifier( classifier );
- artifact.setPackaging( type );
- artifact.setContext( repositoryId );
-
- repositoriesService.deleteArtifact( artifact );
- }
- catch ( ArchivaRestServiceException e )
- {
- addActionError( "ArchivaRestServiceException exception: " + e.getMessage() );
- return ERROR;
- }
- finally
- {
- RedbackAuthenticationThreadLocal.set( null );
- }
-
- StringBuilder msg = new StringBuilder( "Artifact \'" ).append( groupId ).append( ":" ).append( artifactId );
-
- if ( StringUtils.isNotEmpty( classifier ) )
- {
- msg.append( ":" ).append( classifier );
- }
- msg.append( ":" ).append( version ).append( "' was successfully deleted from repository '" ).append(
- repositoryId ).append( "'" );
- addActionMessage( msg.toString() );
- reset();
- return SUCCESS;
- }
-
- public void validate()
- {
- try
- {
- if ( !userRepositories.isAuthorizedToDeleteArtifacts( getPrincipal(), repositoryId ) )
- {
- addActionError( "User is not authorized to delete artifacts in repository '" + repositoryId + "'." );
- }
-
- if ( ( version.length() > 0 ) && ( !VersionUtil.isVersion( version ) ) )
- {
- addActionError( "Invalid version." );
- }
- }
- catch ( AccessDeniedException e )
- {
- addActionError( e.getMessage() );
- }
- catch ( ArchivaSecurityException e )
- {
- addActionError( e.getMessage() );
- }
-
- // trims all request parameter values, since the trailing/leading white-spaces are ignored during validation.
- trimAllRequestParameterValues();
- }
-
- private List<String> getManagableRepos()
- {
- try
- {
- return userRepositories.getManagableRepositoryIds( getPrincipal() );
- }
- catch ( PrincipalNotFoundException e )
- {
- log.warn( e.getMessage(), e );
- }
- catch ( AccessDeniedException e )
- {
- log.warn( e.getMessage(), e );
- // TODO: pass this onto the screen.
- }
- catch ( ArchivaSecurityException e )
- {
- log.warn( e.getMessage(), e );
- }
- return Collections.emptyList();
- }
-
- private void trimAllRequestParameterValues()
- {
- if ( StringUtils.isNotEmpty( groupId ) )
- {
- groupId = groupId.trim();
- }
-
- if ( StringUtils.isNotEmpty( artifactId ) )
- {
- artifactId = artifactId.trim();
- }
-
- if ( StringUtils.isNotEmpty( version ) )
- {
- version = version.trim();
- }
-
- if ( StringUtils.isNotEmpty( repositoryId ) )
- {
- repositoryId = repositoryId.trim();
- }
- }
-
- public ManagedRepositoryAdmin getManagedRepositoryAdmin()
- {
- return managedRepositoryAdmin;
- }
-
- public void setManagedRepositoryAdmin( ManagedRepositoryAdmin managedRepositoryAdmin )
- {
- this.managedRepositoryAdmin = managedRepositoryAdmin;
- }
-
- public RepositoriesService getRepositoriesService()
- {
- return repositoriesService;
- }
-
- public void setRepositoriesService( RepositoriesService repositoriesService )
- {
- this.repositoriesService = repositoriesService;
- }
-}
+++ /dev/null
-package org.apache.archiva.web.action;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-/**
- * GlobalResults - constants for global result definitions.
- *
- *
- */
-public class GlobalResults
-{
- public static final String ACCESS_TO_NO_REPOS = "access_to_no_repos";
-}
+++ /dev/null
-package org.apache.archiva.web.action;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import com.opensymphony.xwork2.Preparable;
-import com.opensymphony.xwork2.Validateable;
-import org.apache.archiva.admin.model.RepositoryAdminException;
-import org.apache.archiva.admin.model.beans.ManagedRepository;
-import org.apache.archiva.admin.model.managed.ManagedRepositoryAdmin;
-import org.apache.archiva.audit.AuditEvent;
-import org.apache.archiva.audit.Auditable;
-import org.apache.archiva.common.utils.VersionUtil;
-import org.apache.archiva.metadata.model.ArtifactMetadata;
-import org.apache.archiva.metadata.repository.MetadataRepository;
-import org.apache.archiva.metadata.repository.RepositorySession;
-import org.apache.archiva.metadata.repository.filter.Filter;
-import org.apache.archiva.metadata.repository.filter.IncludesFilter;
-import org.apache.archiva.redback.components.taskqueue.TaskQueueException;
-import org.apache.archiva.scheduler.repository.RepositoryArchivaTaskScheduler;
-import org.apache.archiva.scheduler.repository.RepositoryTask;
-import org.apache.archiva.stagerepository.merge.Maven2RepositoryMerger;
-import org.springframework.context.annotation.Scope;
-import org.springframework.stereotype.Controller;
-
-import javax.inject.Inject;
-import javax.inject.Named;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-
-/**
- *
- */
-@Controller ("mergeAction")
-@Scope ("prototype")
-public class MergeAction
- extends AbstractActionSupport
- implements Validateable, Preparable, Auditable
-{
-
- @Inject
- @Named (value = "repositoryMerger#maven2")
- private Maven2RepositoryMerger repositoryMerger;
-
- @Inject
- protected ManagedRepositoryAdmin managedRepositoryAdmin;
-
- @Inject
- @Named (value = "archivaTaskScheduler#repository")
- private RepositoryArchivaTaskScheduler repositoryTaskScheduler;
-
- private ManagedRepository repository;
-
- private String repoid;
-
- private String sourceRepoId;
-
- private final String action = "merge";
-
- private final String hasConflicts = "CONFLICTS";
-
- private List<ArtifactMetadata> conflictSourceArtifacts;
-
- private List<ArtifactMetadata> conflictSourceArtifactsToBeDisplayed;
-
- public String getConflicts()
- {
- try
- {
- sourceRepoId = repoid + "-stage";
- ManagedRepository targetRepoConfig = managedRepositoryAdmin.getManagedRepository( sourceRepoId );
-
- if ( targetRepoConfig != null )
- {
- return hasConflicts;
- }
- else
- {
- return ERROR;
- }
- }
- catch ( RepositoryAdminException e )
- {
- addActionError( "RepositoryAdminException " + e.getMessage() );
- return ERROR;
- }
- }
-
- public String doMerge()
- {
- RepositorySession repositorySession = repositorySessionFactory.createSession();
- try
- {
- MetadataRepository metadataRepository = repositorySession.getRepository();
- List<ArtifactMetadata> sourceArtifacts = metadataRepository.getArtifacts( sourceRepoId );
-
- if ( repository.isReleases() && !repository.isSnapshots() )
- {
- mergeWithOutSnapshots( metadataRepository, sourceArtifacts, sourceRepoId, repoid );
- }
- else
- {
- repositoryMerger.merge( metadataRepository, sourceRepoId, repoid );
-
- for ( ArtifactMetadata metadata : sourceArtifacts )
- {
- triggerAuditEvent( repoid, metadata.getId(), AuditEvent.MERGING_REPOSITORIES );
- }
- }
-
- scanRepository();
-
- addActionMessage( "Repository '" + sourceRepoId + "' successfully merged to '" + repoid + "'." );
-
- return SUCCESS;
- }
- catch ( Exception e )
- {
- log.error( e.getMessage(), e );
- addActionError( "Error occurred while merging the repositories: " + e.getMessage() );
- return ERROR;
- }
- finally
- {
- repositorySession.close();
- }
- }
-
- public String mergeBySkippingConflicts()
- {
- RepositorySession repositorySession = repositorySessionFactory.createSession();
- try
- {
- MetadataRepository metadataRepository = repositorySession.getRepository();
- List<ArtifactMetadata> sourceArtifacts = metadataRepository.getArtifacts( sourceRepoId );
- sourceArtifacts.removeAll( conflictSourceArtifacts );
-
- if ( repository.isReleases() && !repository.isSnapshots() )
- {
- mergeWithOutSnapshots( metadataRepository, sourceArtifacts, sourceRepoId, repoid );
- }
- else
- {
-
- Filter<ArtifactMetadata> artifactsWithOutConflicts =
- new IncludesFilter<ArtifactMetadata>( sourceArtifacts );
- repositoryMerger.merge( metadataRepository, sourceRepoId, repoid, artifactsWithOutConflicts );
- for ( ArtifactMetadata metadata : sourceArtifacts )
- {
- triggerAuditEvent( repoid, metadata.getId(), AuditEvent.MERGING_REPOSITORIES );
- }
- }
-
- scanRepository();
-
- addActionMessage( "Repository '" + sourceRepoId + "' successfully merged to '" + repoid + "'." );
-
- return SUCCESS;
- }
- catch ( Exception e )
- {
- log.error( e.getMessage(), e );
- addActionError( "Error occurred while merging the repositories: " + e.getMessage() );
- return ERROR;
- }
- finally
- {
- repositorySession.close();
- }
- }
-
- private void mergeWithOutSnapshots( MetadataRepository metadataRepository, List<ArtifactMetadata> sourceArtifacts,
- String sourceRepoId, String repoid )
- throws Exception
- {
- List<ArtifactMetadata> artifactsWithOutSnapshots = new ArrayList<ArtifactMetadata>();
- for ( ArtifactMetadata metadata : sourceArtifacts )
- {
-
- if ( metadata.getProjectVersion().contains( VersionUtil.SNAPSHOT ) )
- {
- artifactsWithOutSnapshots.add( metadata );
- }
- else
- {
- triggerAuditEvent( repoid, metadata.getId(), AuditEvent.MERGING_REPOSITORIES );
- }
-
- }
- sourceArtifacts.removeAll( artifactsWithOutSnapshots );
-
- Filter<ArtifactMetadata> artifactListWithOutSnapShots = new IncludesFilter<ArtifactMetadata>( sourceArtifacts );
- repositoryMerger.merge( metadataRepository, sourceRepoId, repoid, artifactListWithOutSnapShots );
- }
-
- public String mergeWithOutConlficts()
- {
- sourceRepoId = repoid + "-stage";
-
- RepositorySession repositorySession = repositorySessionFactory.createSession();
- try
- {
- conflictSourceArtifacts =
- repositoryMerger.getConflictingArtifacts( repositorySession.getRepository(), sourceRepoId, repoid );
- }
- catch ( Exception e )
- {
- addActionError( "Error occurred while merging the repositories." );
- return ERROR;
- }
- finally
- {
- repositorySession.close();
- }
-
- addActionMessage( "Repository '" + sourceRepoId + "' successfully merged to '" + repoid + "'." );
-
- return SUCCESS;
- }
-
- public ManagedRepository getRepository()
- {
- return repository;
- }
-
- public void setRepository( ManagedRepository repository )
- {
- this.repository = repository;
- }
-
- public void prepare()
- throws Exception
- {
- sourceRepoId = repoid + "-stage";
- RepositorySession repositorySession = repositorySessionFactory.createSession();
- try
- {
- conflictSourceArtifacts =
- repositoryMerger.getConflictingArtifacts( repositorySession.getRepository(), sourceRepoId, repoid );
- }
- finally
- {
- repositorySession.close();
- }
-
- this.repository = managedRepositoryAdmin.getManagedRepository( repoid );
- setConflictSourceArtifactsToBeDisplayed( conflictSourceArtifacts );
- }
-
- public String getSourceRepoId()
- {
- return sourceRepoId;
- }
-
- public void setSourceRepoId( String sourceRepoId )
- {
- this.sourceRepoId = sourceRepoId;
- }
-
- public String getRepoid()
- {
- return repoid;
- }
-
- public void setRepoid( String repoid )
- {
- this.repoid = repoid;
- }
-
- public List<ArtifactMetadata> getConflictSourceArtifacts()
- {
- return conflictSourceArtifacts;
- }
-
- public void setConflictSourceArtifacts( List<ArtifactMetadata> conflictSourceArtifacts )
- {
- this.conflictSourceArtifacts = conflictSourceArtifacts;
- }
-
- public List<ArtifactMetadata> getConflictSourceArtifactsToBeDisplayed()
- {
- return conflictSourceArtifactsToBeDisplayed;
- }
-
- public void setConflictSourceArtifactsToBeDisplayed( List<ArtifactMetadata> conflictSourceArtifacts )
- throws Exception
- {
- this.conflictSourceArtifactsToBeDisplayed = new ArrayList<ArtifactMetadata>();
- HashMap<String, ArtifactMetadata> map = new HashMap<String, ArtifactMetadata>();
- for ( ArtifactMetadata metadata : conflictSourceArtifacts )
- {
- String metadataId =
- metadata.getNamespace() + metadata.getProject() + metadata.getProjectVersion() + metadata.getVersion();
- map.put( metadataId, metadata );
- }
- conflictSourceArtifactsToBeDisplayed.addAll( map.values() );
- }
-
-
- private void scanRepository()
- {
- RepositoryTask task = new RepositoryTask();
- task.setRepositoryId( repoid );
- task.setScanAll( true );
-
- if ( repositoryTaskScheduler.isProcessingRepositoryTask( repoid ) )
- {
- log.info( "Repository [{}] task was already queued.", repoid );
- }
- else
- {
- try
- {
- log.info( "Your request to have repository [{}] be indexed has been queued.", repoid );
- repositoryTaskScheduler.queueTask( task );
- }
- catch ( TaskQueueException e )
- {
- log.warn( "Unable to queue your request to have repository [{}] be indexed: {}", repoid,
- e.getMessage() );
- }
- }
- }
-
- public ManagedRepositoryAdmin getManagedRepositoryAdmin()
- {
- return managedRepositoryAdmin;
- }
-
- public void setManagedRepositoryAdmin( ManagedRepositoryAdmin managedRepositoryAdmin )
- {
- this.managedRepositoryAdmin = managedRepositoryAdmin;
- }
-}
\ No newline at end of file
+++ /dev/null
-package org.apache.archiva.web.action;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import com.opensymphony.xwork2.Preparable;
-import org.apache.archiva.admin.model.RepositoryAdminException;
-import org.apache.archiva.admin.model.beans.ManagedRepository;
-import org.apache.archiva.admin.model.managed.ManagedRepositoryAdmin;
-import org.apache.archiva.indexer.search.RepositorySearch;
-import org.apache.archiva.indexer.search.RepositorySearchException;
-import org.apache.archiva.indexer.search.SearchFields;
-import org.apache.archiva.indexer.search.SearchResultHit;
-import org.apache.archiva.indexer.search.SearchResultLimits;
-import org.apache.archiva.indexer.search.SearchResults;
-import org.apache.archiva.metadata.model.ArtifactMetadata;
-import org.apache.archiva.metadata.repository.MetadataRepository;
-import org.apache.archiva.metadata.repository.RepositorySession;
-import org.apache.commons.collections.CollectionUtils;
-import org.apache.commons.lang.StringUtils;
-import org.apache.struts2.ServletActionContext;
-import org.springframework.context.annotation.Scope;
-import org.springframework.stereotype.Controller;
-import org.springframework.web.context.WebApplicationContext;
-import org.springframework.web.context.support.WebApplicationContextUtils;
-
-import javax.inject.Inject;
-import java.net.MalformedURLException;
-import java.util.ArrayList;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-
-/**
- * Search all indexed fields by the given criteria.
- */
-@Controller( "searchAction" )
-@Scope( "prototype" )
-public class SearchAction
- extends AbstractRepositoryBasedAction
- implements Preparable
-{
-
- @Inject
- protected ManagedRepositoryAdmin managedRepositoryAdmin;
-
- /**
- * Query string.
- */
- private String q;
-
- /**
- * The Search Results.
- */
- private SearchResults results;
-
- private static final String RESULTS = "results";
-
- private static final String ARTIFACT = "artifact";
-
- private List<ArtifactMetadata> databaseResults;
-
- private int currentPage = 0;
-
- private int totalPages;
-
- private boolean searchResultsOnly;
-
- private String completeQueryString;
-
- private static final String COMPLETE_QUERY_STRING_SEPARATOR = ";";
-
- private List<String> managedRepositoryList = new ArrayList<String>();
-
- private String groupId;
-
- private String artifactId;
-
- private String version;
-
- private String className;
-
- /**
- * contains osgi metadata Bundle-Version if available
- *
- * @since 1.4-M1
- */
- private String bundleVersion;
-
- /**
- * contains osgi metadata Bundle-SymbolicName if available
- *
- * @since 1.4-M1
- */
- private String bundleSymbolicName;
-
- /**
- * contains osgi metadata Export-Package if available
- *
- * @since 1.4-M1
- */
- private String bundleExportPackage;
-
- /**
- * contains osgi metadata import package if available
- *
- * @since 1.4-M1
- */
- private String bundleImportPackage;
-
- /**
- * contains osgi metadata name if available
- *
- * @since 1.4-M1
- */
- private String bundleName;
-
- /**
- * contains osgi metadata Export-Service if available
- *
- * @since 1.4-M1
- */
- private String bundleExportService;
-
- private int rowCount = 30;
-
- private String repositoryId;
-
- private boolean fromFilterSearch;
-
- private boolean filterSearch = false;
-
- private boolean fromResultsPage;
-
- @Inject
- private RepositorySearch nexusSearch;
-
- private Map<String, String> searchFields;
-
- private String infoMessage;
-
- public boolean isFromResultsPage()
- {
- return fromResultsPage;
- }
-
- public void setFromResultsPage(boolean fromResultsPage)
- {
- this.fromResultsPage = fromResultsPage;
- }
-
- public boolean isFromFilterSearch()
- {
- return fromFilterSearch;
- }
-
- public void setFromFilterSearch(boolean fromFilterSearch)
- {
- this.fromFilterSearch = fromFilterSearch;
- }
-
- public void prepare()
- {
- managedRepositoryList = getObservableRepos();
-
- if ( managedRepositoryList.size() > 0 )
- {
- managedRepositoryList.add("all");
- }
-
- searchFields = new LinkedHashMap<String, String>();
- searchFields.put("groupId", "Group ID");
- searchFields.put("artifactId", "Artifact ID");
- searchFields.put("version", "Version");
- searchFields.put("className", "Class/Package Name");
- searchFields.put("rowCount", "Row Count");
- searchFields.put("bundleVersion", "OSGI Bundle Version");
- searchFields.put("bundleSymbolicName", "OSGI Bundle-SymbolicName");
- searchFields.put("bundleExportPackage", "OSGI Export-Package");
- searchFields.put("bundleImportPackage", "OSGI import package");
- searchFields.put("bundleName", "OSGI name");
- searchFields.put("bundleExportService", "OSGI Export-Service");
-
- super.clearErrorsAndMessages();
- clearSearchFields();
- }
-
- private void clearSearchFields()
- {
- repositoryId = "";
- artifactId = "";
- groupId = "";
- version = "";
- className = "";
- rowCount = 30;
- currentPage = 0;
- }
-
- // advanced search MRM-90 -- filtered search
- public String filteredSearch()
- throws MalformedURLException
- {
- if ( StringUtils.isBlank(groupId) && StringUtils.isBlank(artifactId) && StringUtils.isBlank(className)
- && StringUtils.isBlank(version) && StringUtils.isBlank(bundleExportPackage) && StringUtils.isBlank(
- bundleExportService) && StringUtils.isBlank(bundleImportPackage) && StringUtils.isBlank(bundleName)
- && StringUtils.isBlank(bundleSymbolicName) && StringUtils.isBlank(bundleVersion) )
- {
- addActionError("Advanced Search - At least one search criteria must be provided.");
- return INPUT;
- }
-
- fromFilterSearch = true;
-
- if ( CollectionUtils.isEmpty(managedRepositoryList) )
- {
- return GlobalResults.ACCESS_TO_NO_REPOS;
- }
-
- SearchResultLimits limits = new SearchResultLimits(currentPage);
- limits.setPageSize(rowCount);
- List<String> selectedRepos = new ArrayList<String>();
-
- if ( repositoryId == null || StringUtils.isBlank(repositoryId) || "all".equals(
- StringUtils.stripToEmpty(repositoryId)) )
- {
- selectedRepos = getObservableRepos();
- }
- else
- {
- selectedRepos.add(repositoryId);
- }
-
- if ( CollectionUtils.isEmpty(selectedRepos) )
- {
- return GlobalResults.ACCESS_TO_NO_REPOS;
- }
-
- SearchFields searchFields = new SearchFields(groupId, artifactId, version, null, className, selectedRepos);
-
- if ( StringUtils.isNotBlank(this.bundleExportPackage) )
- {
- searchFields.setBundleExportPackage(this.bundleExportPackage);
- }
-
- if ( StringUtils.isNotBlank(this.bundleExportService) )
- {
- searchFields.setBundleExportService(this.bundleExportService);
- }
-
- if ( StringUtils.isNotBlank(this.bundleImportPackage) )
- {
- searchFields.setBundleImportPackage(this.bundleImportPackage);
- }
-
- if ( StringUtils.isNotBlank(this.bundleSymbolicName) )
- {
- searchFields.setBundleSymbolicName(this.bundleSymbolicName);
- }
-
- if ( StringUtils.isNotBlank(this.bundleName) )
- {
- searchFields.setBundleName(this.bundleName);
- }
-
- if ( StringUtils.isNotBlank(this.bundleVersion) )
- {
- searchFields.setBundleVersion(this.bundleVersion);
- }
-
- log.debug("filteredSearch with searchFields {}", searchFields);
-
- // TODO: add packaging in the list of fields for advanced search (UI)?
- try
- {
- results = getNexusSearch().search(getPrincipal(), searchFields, limits);
- }
- catch ( RepositorySearchException e )
- {
- addActionError(e.getMessage());
- return ERROR;
- }
-
- if ( results.isEmpty() )
- {
- addActionError("No results found");
- return INPUT;
- }
-
- totalPages = results.getTotalHits() / limits.getPageSize();
-
- if ( ( results.getTotalHits() % limits.getPageSize() ) != 0 )
- {
- totalPages = totalPages + 1;
- }
-
- for ( SearchResultHit hit : results.getHits() )
- {
- // fix version ?
- //hit.setVersion( VersionUtil.getBaseVersion( version ) );
-
- }
-
- return SUCCESS;
- }
-
- @SuppressWarnings( "unchecked" )
- public String quickSearch()
- throws MalformedURLException
- {
- /* TODO: give action message if indexing is in progress.
- * This should be based off a count of 'unprocessed' artifacts.
- * This (yet to be written) routine could tell the user that X (unprocessed) artifacts are not yet
- * present in the full text search.
- */
-
- assert q != null && q.length() != 0;
-
- fromFilterSearch = false;
-
- SearchResultLimits limits = new SearchResultLimits(currentPage);
-
- List<String> selectedRepos = getObservableRepos();
- if ( CollectionUtils.isEmpty(selectedRepos) )
- {
- return GlobalResults.ACCESS_TO_NO_REPOS;
- }
-
- log.debug("quickSearch with selectedRepos {} query {}", selectedRepos, q);
-
- try
- {
- if ( searchResultsOnly && !completeQueryString.equals("") )
- {
- results = getNexusSearch().search(getPrincipal(), selectedRepos, q, limits, parseCompleteQueryString());
- }
- else
- {
- completeQueryString = "";
- results = getNexusSearch().search(getPrincipal(), selectedRepos, q, limits, null);
- }
- }
- catch ( RepositorySearchException e )
- {
- addActionError(e.getMessage());
- return ERROR;
- }
-
- if ( results.isEmpty() )
- {
- addActionError("No results found");
- return INPUT;
- }
-
- totalPages = results.getTotalHitsMapSize() / limits.getPageSize();
-
- if ( ( results.getTotalHitsMapSize() % limits.getPageSize() ) != 0 )
- {
- totalPages = totalPages + 1;
- }
-
- if ( !isEqualToPreviousSearchTerm(q) )
- {
- buildCompleteQueryString(q);
- }
-
- return SUCCESS;
- }
-
- public String findArtifact()
- throws Exception
- {
- // TODO: give action message if indexing is in progress
-
- if ( StringUtils.isBlank(q) )
- {
- addActionError("Unable to search for a blank checksum");
- return INPUT;
- }
-
- databaseResults = new ArrayList<ArtifactMetadata>();
- RepositorySession repositorySession = repositorySessionFactory.createSession();
- try
- {
- MetadataRepository metadataRepository = repositorySession.getRepository();
- for ( String repoId : getObservableRepos() )
- {
- databaseResults.addAll(metadataRepository.getArtifactsByChecksum(repoId, q));
- }
- }
- finally
- {
- repositorySession.close();
- }
-
- if ( databaseResults.isEmpty() )
- {
- addActionError("No results found");
- return INPUT;
- }
-
- if ( databaseResults.size() == 1 )
- {
- // 1 hit? return it's information directly!
- return ARTIFACT;
- }
-
- return RESULTS;
- }
-
- public String doInput()
- {
- return INPUT;
- }
-
- private void buildCompleteQueryString(String searchTerm)
- {
- if ( searchTerm.indexOf(COMPLETE_QUERY_STRING_SEPARATOR) != -1 )
- {
- searchTerm = StringUtils.remove(searchTerm, COMPLETE_QUERY_STRING_SEPARATOR);
- }
-
- if ( completeQueryString == null || "".equals(completeQueryString) )
- {
- completeQueryString = searchTerm;
- }
- else
- {
- completeQueryString = completeQueryString + COMPLETE_QUERY_STRING_SEPARATOR + searchTerm;
- }
- }
-
- private List<String> parseCompleteQueryString()
- {
- List<String> parsedCompleteQueryString = new ArrayList<String>();
- String[] parsed = StringUtils.split(completeQueryString, COMPLETE_QUERY_STRING_SEPARATOR);
- CollectionUtils.addAll(parsedCompleteQueryString, parsed);
-
- return parsedCompleteQueryString;
- }
-
- private boolean isEqualToPreviousSearchTerm(String searchTerm)
- {
- if ( !"".equals(completeQueryString) )
- {
- String[] parsed = StringUtils.split(completeQueryString, COMPLETE_QUERY_STRING_SEPARATOR);
- if ( StringUtils.equalsIgnoreCase(searchTerm, parsed[parsed.length - 1]) )
- {
- return true;
- }
- }
-
- return false;
- }
-
- public String getQ()
- {
- return q;
- }
-
- public void setQ(String q)
- {
- this.q = q;
- }
-
- public SearchResults getResults()
- {
- return results;
- }
-
- public List<ArtifactMetadata> getDatabaseResults()
- {
- return databaseResults;
- }
-
- public void setCurrentPage(int page)
- {
- this.currentPage = page;
- }
-
- public int getCurrentPage()
- {
- return currentPage;
- }
-
- public int getTotalPages()
- {
- return totalPages;
- }
-
- public void setTotalPages(int totalPages)
- {
- this.totalPages = totalPages;
- }
-
- public boolean isSearchResultsOnly()
- {
- return searchResultsOnly;
- }
-
- public void setSearchResultsOnly(boolean searchResultsOnly)
- {
- this.searchResultsOnly = searchResultsOnly;
- }
-
- public String getCompleteQueryString()
- {
- return completeQueryString;
- }
-
- public void setCompleteQueryString(String completeQueryString)
- {
- this.completeQueryString = completeQueryString;
- }
-
- public Map<String, ManagedRepository> getManagedRepositories()
- throws RepositoryAdminException
- {
- return managedRepositoryAdmin.getManagedRepositoriesAsMap();
- }
-
- // wtf : does nothing ??
- public void setManagedRepositories(Map<String, ManagedRepository> managedRepositories)
- {
- }
-
- public String getGroupId()
- {
- return groupId;
- }
-
- public void setGroupId(String groupId)
- {
- this.groupId = groupId;
- }
-
- public String getArtifactId()
- {
- return artifactId;
- }
-
- public void setArtifactId(String artifactId)
- {
- this.artifactId = artifactId;
- }
-
- public String getVersion()
- {
- return version;
- }
-
- public void setVersion(String version)
- {
- this.version = version;
- }
-
- public int getRowCount()
- {
- return rowCount;
- }
-
- public void setRowCount(int rowCount)
- {
- this.rowCount = rowCount;
- }
-
- public boolean isFilterSearch()
- {
- return filterSearch;
- }
-
- public void setFilterSearch(boolean filterSearch)
- {
- this.filterSearch = filterSearch;
- }
-
- public String getRepositoryId()
- {
- return repositoryId;
- }
-
- public void setRepositoryId(String repositoryId)
- {
- this.repositoryId = repositoryId;
- }
-
- public List<String> getManagedRepositoryList()
- {
- return managedRepositoryList;
- }
-
- public void setManagedRepositoryList(List<String> managedRepositoryList)
- {
- this.managedRepositoryList = managedRepositoryList;
- }
-
- public String getClassName()
- {
- return className;
- }
-
- public void setClassName(String className)
- {
- this.className = className;
- }
-
- public RepositorySearch getNexusSearch()
- {
- if ( nexusSearch == null )
- {
- WebApplicationContext wac =
- WebApplicationContextUtils.getRequiredWebApplicationContext(ServletActionContext.getServletContext());
- nexusSearch = wac.getBean("nexusSearch", RepositorySearch.class);
- }
- return nexusSearch;
- }
-
- public void setNexusSearch(RepositorySearch nexusSearch)
- {
- this.nexusSearch = nexusSearch;
- }
-
- public Map<String, String> getSearchFields()
- {
- return searchFields;
- }
-
- public void setSearchFields(Map<String, String> searchFields)
- {
- this.searchFields = searchFields;
- }
-
- public String getInfoMessage()
- {
- return infoMessage;
- }
-
- public void setInfoMessage(String infoMessage)
- {
- this.infoMessage = infoMessage;
- }
-
- public ManagedRepositoryAdmin getManagedRepositoryAdmin()
- {
- return managedRepositoryAdmin;
- }
-
- public void setManagedRepositoryAdmin(ManagedRepositoryAdmin managedRepositoryAdmin)
- {
- this.managedRepositoryAdmin = managedRepositoryAdmin;
- }
-
- public String getBundleVersion()
- {
- return bundleVersion;
- }
-
- public void setBundleVersion(String bundleVersion)
- {
- this.bundleVersion = bundleVersion;
- }
-
- public String getBundleSymbolicName()
- {
- return bundleSymbolicName;
- }
-
- public void setBundleSymbolicName(String bundleSymbolicName)
- {
- this.bundleSymbolicName = bundleSymbolicName;
- }
-
- public String getBundleExportPackage()
- {
- return bundleExportPackage;
- }
-
- public void setBundleExportPackage(String bundleExportPackage)
- {
- this.bundleExportPackage = bundleExportPackage;
- }
-
- public String getBundleImportPackage()
- {
- return bundleImportPackage;
- }
-
- public void setBundleImportPackage(String bundleImportPackage)
- {
- this.bundleImportPackage = bundleImportPackage;
- }
-
- public String getBundleName()
- {
- return bundleName;
- }
-
- public void setBundleName(String bundleName)
- {
- this.bundleName = bundleName;
- }
-
- public String getBundleExportService()
- {
- return bundleExportService;
- }
-
- public void setBundleExportService(String bundleExportService)
- {
- this.bundleExportService = bundleExportService;
- }
-}
+++ /dev/null
-package org.apache.archiva.web.action;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import com.opensymphony.xwork2.Validateable;
-import org.apache.archiva.metadata.generic.GenericMetadataFacet;
-import org.apache.archiva.metadata.model.ArtifactMetadata;
-import org.apache.archiva.metadata.model.Dependency;
-import org.apache.archiva.metadata.model.MailingList;
-import org.apache.archiva.metadata.model.MetadataFacet;
-import org.apache.archiva.metadata.model.ProjectVersionMetadata;
-import org.apache.archiva.metadata.model.ProjectVersionReference;
-import org.apache.archiva.metadata.repository.MetadataRepository;
-import org.apache.archiva.metadata.repository.MetadataRepositoryException;
-import org.apache.archiva.metadata.repository.MetadataResolutionException;
-import org.apache.archiva.metadata.repository.MetadataResolver;
-import org.apache.archiva.metadata.repository.RepositorySession;
-import org.apache.archiva.metadata.repository.storage.maven2.ArtifactMetadataVersionComparator;
-import org.apache.archiva.reports.RepositoryProblemFacet;
-import org.apache.archiva.repository.RepositoryContentFactory;
-import org.apache.archiva.repository.RepositoryException;
-import org.apache.archiva.repository.RepositoryNotFoundException;
-import org.apache.archiva.maven2.model.Artifact;
-import org.apache.archiva.rest.services.utils.ArtifactBuilder;
-import org.apache.commons.lang.StringUtils;
-import org.springframework.context.annotation.Scope;
-import org.springframework.stereotype.Controller;
-
-import javax.inject.Inject;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-
-/**
- * Browse the repository.
- * <p/>
- * TODO change name to ShowVersionedAction to conform to terminology.
- */
-@SuppressWarnings( "serial" )
-@Controller( "showArtifactAction" )
-@Scope( "prototype" )
-public class ShowArtifactAction
- extends AbstractRepositoryBasedAction
- implements Validateable
-{
- /* .\ Not Exposed \._____________________________________________ */
-
- @Inject
- private RepositoryContentFactory repositoryFactory;
-
- /* .\ Exposed Output Objects \.__________________________________ */
-
- private String groupId;
-
- private String artifactId;
-
- private String version;
-
- private String repositoryId;
-
- /**
- * The model of this versioned project.
- */
- private ProjectVersionMetadata model;
-
- /**
- * The list of artifacts that depend on this versioned project.
- */
- private List<ProjectVersionReference> dependees;
-
- private List<MailingList> mailingLists;
-
- private List<Dependency> dependencies;
-
- private Map<String, List<Artifact>> artifacts;
-
- private boolean dependencyTree = false;
-
- private String deleteItem;
-
- private Map<String, String> genericMetadata;
-
- private String propertyName;
-
- private String propertyValue;
-
- /**
- * Show the versioned project information tab. TODO: Change name to 'project' - we are showing project versions
- * here, not specific artifact information (though that is rendered in the download box).
- */
- public String artifact()
- {
- RepositorySession repositorySession = repositorySessionFactory.createSession();
- try
- {
- return handleArtifact( repositorySession );
- }
- catch ( Exception e )
- {
- log.warn( "Unable to getProjectVersionMetadata: " + e.getMessage(), e );
- addActionError( "Unable to getProjectVersionMetadata - consult application logs." );
- return ERROR;
- }
- finally
-
- {
- repositorySession.close();
- }
-
- }
-
- private String handleArtifact( RepositorySession session )
- throws RepositoryNotFoundException, RepositoryException
- {
- // In the future, this should be replaced by the repository grouping mechanism, so that we are only making
- // simple resource requests here and letting the resolver take care of it
- ProjectVersionMetadata versionMetadata = getProjectVersionMetadata( session );
-
- if ( versionMetadata == null )
- {
- addActionError( "Artifact not found" );
- return ERROR;
- }
-
- if ( versionMetadata.isIncomplete() )
- {
- addIncompleteModelWarning( "Artifact metadata is incomplete." );
- }
-
- model = versionMetadata;
-
- return SUCCESS;
- }
-
- private ProjectVersionMetadata getProjectVersionMetadata( RepositorySession session )
- throws RepositoryNotFoundException, RepositoryException
- {
- ProjectVersionMetadata versionMetadata = null;
- artifacts = new LinkedHashMap<String, List<Artifact>>();
-
- List<String> repos = getObservableRepos();
-
- MetadataResolver metadataResolver = session.getResolver();
- for ( String repoId : repos )
- {
- if ( versionMetadata == null )
- {
- // we don't want the implementation being that intelligent - so another resolver to do the
- // "just-in-time" nature of picking up the metadata (if appropriate for the repository type) is used
- try
- {
- versionMetadata =
- metadataResolver.resolveProjectVersion( session, repoId, groupId, artifactId, version );
- if ( versionMetadata != null )
- {
- MetadataFacet repoProbFacet;
- if ( ( repoProbFacet = versionMetadata.getFacet( RepositoryProblemFacet.FACET_ID ) ) != null )
- {
- addIncompleteModelWarning( "Artifact metadata is incomplete: "
- + ( (RepositoryProblemFacet) repoProbFacet ).getProblem() );
- //set metadata to complete so that no additional 'Artifact metadata is incomplete' warning is logged
- versionMetadata.setIncomplete( false );
- }
- }
-
- }
- catch ( MetadataResolutionException e )
- {
- addIncompleteModelWarning( "Error resolving artifact metadata: " + e.getMessage() );
-
- // TODO: need a consistent way to construct this - same in ArchivaMetadataCreationConsumer
- versionMetadata = new ProjectVersionMetadata();
- versionMetadata.setId( version );
- }
- if ( versionMetadata != null )
- {
- repositoryId = repoId;
-
- List<ArtifactMetadata> artifacts;
- try
- {
- artifacts = new ArrayList<ArtifactMetadata>(
- metadataResolver.resolveArtifacts( session, repoId, groupId, artifactId, version ) );
- }
- catch ( MetadataResolutionException e )
- {
- addIncompleteModelWarning( "Error resolving artifact metadata: " + e.getMessage() );
- artifacts = Collections.emptyList();
- }
- Collections.sort( artifacts, ArtifactMetadataVersionComparator.INSTANCE );
-
- for ( ArtifactMetadata artifact : artifacts )
- {
- List<Artifact> l = this.artifacts.get( artifact.getVersion() );
- if ( l == null )
- {
- l = new ArrayList<Artifact>();
- this.artifacts.put( artifact.getVersion(), l );
- }
-
- ArtifactBuilder builder = new ArtifactBuilder().forArtifactMetadata(
- artifact ).withManagedRepositoryContent(
- repositoryFactory.getManagedRepositoryContent( repositoryId ) );
- l.add( builder.build() );
- }
- }
- }
- }
-
- return versionMetadata;
- }
-
- private void addIncompleteModelWarning( String warningMessage )
- {
- addActionError( warningMessage );
- //"The model may be incomplete due to a previous error in resolving information. Refer to the repository problem reports for more information." );
- }
-
- /**
- * Show the artifact information tab.
- */
- public String dependencies()
- {
- String result = artifact();
-
- this.dependencies = model.getDependencies();
-
- return result;
- }
-
- /**
- * Show the mailing lists information tab.
- */
- public String mailingLists()
- {
- String result = artifact();
-
- this.mailingLists = model.getMailingLists();
-
- return result;
- }
-
- /**
- * Show the reports tab.
- */
- public String reports()
- {
- // TODO: hook up reports on project
-
- return SUCCESS;
- }
-
- /**
- * Show the dependees (other artifacts that depend on this project) tab.
- */
- public String dependees()
- throws MetadataResolutionException
- {
- List<ProjectVersionReference> references = new ArrayList<ProjectVersionReference>();
- // TODO: what if we get duplicates across repositories?
- RepositorySession repositorySession = repositorySessionFactory.createSession();
- try
- {
- MetadataResolver metadataResolver = repositorySession.getResolver();
- for ( String repoId : getObservableRepos() )
- {
- // TODO: what about if we want to see this irrespective of version?
- references.addAll(
- metadataResolver.resolveProjectReferences( repositorySession, repoId, groupId, artifactId,
- version ) );
- }
- }
- finally
- {
- repositorySession.close();
- }
-
- this.dependees = references;
-
- // TODO: may need to note on the page that references will be incomplete if the other artifacts are not yet
- // stored in the content repository
- // (especially in the case of pre-population import)
-
- return artifact();
- }
-
- /**
- * Show the dependencies of this versioned project tab.
- */
- public String dependencyTree()
- {
- // temporarily use this as we only need the model for the tag to perform, but we should be resolving the
- // graph here instead
-
- // TODO: may need to note on the page that tree will be incomplete if the other artifacts are not yet stored in
- // the content repository
- // (especially in the case of pre-population import)
-
- // TODO: a bit ugly, should really be mapping all these results differently now
- this.dependencyTree = true;
-
- return artifact();
- }
-
- public String projectMetadata()
- {
- String result = artifact();
-
- if ( model.getFacet( GenericMetadataFacet.FACET_ID ) != null )
- {
- genericMetadata = model.getFacet( GenericMetadataFacet.FACET_ID ).toProperties();
- }
-
- if ( genericMetadata == null )
- {
- genericMetadata = new HashMap<String, String>();
- }
-
- return result;
- }
-
- public String addMetadataProperty()
- {
- RepositorySession repositorySession = repositorySessionFactory.createSession();
- ProjectVersionMetadata projectMetadata;
- try
- {
- MetadataRepository metadataRepository = repositorySession.getRepository();
- projectMetadata = getProjectVersionMetadata( repositorySession );
- if ( projectMetadata == null )
- {
- addActionError( "Artifact not found" );
- return ERROR;
- }
-
- if ( projectMetadata.getFacet( GenericMetadataFacet.FACET_ID ) == null )
- {
- genericMetadata = new HashMap<String, String>();
- }
- else
- {
- genericMetadata = projectMetadata.getFacet( GenericMetadataFacet.FACET_ID ).toProperties();
- }
-
- if ( propertyName == null || "".equals( propertyName.trim() ) || propertyValue == null || "".equals(
- propertyValue.trim() ) )
- {
- model = projectMetadata;
- addActionError( "Property Name and Property Value are required." );
- return INPUT;
- }
-
- genericMetadata.put( propertyName, propertyValue );
-
- try
- {
- updateProjectMetadata( projectMetadata, metadataRepository );
- repositorySession.save();
- }
- catch ( MetadataRepositoryException e )
- {
- log.warn( "Unable to persist modified project metadata after adding entry: " + e.getMessage(), e );
- addActionError(
- "Unable to add metadata item to underlying content storage - consult application logs." );
- return ERROR;
- }
-
- // TODO: why re-retrieve?
- projectMetadata = getProjectVersionMetadata( repositorySession );
- }
- catch ( Exception e )
- {
- log.warn( "Unable to getProjectVersionMetadata: " + e.getMessage(), e );
- addActionError( "Unable to getProjectVersionMetadata - consult application logs." );
- return ERROR;
- }
- finally
- {
- repositorySession.close();
- }
-
- genericMetadata = projectMetadata.getFacet( GenericMetadataFacet.FACET_ID ).toProperties();
-
- model = projectMetadata;
-
- propertyName = "";
- propertyValue = "";
-
- return SUCCESS;
- }
-
- public String deleteMetadataEntry()
- {
- RepositorySession repositorySession = repositorySessionFactory.createSession();
- try
- {
- MetadataRepository metadataRepository = repositorySession.getRepository();
- ProjectVersionMetadata projectMetadata = getProjectVersionMetadata( repositorySession );
-
- if ( projectMetadata == null )
- {
- addActionError( "Artifact not found" );
- return ERROR;
- }
-
- if ( projectMetadata.getFacet( GenericMetadataFacet.FACET_ID ) != null )
- {
- genericMetadata = projectMetadata.getFacet( GenericMetadataFacet.FACET_ID ).toProperties();
-
- if ( !StringUtils.isEmpty( deleteItem ) )
- {
- genericMetadata.remove( deleteItem );
-
- try
- {
- updateProjectMetadata( projectMetadata, metadataRepository );
- repositorySession.save();
- }
- catch ( MetadataRepositoryException e )
- {
- log.warn( "Unable to persist modified project metadata after removing entry: " + e.getMessage(),
- e );
- addActionError(
- "Unable to remove metadata item to underlying content storage - consult application logs." );
- return ERROR;
- }
-
- // TODO: why re-retrieve?
- projectMetadata = getProjectVersionMetadata( repositorySession );
-
- genericMetadata = projectMetadata.getFacet( GenericMetadataFacet.FACET_ID ).toProperties();
-
- model = projectMetadata;
-
- addActionMessage( "Property successfully deleted." );
- }
-
- deleteItem = "";
- }
- else
- {
- addActionError( "No generic metadata facet for this artifact." );
- return ERROR;
- }
- }
- catch ( Exception e )
- {
- log.warn( "Unable to getProjectVersionMetadata: " + e.getMessage(), e );
- addActionError( "Unable to getProjectVersionMetadata - consult application logs." );
- return ERROR;
-
- }
- finally
- {
- repositorySession.close();
- }
-
- return SUCCESS;
- }
-
- private void updateProjectMetadata( ProjectVersionMetadata projectMetadata, MetadataRepository metadataRepository )
- throws MetadataRepositoryException
- {
- GenericMetadataFacet genericMetadataFacet = new GenericMetadataFacet();
- genericMetadataFacet.fromProperties( genericMetadata );
-
- projectMetadata.addFacet( genericMetadataFacet );
-
- metadataRepository.updateProjectVersion( repositoryId, groupId, artifactId, projectMetadata );
- }
-
- @Override
- public void validate()
- {
- if ( StringUtils.isBlank( groupId ) )
- {
- addActionError( "You must specify a group ID to browse" );
- }
-
- if ( StringUtils.isBlank( artifactId ) )
- {
- addActionError( "You must specify a artifact ID to browse" );
- }
-
- if ( StringUtils.isBlank( version ) )
- {
- addActionError( "You must specify a version to browse" );
- }
- }
-
- public ProjectVersionMetadata getModel()
- {
- return model;
- }
-
- public String getGroupId()
- {
- return groupId;
- }
-
- public void setGroupId( String groupId )
- {
- this.groupId = groupId;
- }
-
- public String getArtifactId()
- {
- return artifactId;
- }
-
- public void setArtifactId( String artifactId )
- {
- this.artifactId = artifactId;
- }
-
- public String getVersion()
- {
- return version;
- }
-
- public void setVersion( String version )
- {
- this.version = version;
- }
-
- public List<MailingList> getMailingLists()
- {
- return mailingLists;
- }
-
- public List<Dependency> getDependencies()
- {
- return dependencies;
- }
-
- public List<ProjectVersionReference> getDependees()
- {
- return dependees;
- }
-
- public String getRepositoryId()
- {
- return repositoryId;
- }
-
- public void setRepositoryId( String repositoryId )
- {
- this.repositoryId = repositoryId;
- }
-
- public Map<String, List<Artifact>> getArtifacts()
- {
- return artifacts;
- }
-
- public Collection<String> getSnapshotVersions()
- {
- return artifacts.keySet();
- }
-
- public boolean isDependencyTree()
- {
- return dependencyTree;
- }
-
- public void setDeleteItem( String deleteItem )
- {
- this.deleteItem = deleteItem;
- }
-
- public Map<String, String> getGenericMetadata()
- {
- return genericMetadata;
- }
-
- public void setGenericMetadata( Map<String, String> genericMetadata )
- {
- this.genericMetadata = genericMetadata;
- }
-
- public String getPropertyName()
- {
- return propertyName;
- }
-
- public void setPropertyName( String propertyName )
- {
- this.propertyName = propertyName;
- }
-
- public String getPropertyValue()
- {
- return propertyValue;
- }
-
- public void setPropertyValue( String propertyValue )
- {
- this.propertyValue = propertyValue;
- }
-
- public void setRepositoryFactory( RepositoryContentFactory repositoryFactory )
- {
- this.repositoryFactory = repositoryFactory;
- }
-
-
-}
+++ /dev/null
-package org.apache.archiva.web.action;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import com.opensymphony.xwork2.Preparable;
-import com.opensymphony.xwork2.Validateable;
-import org.apache.archiva.admin.model.RepositoryAdminException;
-import org.apache.archiva.admin.model.admin.ArchivaAdministration;
-import org.apache.archiva.admin.model.beans.ManagedRepository;
-import org.apache.archiva.admin.model.managed.ManagedRepositoryAdmin;
-import org.apache.archiva.audit.AuditEvent;
-import org.apache.archiva.audit.Auditable;
-import org.apache.archiva.checksum.ChecksumAlgorithm;
-import org.apache.archiva.checksum.ChecksummedFile;
-import org.apache.archiva.common.utils.VersionComparator;
-import org.apache.archiva.common.utils.VersionUtil;
-import org.apache.archiva.maven2.metadata.MavenMetadataReader;
-import org.apache.archiva.model.ArchivaRepositoryMetadata;
-import org.apache.archiva.model.ArtifactReference;
-import org.apache.archiva.model.SnapshotVersion;
-import org.apache.archiva.redback.components.taskqueue.TaskQueueException;
-import org.apache.archiva.repository.ManagedRepositoryContent;
-import org.apache.archiva.repository.RepositoryContentFactory;
-import org.apache.archiva.repository.RepositoryException;
-import org.apache.archiva.repository.RepositoryNotFoundException;
-import org.apache.archiva.repository.metadata.MetadataTools;
-import org.apache.archiva.repository.metadata.RepositoryMetadataException;
-import org.apache.archiva.repository.metadata.RepositoryMetadataWriter;
-import org.apache.archiva.scheduler.ArchivaTaskScheduler;
-import org.apache.archiva.scheduler.repository.RepositoryTask;
-import org.apache.archiva.security.AccessDeniedException;
-import org.apache.archiva.security.ArchivaSecurityException;
-import org.apache.archiva.security.PrincipalNotFoundException;
-import org.apache.archiva.security.UserRepositories;
-import org.apache.archiva.xml.XMLException;
-import org.apache.commons.io.FilenameUtils;
-import org.apache.commons.io.IOUtils;
-import org.apache.commons.lang.StringUtils;
-import org.apache.maven.model.Model;
-import org.apache.maven.model.io.xpp3.MavenXpp3Writer;
-import org.springframework.context.annotation.Scope;
-import org.springframework.stereotype.Controller;
-
-import javax.inject.Inject;
-import javax.inject.Named;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.FileWriter;
-import java.io.IOException;
-import java.text.DateFormat;
-import java.text.SimpleDateFormat;
-import java.util.ArrayList;
-import java.util.Calendar;
-import java.util.Collections;
-import java.util.Date;
-import java.util.List;
-import java.util.TimeZone;
-
-/**
- * Upload an artifact using Jakarta file upload in webwork. If set by the user a pom will also be generated. Metadata
- * will also be updated if one exists, otherwise it would be created.
- */
-@SuppressWarnings( "serial" )
-@Controller( "uploadAction" )
-@Scope( "prototype" )
-public class UploadAction
- extends AbstractActionSupport
- implements Validateable, Preparable, Auditable
-{
- /**
- * The groupId of the artifact to be deployed.
- */
- private String groupId;
-
- /**
- * The artifactId of the artifact to be deployed.
- */
- private String artifactId;
-
- /**
- * The version of the artifact to be deployed.
- */
- private String version;
-
- /**
- * The packaging of the artifact to be deployed.
- */
- private String packaging;
-
- /**
- * The classifier of the artifact to be deployed.
- */
- private String classifier;
-
- /**
- * The temporary file representing the artifact to be deployed.
- */
- private File artifactFile;
-
- /**
- * The temporary file representing the pom to be deployed alongside the artifact.
- */
- private File pomFile;
-
- /**
- * The repository where the artifact is to be deployed.
- */
- private String repositoryId;
-
- /**
- * Flag whether to generate a pom for the artifact or not.
- */
- private boolean generatePom;
-
- /**
- * List of managed repositories to deploy to.
- */
- private List<String> managedRepoIdList;
-
- @Inject
- private ManagedRepositoryAdmin managedRepositoryAdmin;
-
- @Inject
- private UserRepositories userRepositories;
-
- @Inject
- private ArchivaAdministration archivaAdministration;
-
- @Inject
- private RepositoryContentFactory repositoryFactory;
-
- @Inject
- @Named( value = "archivaTaskScheduler#repository" )
- private ArchivaTaskScheduler scheduler;
-
- private ChecksumAlgorithm[] algorithms = new ChecksumAlgorithm[]{ ChecksumAlgorithm.SHA1, ChecksumAlgorithm.MD5 };
-
- public void setArtifact( File file )
- {
- this.artifactFile = file;
- }
-
- public void setArtifactContentType( String contentType )
- {
- StringUtils.trim( contentType );
- }
-
- public void setArtifactFileName( String filename )
- {
- StringUtils.trim( filename );
- }
-
- public void setPom( File file )
- {
- this.pomFile = file;
- }
-
- public void setPomContentType( String contentType )
- {
- StringUtils.trim( contentType );
- }
-
- public void setPomFileName( String filename )
- {
- StringUtils.trim( filename );
- }
-
- public String getGroupId()
- {
- return groupId;
- }
-
- public void setGroupId( String groupId )
- {
- this.groupId = StringUtils.trim( groupId );
- }
-
- public String getArtifactId()
- {
- return artifactId;
- }
-
- public void setArtifactId( String artifactId )
- {
- this.artifactId = StringUtils.trim( artifactId );
- }
-
- public String getVersion()
- {
- return version;
- }
-
- public void setVersion( String version )
- {
- this.version = StringUtils.trim( version );
- }
-
- public String getPackaging()
- {
- return packaging;
- }
-
- public void setPackaging( String packaging )
- {
- this.packaging = StringUtils.trim( packaging );
- }
-
- public String getClassifier()
- {
- return classifier;
- }
-
- public void setClassifier( String classifier )
- {
- this.classifier = StringUtils.trim( classifier );
- }
-
- public String getRepositoryId()
- {
- return repositoryId;
- }
-
- public void setRepositoryId( String repositoryId )
- {
- this.repositoryId = repositoryId;
- }
-
- public boolean isGeneratePom()
- {
- return generatePom;
- }
-
- public void setGeneratePom( boolean generatePom )
- {
- this.generatePom = generatePom;
- }
-
- public List<String> getManagedRepoIdList()
- {
- return managedRepoIdList;
- }
-
- public void setManagedRepoIdList( List<String> managedRepoIdList )
- {
- this.managedRepoIdList = managedRepoIdList;
- }
-
- public void prepare()
- {
- managedRepoIdList = getManagableRepos();
- }
-
- public String input()
- {
- return INPUT;
- }
-
- private void reset()
- {
- // reset the fields so the form is clear when
- // the action returns to the jsp page
- groupId = "";
- artifactId = "";
- version = "";
- packaging = "";
- classifier = "";
- artifactFile = null;
- pomFile = null;
- repositoryId = "";
- generatePom = false;
- }
-
- public String doUpload()
- {
- try
- {
- ManagedRepository repoConfig = managedRepositoryAdmin.getManagedRepository( repositoryId );
-
- ArtifactReference artifactReference = new ArtifactReference();
- artifactReference.setArtifactId( artifactId );
- artifactReference.setGroupId( groupId );
- artifactReference.setVersion( version );
- artifactReference.setClassifier( classifier );
- artifactReference.setType( packaging );
-
- ManagedRepositoryContent repository = repositoryFactory.getManagedRepositoryContent( repositoryId );
-
- String artifactPath = repository.toPath( artifactReference );
-
- int lastIndex = artifactPath.lastIndexOf( '/' );
-
- String path = artifactPath.substring( 0, lastIndex );
- File targetPath = new File( repoConfig.getLocation(), path );
-
- log.debug( "artifactPath: {} found targetPath: {}", artifactPath, targetPath );
-
- Date lastUpdatedTimestamp = Calendar.getInstance().getTime();
- int newBuildNumber = -1;
- String timestamp = null;
-
- File versionMetadataFile = new File( targetPath, MetadataTools.MAVEN_METADATA );
- ArchivaRepositoryMetadata versionMetadata = getMetadata( versionMetadataFile );
-
- if ( VersionUtil.isSnapshot( version ) )
- {
- TimeZone timezone = TimeZone.getTimeZone( "UTC" );
- DateFormat fmt = new SimpleDateFormat( "yyyyMMdd.HHmmss" );
- fmt.setTimeZone( timezone );
- timestamp = fmt.format( lastUpdatedTimestamp );
- if ( versionMetadata.getSnapshotVersion() != null )
- {
- newBuildNumber = versionMetadata.getSnapshotVersion().getBuildNumber() + 1;
- }
- else
- {
- newBuildNumber = 1;
- }
- }
-
- if ( !targetPath.exists() )
- {
- targetPath.mkdirs();
- }
-
- String filename = artifactPath.substring( lastIndex + 1 );
- if ( VersionUtil.isSnapshot( version ) )
- {
- filename = filename.replaceAll( VersionUtil.SNAPSHOT, timestamp + "-" + newBuildNumber );
- }
-
- boolean fixChecksums =
- !( archivaAdministration.getKnownContentConsumers().contains( "create-missing-checksums" ) );
-
- try
- {
- File targetFile = new File( targetPath, filename );
- if ( targetFile.exists() && !VersionUtil.isSnapshot( version ) && repoConfig.isBlockRedeployments() )
- {
- addActionError(
- "Overwriting released artifacts in repository '" + repoConfig.getId() + "' is not allowed." );
- return ERROR;
- }
- else
- {
- copyFile( artifactFile, targetPath, filename, fixChecksums );
- triggerAuditEvent( repository.getId(), path + "/" + filename, AuditEvent.UPLOAD_FILE );
- queueRepositoryTask( repository.getId(), targetFile );
- }
- }
- catch ( IOException ie )
- {
- addActionError( "Error encountered while uploading file: " + ie.getMessage() );
- return ERROR;
- }
-
- String pomFilename = filename;
- if ( classifier != null && !"".equals( classifier ) )
- {
- pomFilename = StringUtils.remove( pomFilename, "-" + classifier );
- }
- pomFilename = FilenameUtils.removeExtension( pomFilename ) + ".pom";
-
- if ( generatePom )
- {
- try
- {
- File generatedPomFile = createPom( targetPath, pomFilename );
- triggerAuditEvent( repoConfig.getId(), path + "/" + pomFilename, AuditEvent.UPLOAD_FILE );
- if ( fixChecksums )
- {
- fixChecksums( generatedPomFile );
- }
- queueRepositoryTask( repoConfig.getId(), generatedPomFile );
- }
- catch ( IOException ie )
- {
- addActionError( "Error encountered while writing pom file: " + ie.getMessage() );
- return ERROR;
- }
- }
-
- if ( pomFile != null && pomFile.length() > 0 )
- {
- try
- {
- copyFile( pomFile, targetPath, pomFilename, fixChecksums );
- triggerAuditEvent( repoConfig.getId(), path + "/" + pomFilename, AuditEvent.UPLOAD_FILE );
- queueRepositoryTask( repoConfig.getId(), new File( targetPath, pomFilename ) );
- }
- catch ( IOException ie )
- {
- addActionError( "Error encountered while uploading pom file: " + ie.getMessage() );
- return ERROR;
- }
-
- }
-
- // explicitly update only if metadata-updater consumer is not enabled!
- if ( !archivaAdministration.getKnownContentConsumers().contains( "metadata-updater" ) )
- {
- updateProjectMetadata( targetPath.getAbsolutePath(), lastUpdatedTimestamp, timestamp, newBuildNumber,
- fixChecksums );
-
- if ( VersionUtil.isSnapshot( version ) )
- {
- updateVersionMetadata( versionMetadata, versionMetadataFile, lastUpdatedTimestamp, timestamp,
- newBuildNumber, fixChecksums );
- }
- }
-
- String msg = "Artifact \'" + groupId + ":" + artifactId + ":" + version
- + "\' was successfully deployed to repository \'" + repositoryId + "\'";
-
- addActionMessage( msg );
-
- reset();
- return SUCCESS;
- }
- catch ( RepositoryNotFoundException re )
- {
- addActionError( "Target repository cannot be found: " + re.getMessage() );
- return ERROR;
- }
- catch ( RepositoryException rep )
- {
- addActionError( "Repository exception: " + rep.getMessage() );
- return ERROR;
- }
- catch ( RepositoryAdminException e )
- {
- addActionError( "RepositoryAdmin exception: " + e.getMessage() );
- return ERROR;
- }
- }
-
- private void fixChecksums( File file )
- {
- ChecksummedFile checksum = new ChecksummedFile( file );
- checksum.fixChecksums( algorithms );
- }
-
- private void copyFile( File sourceFile, File targetPath, String targetFilename, boolean fixChecksums )
- throws IOException
- {
- FileOutputStream out = new FileOutputStream( new File( targetPath, targetFilename ) );
- FileInputStream input = new FileInputStream( sourceFile );
-
- try
- {
- IOUtils.copy( input, out );
- }
- finally
- {
- IOUtils.closeQuietly( out );
- IOUtils.closeQuietly( input );
- }
-
- if ( fixChecksums )
- {
- fixChecksums( new File( targetPath, targetFilename ) );
- }
- }
-
- private File createPom( File targetPath, String filename )
- throws IOException
- {
- Model projectModel = new Model();
- projectModel.setModelVersion( "4.0.0" );
- projectModel.setGroupId( groupId );
- projectModel.setArtifactId( artifactId );
- projectModel.setVersion( version );
- projectModel.setPackaging( packaging );
-
- File pomFile = new File( targetPath, filename );
- MavenXpp3Writer writer = new MavenXpp3Writer();
- FileWriter w = new FileWriter( pomFile );
- try
- {
- writer.write( w, projectModel );
- }
- finally
- {
- IOUtils.closeQuietly( w );
- }
-
- return pomFile;
- }
-
- private ArchivaRepositoryMetadata getMetadata( File metadataFile )
- throws RepositoryMetadataException
- {
- ArchivaRepositoryMetadata metadata = new ArchivaRepositoryMetadata();
- if ( metadataFile.exists() )
- {
- try
- {
- metadata = MavenMetadataReader.read( metadataFile );
- }
- catch ( XMLException e )
- {
- throw new RepositoryMetadataException( e.getMessage(), e );
- }
- }
- return metadata;
- }
-
-
- /**
- * Update version level metadata for snapshot artifacts. If it does not exist, create the metadata and fix checksums
- * if necessary.
- */
- private void updateVersionMetadata( ArchivaRepositoryMetadata metadata, File metadataFile,
- Date lastUpdatedTimestamp, String timestamp, int buildNumber,
- boolean fixChecksums )
- throws RepositoryMetadataException
- {
- if ( !metadataFile.exists() )
- {
- metadata.setGroupId( groupId );
- metadata.setArtifactId( artifactId );
- metadata.setVersion( version );
- }
-
- if ( metadata.getSnapshotVersion() == null )
- {
- metadata.setSnapshotVersion( new SnapshotVersion() );
- }
-
- metadata.getSnapshotVersion().setBuildNumber( buildNumber );
- metadata.getSnapshotVersion().setTimestamp( timestamp );
- metadata.setLastUpdatedTimestamp( lastUpdatedTimestamp );
-
- RepositoryMetadataWriter.write( metadata, metadataFile );
-
- if ( fixChecksums )
- {
- fixChecksums( metadataFile );
- }
- }
-
- /**
- * Update artifact level metadata. If it does not exist, create the metadata and fix checksums if necessary.
- */
- private void updateProjectMetadata( String targetPath, Date lastUpdatedTimestamp, String timestamp, int buildNumber,
- boolean fixChecksums )
- throws RepositoryMetadataException
- {
- List<String> availableVersions = new ArrayList<String>();
- String latestVersion = version;
-
- File projectDir = new File( targetPath ).getParentFile();
- File projectMetadataFile = new File( projectDir, MetadataTools.MAVEN_METADATA );
-
- ArchivaRepositoryMetadata projectMetadata = getMetadata( projectMetadataFile );
-
- if ( projectMetadataFile.exists() )
- {
- availableVersions = projectMetadata.getAvailableVersions();
-
- Collections.sort( availableVersions, VersionComparator.getInstance() );
-
- if ( !availableVersions.contains( version ) )
- {
- availableVersions.add( version );
- }
-
- latestVersion = availableVersions.get( availableVersions.size() - 1 );
- }
- else
- {
- availableVersions.add( version );
-
- projectMetadata.setGroupId( groupId );
- projectMetadata.setArtifactId( artifactId );
- }
-
- if ( projectMetadata.getGroupId() == null )
- {
- projectMetadata.setGroupId( groupId );
- }
-
- if ( projectMetadata.getArtifactId() == null )
- {
- projectMetadata.setArtifactId( artifactId );
- }
-
- projectMetadata.setLatestVersion( latestVersion );
- projectMetadata.setLastUpdatedTimestamp( lastUpdatedTimestamp );
- projectMetadata.setAvailableVersions( availableVersions );
-
- if ( !VersionUtil.isSnapshot( version ) )
- {
- projectMetadata.setReleasedVersion( latestVersion );
- }
-
- RepositoryMetadataWriter.write( projectMetadata, projectMetadataFile );
-
- if ( fixChecksums )
- {
- fixChecksums( projectMetadataFile );
- }
- }
-
- public void validate()
- {
- try
- {
- // is this enough check for the repository permission?
- if ( !userRepositories.isAuthorizedToUploadArtifacts( getPrincipal(), repositoryId ) )
- {
- addActionError( "User is not authorized to upload in repository " + repositoryId );
- }
-
- if ( artifactFile == null || artifactFile.length() == 0 )
- {
- addActionError( "Please add a file to upload." );
- }
-
- if ( version == null || !VersionUtil.isVersion( version ) )
- {
- addActionError( "Invalid version." );
- }
- }
- catch ( PrincipalNotFoundException pe )
- {
- addActionError( pe.getMessage() );
- }
- catch ( ArchivaSecurityException ae )
- {
- addActionError( ae.getMessage() );
- }
- }
-
- private List<String> getManagableRepos()
- {
- try
- {
- return userRepositories.getManagableRepositoryIds( getPrincipal() );
- }
- catch ( PrincipalNotFoundException e )
- {
- log.warn( e.getMessage(), e );
- }
- catch ( AccessDeniedException e )
- {
- log.warn( e.getMessage(), e );
- // TODO: pass this onto the screen.
- }
- catch ( ArchivaSecurityException e )
- {
- log.warn( e.getMessage(), e );
- }
- return Collections.emptyList();
- }
-
- private void queueRepositoryTask( String repositoryId, File localFile )
- {
- RepositoryTask task = new RepositoryTask();
- task.setRepositoryId( repositoryId );
- task.setResourceFile( localFile );
- task.setUpdateRelatedArtifacts( true );
- task.setScanAll( false );
-
- try
- {
- scheduler.queueTask( task );
- }
- catch ( TaskQueueException e )
- {
- log.error( "Unable to queue repository task to execute consumers on resource file ['" + localFile.getName()
- + "']." );
- }
- }
-
- public void setScheduler( ArchivaTaskScheduler scheduler )
- {
- this.scheduler = scheduler;
- }
-
- public void setRepositoryFactory( RepositoryContentFactory repositoryFactory )
- {
- this.repositoryFactory = repositoryFactory;
- }
-
- public ManagedRepositoryAdmin getManagedRepositoryAdmin()
- {
- return managedRepositoryAdmin;
- }
-
- public void setManagedRepositoryAdmin( ManagedRepositoryAdmin managedRepositoryAdmin )
- {
- this.managedRepositoryAdmin = managedRepositoryAdmin;
- }
-
- public ArchivaAdministration getArchivaAdministration()
- {
- return archivaAdministration;
- }
-
- public void setArchivaAdministration( ArchivaAdministration archivaAdministration )
- {
- this.archivaAdministration = archivaAdministration;
- }
-}
+++ /dev/null
-package org.apache.archiva.web.action.admin;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import org.apache.archiva.redback.rbac.Resource;
-import org.apache.archiva.scheduler.repository.RepositoryArchivaTaskScheduler;
-import org.apache.archiva.scheduler.repository.RepositoryTask;
-import org.apache.archiva.security.common.ArchivaRoleConstants;
-import org.apache.commons.lang.StringUtils;
-import org.apache.archiva.web.action.AbstractActionSupport;
-import org.apache.archiva.redback.components.taskqueue.TaskQueueException;
-import org.apache.archiva.redback.integration.interceptor.SecureAction;
-import org.apache.archiva.redback.integration.interceptor.SecureActionBundle;
-import org.apache.archiva.redback.integration.interceptor.SecureActionException;
-import org.springframework.context.annotation.Scope;
-import org.springframework.stereotype.Controller;
-
-import javax.inject.Inject;
-import javax.inject.Named;
-
-/**
- * Configures the application.
- */
-@Controller( "schedulerAction" )
-@Scope( "prototype" )
-public class SchedulerAction
- extends AbstractActionSupport
- implements SecureAction
-{
-
- @Inject
- @Named( value = "archivaTaskScheduler#repository" )
- private RepositoryArchivaTaskScheduler repositoryTaskScheduler;
-
- private String repoid;
-
- private boolean scanAll;
-
- public String scanRepository()
- {
- if ( StringUtils.isBlank( repoid ) )
- {
- addActionError( "Cannot run indexer on blank repository id." );
- return SUCCESS;
- }
-
- RepositoryTask task = new RepositoryTask();
- task.setRepositoryId( repoid );
- task.setScanAll( scanAll );
-
- if ( repositoryTaskScheduler.isProcessingRepositoryTask( repoid ) )
- {
- addActionError( "Repository [" + repoid + "] task was already queued." );
- }
- else
- {
- try
- {
- addActionMessage( "Your request to have repository [" + repoid + "] be indexed has been queued." );
- repositoryTaskScheduler.queueTask( task );
- }
- catch ( TaskQueueException e )
- {
- addActionError(
- "Unable to queue your request to have repository [" + repoid + "] be indexed: " + e.getMessage() );
- }
- }
-
- // Return to the repositories screen.
- return SUCCESS;
- }
-
- @Override
- public void addActionMessage( String aMessage )
- {
- super.addActionMessage( aMessage );
- log.info( "[ActionMessage] " + aMessage );
- }
-
- @Override
- public void addActionError( String anErrorMessage )
- {
- super.addActionError( anErrorMessage );
- log.warn( "[ActionError] " + anErrorMessage );
- }
-
- public SecureActionBundle getSecureActionBundle()
- throws SecureActionException
- {
- SecureActionBundle bundle = new SecureActionBundle();
-
- bundle.setRequiresAuthentication( true );
- bundle.addRequiredAuthorization( ArchivaRoleConstants.OPERATION_RUN_INDEXER, Resource.GLOBAL );
-
- return bundle;
- }
-
- public String getRepoid()
- {
- return repoid;
- }
-
- public void setRepoid( String repoid )
- {
- this.repoid = repoid;
- }
-
- public boolean getScanAll()
- {
- return scanAll;
- }
-
- public void setScanAll( boolean scanAll )
- {
- this.scanAll = scanAll;
- }
-}
+++ /dev/null
-package org.apache.archiva.web.action.admin;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import org.apache.archiva.redback.rbac.Resource;
-import org.apache.archiva.repository.scanner.RepositoryScanner;
-import org.apache.archiva.security.common.ArchivaRoleConstants;
-import org.apache.commons.lang.StringUtils;
-import org.apache.archiva.web.action.AbstractActionSupport;
-import org.apache.archiva.redback.components.cache.Cache;
-import org.apache.archiva.redback.components.taskqueue.TaskQueue;
-import org.apache.archiva.redback.integration.interceptor.SecureAction;
-import org.apache.archiva.redback.integration.interceptor.SecureActionBundle;
-import org.apache.archiva.redback.integration.interceptor.SecureActionException;
-import org.springframework.context.annotation.Scope;
-import org.springframework.stereotype.Controller;
-
-import javax.annotation.PostConstruct;
-import javax.inject.Inject;
-import java.util.Map;
-
-/**
- * Shows system status information for the administrator.
- *
- *
- */
-@Controller( "systemStatus" )
-@Scope( "prototype" )
-public class SystemStatusAction
- extends AbstractActionSupport
- implements SecureAction
-{
-
- private Map<String, TaskQueue> queues;
-
- private Map<String, Cache> caches;
-
- @Inject
- private RepositoryScanner scanner;
-
- private String memoryStatus;
-
- private String cacheKey;
-
- @PostConstruct
- public void initialize()
- {
- super.initialize();
- queues = getBeansOfType( TaskQueue.class );
- caches = getBeansOfType( Cache.class );
- }
-
- public SecureActionBundle getSecureActionBundle()
- throws SecureActionException
- {
- SecureActionBundle bundle = new SecureActionBundle();
-
- bundle.setRequiresAuthentication( true );
- bundle.addRequiredAuthorization( ArchivaRoleConstants.OPERATION_MANAGE_CONFIGURATION, Resource.GLOBAL );
-
- return bundle;
- }
-
- public String execute()
- {
- Runtime runtime = Runtime.getRuntime();
- runtime.gc();
- long total = runtime.totalMemory();
- long used = total - runtime.freeMemory();
- long max = runtime.maxMemory();
- memoryStatus = formatMemory( used ) + "/" + formatMemory( total ) + " (Max: " + formatMemory( max ) + ")";
-
- return SUCCESS;
- }
-
- public String flush()
- {
- if( !StringUtils.isEmpty( cacheKey ) )
- {
- Cache cache = caches.get( cacheKey );
- cache.clear();
- }
-
- return SUCCESS;
- }
-
- private static String formatMemory( long l )
- {
- return l / ( 1024 * 1024 ) + "M";
- }
-
- public String getMemoryStatus()
- {
- return memoryStatus;
- }
-
- public RepositoryScanner getScanner()
- {
- return scanner;
- }
-
- public Map<String, Cache> getCaches()
- {
- return caches;
- }
-
- public Map<String, TaskQueue> getQueues()
- {
- return queues;
- }
-
- public String getCacheKey()
- {
- return cacheKey;
- }
-
- public void setCacheKey( String cacheKey )
- {
- this.cacheKey = cacheKey;
- }
-}
+++ /dev/null
-package org.apache.archiva.web.action.admin.appearance;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import com.opensymphony.xwork2.Preparable;
-import org.apache.archiva.admin.model.admin.ArchivaAdministration;
-import org.apache.archiva.admin.model.beans.OrganisationInformation;
-import org.apache.archiva.web.action.AbstractActionSupport;
-
-import javax.inject.Inject;
-
-/**
- * AbstractAppearanceAction
- *
- *
- */
-public abstract class AbstractAppearanceAction
- extends AbstractActionSupport
- implements Preparable
-{
-
- @Inject
- protected ArchivaAdministration archivaAdministration;
-
- private String organisationLogo;
-
- private String organisationUrl;
-
- private String organisationName;
-
- public String getOrganisationLogo()
- {
- return organisationLogo;
- }
-
- public String getOrganisationName()
- {
- return organisationName;
- }
-
- public String getOrganisationUrl()
- {
- return organisationUrl;
- }
-
- public void setOrganisationLogo( String organisationLogo )
- {
- this.organisationLogo = organisationLogo;
- }
-
- public void setOrganisationName( String organisationName )
- {
- this.organisationName = organisationName;
- }
-
- public void setOrganisationUrl( String organisationUrl )
- {
- this.organisationUrl = organisationUrl;
- }
-
- public void prepare()
- throws Exception
- {
-
- OrganisationInformation orgInfo = archivaAdministration.getOrganisationInformation();
- if ( orgInfo != null )
- {
- setOrganisationLogo( orgInfo.getLogoLocation() );
- setOrganisationName( orgInfo.getName() );
- setOrganisationUrl( orgInfo.getUrl() );
- }
-
- }
-
- public ArchivaAdministration getArchivaAdministration()
- {
- return archivaAdministration;
- }
-
- public void setArchivaAdministration( ArchivaAdministration archivaAdministration )
- {
- this.archivaAdministration = archivaAdministration;
- }
-}
+++ /dev/null
-package org.apache.archiva.web.action.admin.appearance;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import com.opensymphony.xwork2.Validateable;
-import org.apache.archiva.admin.model.RepositoryAdminException;
-import org.apache.archiva.admin.model.beans.OrganisationInformation;
-import org.apache.archiva.redback.rbac.Resource;
-import org.apache.archiva.security.common.ArchivaRoleConstants;
-import org.apache.commons.lang.StringUtils;
-import org.apache.archiva.redback.integration.interceptor.SecureAction;
-import org.apache.archiva.redback.integration.interceptor.SecureActionBundle;
-import org.apache.archiva.redback.integration.interceptor.SecureActionException;
-import org.springframework.context.annotation.Scope;
-import org.springframework.stereotype.Controller;
-
-/**
- *
- */
-@Controller( "editOrganisationInfo" )
-@Scope( "prototype" )
-public class EditOrganisationInfoAction
- extends AbstractAppearanceAction
- implements SecureAction, Validateable
-{
- @Override
- public String execute()
- throws RepositoryAdminException
- {
-
- OrganisationInformation orgInfo = archivaAdministration.getOrganisationInformation();
-
- orgInfo.setLogoLocation( getOrganisationLogo() );
- orgInfo.setName( getOrganisationName() );
- orgInfo.setUrl( getOrganisationUrl() );
-
- archivaAdministration.setOrganisationInformation( orgInfo );
- return SUCCESS;
- }
-
- public SecureActionBundle getSecureActionBundle()
- throws SecureActionException
- {
- SecureActionBundle bundle = new SecureActionBundle();
- bundle.setRequiresAuthentication( true );
- bundle.addRequiredAuthorization( ArchivaRoleConstants.OPERATION_MANAGE_CONFIGURATION, Resource.GLOBAL );
- return bundle;
- }
-
- public void validate()
- {
- // trim all unecessary trailing/leading white-spaces; always put this statement before the closing braces(after all validation).
- trimAllRequestParameterValues();
- }
-
- private void trimAllRequestParameterValues()
- {
- if ( StringUtils.isNotEmpty( super.getOrganisationName() ) )
- {
- super.setOrganisationName( super.getOrganisationName().trim() );
- }
-
- if ( StringUtils.isNotEmpty( super.getOrganisationUrl() ) )
- {
- super.setOrganisationUrl( super.getOrganisationUrl().trim() );
- }
-
- if ( StringUtils.isNotEmpty( super.getOrganisationLogo() ) )
- {
- super.setOrganisationLogo( super.getOrganisationLogo().trim() );
- }
- }
-}
+++ /dev/null
-package org.apache.archiva.web.action.admin.appearance;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import org.springframework.context.annotation.Scope;
-import org.springframework.stereotype.Controller;
-
-/**
- * Stores the organisation information for displaying on the page.
- */
-@Controller( "organisationInfo" )
-@Scope( "prototype" )
-public class OrganisationInfoAction
- extends AbstractAppearanceAction
-{
- // no op
-}
+++ /dev/null
-package org.apache.archiva.web.action.admin.connectors.proxy;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import org.apache.archiva.admin.model.RepositoryAdminException;
-import org.apache.archiva.admin.model.beans.ProxyConnector;
-import org.apache.archiva.admin.model.managed.ManagedRepositoryAdmin;
-import org.apache.archiva.admin.model.proxyconnector.ProxyConnectorAdmin;
-import org.apache.archiva.admin.model.remote.RemoteRepositoryAdmin;
-import org.apache.archiva.security.common.ArchivaRoleConstants;
-import org.apache.commons.lang.StringUtils;
-import org.apache.archiva.web.action.AbstractActionSupport;
-import org.apache.archiva.redback.rbac.Resource;
-import org.apache.archiva.redback.integration.interceptor.SecureAction;
-import org.apache.archiva.redback.integration.interceptor.SecureActionBundle;
-import org.apache.archiva.redback.integration.interceptor.SecureActionException;
-
-import javax.inject.Inject;
-import java.util.List;
-import java.util.Map;
-
-/**
- * AbstractProxyConnectorAction
- *
- *
- */
-public abstract class AbstractProxyConnectorAction
- extends AbstractActionSupport
- implements SecureAction
-{
- public static final String DIRECT_CONNECTION = "(direct connection)";
-
- @Inject
- private ProxyConnectorAdmin proxyConnectorAdmin;
-
- @Inject
- private RemoteRepositoryAdmin remoteRepositoryAdmin;
-
- @Inject
- private ManagedRepositoryAdmin managedRepositoryAdmin;
-
- public SecureActionBundle getSecureActionBundle()
- throws SecureActionException
- {
- SecureActionBundle bundle = new SecureActionBundle();
-
- bundle.setRequiresAuthentication( true );
- bundle.addRequiredAuthorization( ArchivaRoleConstants.OPERATION_MANAGE_CONFIGURATION, Resource.GLOBAL );
-
- return bundle;
- }
-
-
- protected void addProxyConnector( ProxyConnector proxyConnector )
- throws RepositoryAdminException
- {
- getProxyConnectorAdmin().addProxyConnector( proxyConnector, getAuditInformation() );
- }
-
- protected ProxyConnector findProxyConnector( String sourceId, String targetId )
- throws RepositoryAdminException
- {
- if ( StringUtils.isBlank( sourceId ) )
- {
- return null;
- }
-
- if ( StringUtils.isBlank( targetId ) )
- {
- return null;
- }
-
- return getProxyConnectorAdmin().getProxyConnector( sourceId, targetId );
- }
-
- protected Map<String, List<ProxyConnector>> createProxyConnectorMap()
- throws RepositoryAdminException
- {
- return getProxyConnectorAdmin().getProxyConnectorAsMap();
- }
-
- protected void removeConnector( String sourceId, String targetId )
- throws RepositoryAdminException
- {
- ProxyConnector proxyConnector = findProxyConnector( sourceId, targetId );
- if ( proxyConnector != null )
- {
- getProxyConnectorAdmin().deleteProxyConnector( proxyConnector, getAuditInformation() );
- }
- }
-
- protected void removeProxyConnector( ProxyConnector connector )
- throws RepositoryAdminException
- {
- getProxyConnectorAdmin().deleteProxyConnector( connector, getAuditInformation() );
- }
-
-
- public ProxyConnectorAdmin getProxyConnectorAdmin()
- {
- return proxyConnectorAdmin;
- }
-
- public void setProxyConnectorAdmin( ProxyConnectorAdmin proxyConnectorAdmin )
- {
- this.proxyConnectorAdmin = proxyConnectorAdmin;
- }
-
- public RemoteRepositoryAdmin getRemoteRepositoryAdmin()
- {
- return remoteRepositoryAdmin;
- }
-
- public void setRemoteRepositoryAdmin( RemoteRepositoryAdmin remoteRepositoryAdmin )
- {
- this.remoteRepositoryAdmin = remoteRepositoryAdmin;
- }
-
- public ManagedRepositoryAdmin getManagedRepositoryAdmin()
- {
- return managedRepositoryAdmin;
- }
-
- public void setManagedRepositoryAdmin( ManagedRepositoryAdmin managedRepositoryAdmin )
- {
- this.managedRepositoryAdmin = managedRepositoryAdmin;
- }
-}
+++ /dev/null
-package org.apache.archiva.web.action.admin.connectors.proxy;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import com.opensymphony.xwork2.Preparable;
-import org.apache.archiva.admin.model.RepositoryAdminException;
-import org.apache.archiva.admin.model.beans.NetworkProxy;
-import org.apache.archiva.admin.model.beans.ProxyConnector;
-import org.apache.archiva.admin.model.networkproxy.NetworkProxyAdmin;
-import org.apache.archiva.policies.DownloadErrorPolicy;
-import org.apache.archiva.policies.Policy;
-import org.apache.archiva.policies.PostDownloadPolicy;
-import org.apache.archiva.policies.PreDownloadPolicy;
-import org.apache.commons.lang.StringEscapeUtils;
-import org.apache.commons.lang.StringUtils;
-
-import javax.annotation.PostConstruct;
-import javax.inject.Inject;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-/**
- * AbstractProxyConnectorFormAction - generic fields and methods for either add or edit actions related with the
- * Proxy Connector.
- *
- *
- */
-public abstract class AbstractProxyConnectorFormAction
- extends AbstractProxyConnectorAction
- implements Preparable
-{
-
-
- private Map<String, PreDownloadPolicy> preDownloadPolicyMap;
-
- private Map<String, PostDownloadPolicy> postDownloadPolicyMap;
-
- private Map<String, DownloadErrorPolicy> downloadErrorPolicyMap;
-
- private List<String> proxyIdOptions;
-
- private List<String> managedRepoIdList;
-
- private List<String> remoteRepoIdList;
-
- /**
- * The map of policies that are available to be set.
- */
- private Map<String, Policy> policyMap;
-
- /**
- * The property key to add or remove.
- */
- private String propertyKey;
-
- /**
- * The property value to add.
- */
- private String propertyValue;
-
- /**
- * The blacklist pattern to add.
- */
- private String blackListPattern;
-
- /**
- * The whitelist pattern to add.
- */
- private String whiteListPattern;
-
- /**
- * The pattern to add or remove (black or white).
- */
- private String pattern;
-
- /**
- * The model for this action.
- */
- protected ProxyConnector connector;
-
- @Inject
- private NetworkProxyAdmin networkProxyAdmin;
-
- @PostConstruct
- public void initialize( )
- {
- super.initialize( );
- this.preDownloadPolicyMap = getBeansOfType( PreDownloadPolicy.class );
- this.postDownloadPolicyMap = getBeansOfType( PostDownloadPolicy.class );
- this.downloadErrorPolicyMap = getBeansOfType( DownloadErrorPolicy.class );
- }
-
- public String addBlackListPattern( )
- {
- String pattern = getBlackListPattern( );
-
- //pattern = StringEscapeUtils.unescapeJavaScript( pattern );
-
- if ( StringUtils.isBlank( pattern ) )
- {
- addActionError( "Cannot add a blank black list pattern." );
- }
-
- if ( !hasActionErrors( ) )
- {
- getConnector( ).getBlackListPatterns( ).add( pattern );
- setBlackListPattern( null );
- }
-
- return INPUT;
- }
-
- @SuppressWarnings( "unchecked" )
- public String addProperty( )
- {
- String key = getPropertyKey( );
- String value = getPropertyValue( );
-
- if ( StringUtils.isBlank( key ) )
- {
- addActionError( "Unable to add property with blank key." );
- }
-
- if ( StringUtils.isBlank( value ) )
- {
- addActionError( "Unable to add property with blank value." );
- }
-
- if ( !hasActionErrors( ) )
- {
- getConnector( ).getProperties( ).put( key, value );
- setPropertyKey( null );
- setPropertyValue( null );
- }
-
- return INPUT;
- }
-
- public String addWhiteListPattern( )
- {
- String pattern = getWhiteListPattern( );
- //pattern = StringEscapeUtils.unescapeJavaScript( pattern );
- if ( StringUtils.isBlank( pattern ) )
- {
- addActionError( "Cannot add a blank white list pattern." );
- }
-
- if ( !hasActionErrors( ) )
- {
- getConnector( ).getWhiteListPatterns( ).add( pattern );
- setWhiteListPattern( null );
- }
-
- return INPUT;
- }
-
- public String getBlackListPattern( )
- {
- return blackListPattern;
- }
-
- public ProxyConnector getConnector( )
- {
- return connector;
- }
-
- public List<String> getManagedRepoIdList( )
- {
- return managedRepoIdList;
- }
-
- public String getPattern( )
- {
- return pattern;
- }
-
- public Map<String, Policy> getPolicyMap( )
- {
- return policyMap;
- }
-
- public String getPropertyKey( )
- {
- return propertyKey;
- }
-
- public String getPropertyValue( )
- {
- return propertyValue;
- }
-
- public List<String> getProxyIdOptions( )
- {
- return proxyIdOptions;
- }
-
- public List<String> getRemoteRepoIdList( )
- {
- return remoteRepoIdList;
- }
-
- public String getWhiteListPattern( )
- {
- return whiteListPattern;
- }
-
- public void prepare( )
- throws RepositoryAdminException
- {
- proxyIdOptions = createNetworkProxyOptions( );
- managedRepoIdList = createManagedRepoOptions( );
- remoteRepoIdList = createRemoteRepoOptions( );
- policyMap = createPolicyMap( );
- }
-
- public String removeBlackListPattern( )
- {
- String pattern = getPattern( );
-
- if ( StringUtils.isBlank( pattern ) )
- {
- addActionError( "Cannot remove a blank black list pattern." );
- }
-
- if ( !getConnector( ).getBlackListPatterns( ).contains( pattern )
- && !getConnector( ).getBlackListPatterns( ).contains( pattern ))
- {
- addActionError( "Non-existant black list pattern [" + pattern + "], no black list pattern removed." );
- }
-
- if ( !hasActionErrors( ) )
- {
- getConnector( ).getBlackListPatterns( ).remove( pattern );
- }
-
- setBlackListPattern( null );
- setPattern( null );
-
- return INPUT;
- }
-
- public String removeProperty( )
- {
- String key = getPropertyKey( );
-
- if ( StringUtils.isBlank( key ) )
- {
- addActionError( "Unable to remove property with blank key." );
- }
-
- if ( !getConnector( ).getProperties( ).containsKey( key ) )
- {
- addActionError( "Non-existant property key [" + pattern + "], no property was removed." );
- }
-
- if ( !hasActionErrors( ) )
- {
- getConnector( ).getProperties( ).remove( key );
- }
-
- setPropertyKey( null );
- setPropertyValue( null );
-
- return INPUT;
- }
-
- public String removeWhiteListPattern( )
- {
- String pattern = getPattern( );
-
- if ( StringUtils.isBlank( pattern ) )
- {
- addActionError( "Cannot remove a blank white list pattern." );
- }
-
- if ( !getConnector( ).getWhiteListPatterns( ).contains( pattern )
- && !getConnector( ).getWhiteListPatterns( ).contains( pattern ))
- {
- addActionError( "Non-existant white list pattern [" + pattern + "], no white list pattern removed." );
- }
-
- if ( !hasActionErrors( ) )
- {
- getConnector( ).getWhiteListPatterns( ).remove( pattern );
- }
-
- setWhiteListPattern( null );
- setPattern( null );
-
- return INPUT;
- }
-
- public void setBlackListPattern( String blackListPattern )
- {
- this.blackListPattern = blackListPattern;
- }
-
- public void setConnector( ProxyConnector connector )
- {
- this.connector = connector;
- }
-
- public void setManagedRepoIdList( List<String> managedRepoIdList )
- {
- this.managedRepoIdList = managedRepoIdList;
- }
-
- public void setPattern( String pattern )
- {
- this.pattern = pattern;
- }
-
- public void setPolicyMap( Map<String, Policy> policyMap )
- {
- this.policyMap = policyMap;
- }
-
- public void setPropertyKey( String propertyKey )
- {
- this.propertyKey = propertyKey;
- }
-
- public void setPropertyValue( String propertyValue )
- {
- this.propertyValue = propertyValue;
- }
-
- public void setProxyIdOptions( List<String> proxyIdOptions )
- {
- this.proxyIdOptions = proxyIdOptions;
- }
-
- public void setRemoteRepoIdList( List<String> remoteRepoIdList )
- {
- this.remoteRepoIdList = remoteRepoIdList;
- }
-
- public void setWhiteListPattern( String whiteListPattern )
- {
- this.whiteListPattern = whiteListPattern;
- }
-
- protected List<String> createManagedRepoOptions( )
- throws RepositoryAdminException
- {
- return new ArrayList<String>( getManagedRepositoryAdmin( ).getManagedRepositoriesAsMap( ).keySet( ) );
- }
-
- protected List<String> createNetworkProxyOptions( )
- throws RepositoryAdminException
- {
- List<String> options = new ArrayList<String>( );
-
- options.add( DIRECT_CONNECTION );
- options.addAll( getNetworkProxiesKeys( ) );
-
- return options;
- }
-
- private Collection<String> getNetworkProxiesKeys( )
- throws RepositoryAdminException
- {
- List<NetworkProxy> networkProxies = networkProxyAdmin.getNetworkProxies( );
- if ( networkProxies == null || networkProxies.isEmpty( ) )
- {
- return Collections.emptyList( );
- }
- List<String> keys = new ArrayList<String>( networkProxies.size( ) );
- for ( NetworkProxy networkProxy : networkProxies )
- {
- keys.add( networkProxy.getId( ) );
- }
- return keys;
-
- }
-
- protected Map<String, Policy> createPolicyMap( )
- {
- Map<String, Policy> policyMap = new HashMap<String, Policy>( );
-
- policyMap.putAll( preDownloadPolicyMap );
- policyMap.putAll( postDownloadPolicyMap );
- policyMap.putAll( downloadErrorPolicyMap );
-
- return policyMap;
- }
-
- protected List<String> createRemoteRepoOptions( )
- throws RepositoryAdminException
- {
- return new ArrayList<String>( getRemoteRepositoryAdmin( ).getRemoteRepositoriesAsMap( ).keySet( ) );
- }
-
- @SuppressWarnings( "unchecked" )
- protected void validateConnector( )
- {
- if ( connector.getPolicies( ) == null )
- {
- addActionError( "Policies must be set." );
- }
- else
- {
- // Validate / Fix policy settings arriving from browser.
- for ( Map.Entry<String, Policy> entry : getPolicyMap( ).entrySet( ) )
- {
- String policyId = entry.getKey( );
- Policy policy = entry.getValue( );
- List<String> options = policy.getOptions( );
-
- if ( !connector.getPolicies( ).containsKey( policyId ) )
- {
- addActionError( "Policy [" + policyId + "] must be set (missing id)." );
- continue;
- }
-
- Map<String, String> properties = connector.getProperties( );
- for ( Map.Entry<String, String> entry2 : properties.entrySet( ) )
- {
- Object value = entry2.getValue( );
- if ( value.getClass( ).isArray( ) )
- {
- String[] arr = (String[]) value;
- properties.put( entry2.getKey( ), arr[0] );
- }
- }
-
- // Ugly hack to compensate for ugly browsers.
- Object o = connector.getPolicies( ).get( policyId );
- String value;
- if ( o.getClass( ).isArray( ) )
- {
- String arr[] = (String[]) o;
- value = arr[0];
- }
- else
- {
- value = (String) o;
- }
-
- connector.getPolicies( ).put( policyId, value );
-
- if ( StringUtils.isBlank( value ) )
- {
- addActionError( "Policy [" + policyId + "] must be set (missing value)." );
- continue;
- }
-
- if ( !options.contains( value ) )
- {
- addActionError(
- "Value of [" + value + "] is invalid for policy [" + policyId + "], valid values: " + options );
- continue;
- }
- }
- }
- }
-
- public NetworkProxyAdmin getNetworkProxyAdmin( )
- {
- return networkProxyAdmin;
- }
-
- public void setNetworkProxyAdmin( NetworkProxyAdmin networkProxyAdmin )
- {
- this.networkProxyAdmin = networkProxyAdmin;
- }
-}
+++ /dev/null
-package org.apache.archiva.web.action.admin.connectors.proxy;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import org.apache.archiva.admin.model.RepositoryAdminException;
-import org.apache.archiva.admin.model.beans.ProxyConnector;
-import org.apache.commons.lang.StringUtils;
-import org.springframework.context.annotation.Scope;
-import org.springframework.stereotype.Controller;
-
-/**
- * AddProxyConnectorAction
- *
- *
- */
-@Controller( "addProxyConnectorAction" )
-@Scope( "prototype" )
-public class AddProxyConnectorAction
- extends AbstractProxyConnectorFormAction
-{
- @Override
- public void prepare()
- throws RepositoryAdminException
- {
- super.prepare();
- connector = new ProxyConnector();
- }
-
- @Override
- public String input()
- {
- return INPUT;
- }
-
- public String commit()
- throws RepositoryAdminException
- {
- /* Too complex for webwork's ${Action}-validation.xml techniques.
- * Not appropriate for use with webwork's implements Validatable, as that validates regardless of
- * the request method, such as .addProperty() or .addWhiteList().
- *
- * This validation is ultimately only useful on this one request method.
- */
- String sourceId = connector.getSourceRepoId();
- String targetId = connector.getTargetRepoId();
-
- ProxyConnector otherConnector = findProxyConnector( sourceId, targetId );
- if ( otherConnector != null )
- {
- addActionError(
- "Unable to add proxy connector, as one already exists with source repository id [" + sourceId
- + "] and target repository id [" + targetId + "]." );
- }
-
- validateConnector();
-
- if ( hasActionErrors() )
- {
- return INPUT;
- }
-
- if ( StringUtils.equals( DIRECT_CONNECTION, connector.getProxyId() ) )
- {
- connector.setProxyId( null );
- }
-
- addProxyConnector( connector );
- return SUCCESS;
- }
-}
+++ /dev/null
-package org.apache.archiva.web.action.admin.connectors.proxy;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import org.apache.archiva.admin.model.RepositoryAdminException;
-import org.apache.archiva.admin.model.beans.ProxyConnector;
-import org.springframework.context.annotation.Scope;
-import org.springframework.stereotype.Controller;
-
-/**
- * DeleteProxyConnectorAction
- *
- *
- */
-@Controller( "deleteProxyConnectorAction" )
-@Scope( "prototype" )
-public class DeleteProxyConnectorAction
- extends AbstractProxyConnectorAction
-{
- private String source;
-
- private String target;
-
- private ProxyConnector proxyConfig;
-
- public String confirmDelete()
- throws RepositoryAdminException
- {
- this.proxyConfig = findProxyConnector( source, target );
-
- // Not set? Then there is nothing to delete.
- if ( this.proxyConfig == null )
- {
- addActionError(
- "Unable to delete proxy configuration, configuration with source [" + source + "], and target ["
- + target + "] does not exist." );
- return ERROR;
- }
-
- return INPUT;
- }
-
- public String delete()
- throws RepositoryAdminException
- {
- this.proxyConfig = findProxyConnector( source, target );
-
- // Not set? Then there is nothing to delete.
- if ( this.proxyConfig == null )
- {
- addActionError(
- "Unable to delete proxy configuration, configuration with source [" + source + "], and target ["
- + target + "] does not exist." );
- return ERROR;
- }
-
- if ( hasActionErrors() )
- {
- return ERROR;
- }
-
- getProxyConnectorAdmin().deleteProxyConnector( proxyConfig, getAuditInformation() );
- addActionMessage( "Successfully removed proxy connector [" + source + " , " + target + " ]" );
-
- setSource( null );
- setTarget( null );
-
- return SUCCESS;
- }
-
- public String getSource()
- {
- return source;
- }
-
- public void setSource( String id )
- {
- this.source = id;
- }
-
- public String getTarget()
- {
- return target;
- }
-
- public void setTarget( String id )
- {
- this.target = id;
- }
-
- public ProxyConnector getProxyConfig()
- {
- return proxyConfig;
- }
-}
+++ /dev/null
-package org.apache.archiva.web.action.admin.connectors.proxy;
-
-import org.apache.archiva.admin.model.RepositoryAdminException;
-import org.apache.archiva.admin.model.beans.ProxyConnector;
-import org.springframework.context.annotation.Scope;
-import org.springframework.stereotype.Controller;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-/**
- * DisableProxyConnectorAction
- */
-@Controller( "disableProxyConnectorAction" )
-@Scope( "prototype" )
-public class DisableProxyConnectorAction
- extends AbstractProxyConnectorAction
-{
- private String source;
-
- private String target;
-
- private ProxyConnector proxyConfig;
-
- public String confirmDisable()
- throws RepositoryAdminException
- {
- this.proxyConfig = findProxyConnector( source, target );
-
- // Not set? Then there is nothing to delete.
- if ( this.proxyConfig == null )
- {
- addActionError(
- "Unable to disable proxy configuration, configuration with source [" + source + "], and target ["
- + target + "] does not exist." );
- return ERROR;
- }
-
- return INPUT;
- }
-
- public String disable()
- throws RepositoryAdminException
- {
- this.proxyConfig = findProxyConnector( source, target );
-
- // Not set? Then there is nothing to delete.
- if ( this.proxyConfig == null )
- {
- addActionError(
- "Unable to disable proxy configuration, configuration with source [" + source + "], and target ["
- + target + "] does not exist." );
- return ERROR;
- }
-
- if ( hasActionErrors() )
- {
- return ERROR;
- }
-
- proxyConfig.setDisabled( true );
-
- addActionMessage( "Successfully disabled proxy connector [" + source + " , " + target + " ]" );
-
- setSource( null );
- setTarget( null );
-
- getProxyConnectorAdmin().updateProxyConnector( proxyConfig, getAuditInformation() );
- return SUCCESS;
- }
-
- public String getSource()
- {
- return source;
- }
-
- public void setSource( String source )
- {
- this.source = source;
- }
-
- public String getTarget()
- {
- return target;
- }
-
- public void setTarget( String target )
- {
- this.target = target;
- }
-}
+++ /dev/null
-package org.apache.archiva.web.action.admin.connectors.proxy;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import org.apache.archiva.admin.model.RepositoryAdminException;
-import org.apache.archiva.admin.model.beans.ProxyConnector;
-import org.springframework.context.annotation.Scope;
-import org.springframework.stereotype.Controller;
-
-/**
- * EditProxyConnectorAction
- *
- *
- */
-@Controller( "editProxyConnectorAction" )
-@Scope( "prototype" )
-public class EditProxyConnectorAction
- extends AbstractProxyConnectorFormAction
-{
- /**
- * The proxy connector source id to edit. (used with {@link #target})
- */
- private String source;
-
- /**
- * The proxy connector target id to edit. (used with {@link #source})
- */
- private String target;
-
- @Override
- public void prepare()
- throws RepositoryAdminException
- {
- super.prepare();
-
- connector = findProxyConnector( source, target );
- }
-
- public String input()
- {
- if ( connector == null )
- {
- addActionError(
- "Unable to edit non existant proxy connector with source [" + source + "] and target [" + target
- + "]" );
- return ERROR;
- }
- return INPUT;
- }
-
- public String commit()
- throws RepositoryAdminException
- {
- validateConnector();
-
- if ( hasActionErrors() )
- {
- return INPUT;
- }
-
- String sourceId = connector.getSourceRepoId();
- String targetId = connector.getTargetRepoId();
-
- ProxyConnector otherConnector = findProxyConnector( sourceId, targetId );
- if ( otherConnector != null )
- {
- // Remove the previous connector.
- removeProxyConnector( otherConnector );
- }
-
- if ( hasActionErrors() )
- {
- return INPUT;
- }
-
- addProxyConnector( connector );
- return SUCCESS;
- }
-
- public String getSource()
- {
- return source;
- }
-
- public void setSource( String source )
- {
- this.source = source;
- }
-
- public String getTarget()
- {
- return target;
- }
-
- public void setTarget( String target )
- {
- this.target = target;
- }
-
-}
+++ /dev/null
-package org.apache.archiva.web.action.admin.connectors.proxy;
-
-import org.apache.archiva.admin.model.RepositoryAdminException;
-import org.apache.archiva.admin.model.beans.ProxyConnector;
-import org.springframework.context.annotation.Scope;
-import org.springframework.stereotype.Controller;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-/**
- * EnableProxyConnectorAction
- */
-@Controller( "enableProxyConnectorAction" )
-@Scope( "prototype" )
-public class EnableProxyConnectorAction
- extends AbstractProxyConnectorAction
-{
- private String source;
-
- private String target;
-
- private ProxyConnector proxyConfig;
-
- public String confirmEnable()
- throws RepositoryAdminException
- {
- this.proxyConfig = findProxyConnector( source, target );
-
- // Not set? Then there is nothing to delete.
- if ( this.proxyConfig == null )
- {
- addActionError(
- "Unable to enable proxy configuration, configuration with source [" + source + "], and target ["
- + target + "] does not exist." );
- return ERROR;
- }
-
- return INPUT;
- }
-
- public String enable() throws RepositoryAdminException
- {
- this.proxyConfig = findProxyConnector( source, target );
-
- // Not set? Then there is nothing to delete.
- if ( this.proxyConfig == null )
- {
- addActionError(
- "Unable to enabled proxy configuration, configuration with source [" + source + "], and target ["
- + target + "] does not exist." );
- return ERROR;
- }
-
- if ( hasActionErrors() )
- {
- return ERROR;
- }
-
- proxyConfig.setDisabled( false );
-
- getProxyConnectorAdmin().updateProxyConnector( proxyConfig, getAuditInformation() );
-
- addActionMessage( "Successfully enabled proxy connector [" + source + " , " + target + " ]" );
-
- setSource( null );
- setTarget( null );
-
- return SUCCESS;
- }
-
- public String getSource()
- {
- return source;
- }
-
- public void setSource( String source )
- {
- this.source = source;
- }
-
- public String getTarget()
- {
- return target;
- }
-
- public void setTarget( String target )
- {
- this.target = target;
- }
-}
+++ /dev/null
-package org.apache.archiva.web.action.admin.connectors.proxy;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import com.opensymphony.xwork2.Preparable;
-import org.apache.archiva.admin.model.beans.AbstractRepository;
-import org.apache.archiva.admin.model.RepositoryAdminException;
-import org.apache.archiva.admin.model.beans.ProxyConnector;
-import org.springframework.context.annotation.Scope;
-import org.springframework.stereotype.Controller;
-
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-/**
- * ProxyConnectorsAction
- *
- *
- */
-@Controller( "proxyConnectorsAction" )
-@Scope( "prototype" )
-public class ProxyConnectorsAction
- extends AbstractProxyConnectorAction
- implements Preparable
-{
- private Map<String, AbstractRepository> repoMap;
-
- /**
- * boolean to indicate that remote repo is present. Used for Add Link
- */
- private boolean remoteRepoExists = false;
-
- /**
- * Map of Proxy Connectors.
- */
- private Map<String, List<ProxyConnector>> proxyConnectorMap;
-
- public void prepare()
- throws RepositoryAdminException
- {
- repoMap = new HashMap<String, AbstractRepository>();
- repoMap.putAll( getRemoteRepositoryAdmin().getRemoteRepositoriesAsMap() );
- // FIXME olamy : are we sure we want Managed too ???
- repoMap.putAll( getManagedRepositoryAdmin().getManagedRepositoriesAsMap() );
-
- proxyConnectorMap = createProxyConnectorMap();
-
- remoteRepoExists = getRemoteRepositoryAdmin().getRemoteRepositories().size() > 0;
- }
-
- public Map<String, AbstractRepository> getRepoMap()
- {
- return repoMap;
- }
-
- public Map<String, List<ProxyConnector>> getProxyConnectorMap()
- {
- return proxyConnectorMap;
- }
-
- // FIXME olamy should be is !
- public boolean getRemoteRepoExists()
- {
- return remoteRepoExists;
- }
-}
+++ /dev/null
-package org.apache.archiva.web.action.admin.connectors.proxy;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import org.apache.archiva.admin.model.RepositoryAdminException;
-import org.apache.archiva.admin.model.beans.ProxyConnector;
-import org.apache.commons.lang.StringUtils;
-import org.springframework.context.annotation.Scope;
-import org.springframework.stereotype.Controller;
-
-import java.util.List;
-
-/**
- * SortProxyConnectorsAction -
- *
- *
- */
-@Controller( "sortProxyConnectorsAction" )
-@Scope( "prototype" )
-public class SortProxyConnectorsAction
- extends AbstractProxyConnectorAction
-{
- private String source;
-
- private String target;
-
- public String getSource()
- {
- return source;
- }
-
- public String getTarget()
- {
- return target;
- }
-
- public void setSource( String id )
- {
- this.source = id;
- }
-
- public void setTarget( String id )
- {
- this.target = id;
- }
-
- public String sortDown()
- throws RepositoryAdminException
- {
- List<ProxyConnector> connectors = createProxyConnectorMap().get( source );
-
- int idx = findTargetConnector( connectors, target );
-
- if ( idx >= 0 )
- {
- incrementConnectorOrder( connectors, idx );
- decrementConnectorOrder( connectors, idx + 1 );
- }
-
- for ( ProxyConnector proxyConnector : connectors )
- {
- getProxyConnectorAdmin().updateProxyConnector( proxyConnector, getAuditInformation() );
- }
- return SUCCESS;
- }
-
- public String sortUp()
- throws RepositoryAdminException
- {
- List<ProxyConnector> connectors = createProxyConnectorMap().get( source );
-
- int idx = findTargetConnector( connectors, target );
-
- if ( idx >= 0 )
- {
- decrementConnectorOrder( connectors, idx );
- incrementConnectorOrder( connectors, idx - 1 );
- }
-
- for ( ProxyConnector proxyConnector : connectors )
- {
- getProxyConnectorAdmin().updateProxyConnector( proxyConnector, getAuditInformation() );
- }
- return SUCCESS;
- }
-
- private void decrementConnectorOrder( List<ProxyConnector> connectors, int idx )
- {
- if ( !validIndex( connectors, idx ) )
- {
- // Do nothing.
- return;
- }
-
- int order = connectors.get( idx ).getOrder();
- connectors.get( idx ).setOrder( Math.max( 1, order - 1 ) );
- }
-
- private int findTargetConnector( List<ProxyConnector> connectors, String targetRepoId )
- {
- int idx = ( -1 );
-
- for ( int i = 0; i < connectors.size(); i++ )
- {
- if ( StringUtils.equals( targetRepoId, connectors.get( i ).getTargetRepoId() ) )
- {
- idx = i;
- break;
- }
- }
-
- return idx;
- }
-
- private void incrementConnectorOrder( List<ProxyConnector> connectors, int idx )
- {
- if ( !validIndex( connectors, idx ) )
- {
- // Do nothing.
- return;
- }
-
- int order = connectors.get( idx ).getOrder();
- connectors.get( idx ).setOrder( order + 1 );
- }
-
- private boolean validIndex( List<ProxyConnector> connectors, int idx )
- {
- return ( idx >= 0 ) && ( idx < connectors.size() );
- }
-}
+++ /dev/null
-package org.apache.archiva.web.action.admin.legacy;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import com.opensymphony.xwork2.Preparable;
-import com.opensymphony.xwork2.Validateable;
-import org.apache.archiva.admin.model.RepositoryAdminException;
-import org.apache.archiva.admin.model.admin.ArchivaAdministration;
-import org.apache.archiva.admin.model.beans.LegacyArtifactPath;
-import org.apache.commons.lang.StringUtils;
-import org.apache.archiva.model.ArtifactReference;
-import org.apache.archiva.repository.ManagedRepositoryContent;
-import org.apache.archiva.web.action.AbstractActionSupport;
-import org.springframework.context.annotation.Scope;
-import org.springframework.stereotype.Controller;
-
-import javax.inject.Inject;
-import javax.inject.Named;
-
-/**
- * Add a LegacyArtifactPath to archiva configuration
- *
- * @since 1.1
- */
-@Controller( "addLegacyArtifactPathAction" )
-@Scope( "prototype" )
-public class AddLegacyArtifactPathAction
- extends AbstractActionSupport
- implements Preparable, Validateable
-{
-
- @Inject
- private ArchivaAdministration archivaAdministration;
-
- @Inject
- @Named( value = "managedRepositoryContent#legacy" )
- private ManagedRepositoryContent repositoryContent;
-
-
- private LegacyArtifactPath legacyArtifactPath;
-
- private String groupId;
-
- private String artifactId;
-
- private String version;
-
- private String classifier;
-
- private String type;
-
-
- public void prepare()
- {
- this.legacyArtifactPath = new LegacyArtifactPath();
- }
-
- public String input()
- {
- return INPUT;
- }
-
- public String commit()
- {
- this.legacyArtifactPath.setArtifact(
- this.groupId + ":" + this.artifactId + ":" + this.version + ":" + this.classifier + ":" + this.type );
-
- // Check the proposed Artifact macthes the path
- ArtifactReference artifact = new ArtifactReference();
-
- artifact.setGroupId( this.groupId );
- artifact.setArtifactId( this.artifactId );
- artifact.setClassifier( this.classifier );
- artifact.setVersion( this.version );
- artifact.setType( this.type );
-
- String path = repositoryContent.toPath( artifact );
- if ( !path.equals( this.legacyArtifactPath.getPath() ) )
- {
- addActionError( "artifact reference does not match the initial path : " + path );
- return ERROR;
- }
-
- try
- {
- getArchivaAdministration().addLegacyArtifactPath( legacyArtifactPath, getAuditInformation() );
- }
- catch ( RepositoryAdminException e )
- {
- log.error( e.getMessage(), e );
- addActionError( "Error occured " + e.getMessage() );
- return INPUT;
- }
- return SUCCESS;
- }
-
- public LegacyArtifactPath getLegacyArtifactPath()
- {
- return legacyArtifactPath;
- }
-
- public void setLegacyArtifactPath( LegacyArtifactPath legacyArtifactPath )
- {
- this.legacyArtifactPath = legacyArtifactPath;
- }
-
- public void validate()
- {
- // trim all unecessary trailing/leading white-spaces; always put this statement before the closing braces(after all validation).
- trimAllRequestParameterValues();
- }
-
- private void trimAllRequestParameterValues()
- {
- if ( StringUtils.isNotEmpty( legacyArtifactPath.getPath() ) )
- {
- legacyArtifactPath.setPath( legacyArtifactPath.getPath().trim() );
- }
-
- if ( StringUtils.isNotEmpty( groupId ) )
- {
- groupId = groupId.trim();
- }
-
- if ( StringUtils.isNotEmpty( artifactId ) )
- {
- artifactId = artifactId.trim();
- }
-
- if ( StringUtils.isNotEmpty( version ) )
- {
- version = version.trim();
- }
-
- if ( StringUtils.isNotEmpty( classifier ) )
- {
- classifier = classifier.trim();
- }
-
- if ( StringUtils.isNotEmpty( type ) )
- {
- type = type.trim();
- }
- }
-
- public String getGroupId()
- {
- return groupId;
- }
-
- public void setGroupId( String groupId )
- {
- this.groupId = groupId;
- }
-
- public String getArtifactId()
- {
- return artifactId;
- }
-
- public void setArtifactId( String artifactId )
- {
- this.artifactId = artifactId;
- }
-
- public String getVersion()
- {
- return version;
- }
-
- public void setVersion( String version )
- {
- this.version = version;
- }
-
- public String getClassifier()
- {
- return classifier;
- }
-
- public void setClassifier( String classifier )
- {
- this.classifier = classifier;
- }
-
- public String getType()
- {
- return type;
- }
-
- public void setType( String type )
- {
- this.type = type;
- }
-
- public ArchivaAdministration getArchivaAdministration()
- {
- return archivaAdministration;
- }
-
- public void setArchivaAdministration( ArchivaAdministration archivaAdministration )
- {
- this.archivaAdministration = archivaAdministration;
- }
-}
+++ /dev/null
-package org.apache.archiva.web.action.admin.legacy;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import org.apache.archiva.admin.model.RepositoryAdminException;
-import org.apache.archiva.admin.model.admin.ArchivaAdministration;
-import org.apache.archiva.web.action.AbstractActionSupport;
-import org.springframework.context.annotation.Scope;
-import org.springframework.stereotype.Controller;
-
-import javax.inject.Inject;
-
-/**
- * Delete a LegacyArtifactPath to archiva configuration
- *
- * @since 1.1
- */
-@Controller( "deleteLegacyArtifactPathAction" )
-@Scope( "prototype" )
-public class DeleteLegacyArtifactPathAction
- extends AbstractActionSupport
-{
-
- @Inject
- private ArchivaAdministration archivaAdministration;
-
- private String path;
-
- public String delete()
- {
- log.info( "remove [" + path + "] from legacy artifact path resolution" );
- try
- {
- getArchivaAdministration().deleteLegacyArtifactPath( path, getAuditInformation() );
- }
- catch ( RepositoryAdminException e )
- {
- log.error( e.getMessage(), e );
- addActionError( "Exception during delete " + e.getMessage() );
- }
- return SUCCESS;
- }
-
- public String getPath()
- {
- return path;
- }
-
- public void setPath( String path )
- {
- this.path = path;
- }
-
- public ArchivaAdministration getArchivaAdministration()
- {
- return archivaAdministration;
- }
-
- public void setArchivaAdministration( ArchivaAdministration archivaAdministration )
- {
- this.archivaAdministration = archivaAdministration;
- }
-}
+++ /dev/null
-package org.apache.archiva.web.action.admin.legacy;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import com.opensymphony.xwork2.Preparable;
-import org.apache.archiva.admin.model.RepositoryAdminException;
-import org.apache.archiva.admin.model.admin.ArchivaAdministration;
-import org.apache.archiva.admin.model.beans.LegacyArtifactPath;
-import org.apache.archiva.security.common.ArchivaRoleConstants;
-import org.apache.archiva.web.util.ContextUtils;
-import org.apache.archiva.web.action.AbstractActionSupport;
-import org.apache.struts2.interceptor.ServletRequestAware;
-import org.apache.archiva.redback.rbac.Resource;
-import org.apache.archiva.redback.integration.interceptor.SecureAction;
-import org.apache.archiva.redback.integration.interceptor.SecureActionBundle;
-import org.apache.archiva.redback.integration.interceptor.SecureActionException;
-import org.springframework.context.annotation.Scope;
-import org.springframework.stereotype.Controller;
-
-import javax.inject.Inject;
-import javax.servlet.http.HttpServletRequest;
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Shows the LegacyArtifactPath Tab for the administrator.
- *
- * @since 1.1
- */
-@Controller( "legacyArtifactPathAction" )
-@Scope( "prototype" )
-public class LegacyArtifactPathAction
- extends AbstractActionSupport
- implements SecureAction, ServletRequestAware, Preparable
-{
-
- @Inject
- private ArchivaAdministration archivaAdministration;
-
- private List<LegacyArtifactPath> legacyArtifactPaths;
-
- /**
- * Used to construct the repository WebDAV URL in the repository action.
- */
- private String baseUrl;
-
- public void setServletRequest( HttpServletRequest request )
- {
- // TODO: is there a better way to do this?
- this.baseUrl = ContextUtils.getBaseURL( request, "repository" );
- }
-
- public SecureActionBundle getSecureActionBundle()
- throws SecureActionException
- {
- SecureActionBundle bundle = new SecureActionBundle();
-
- bundle.setRequiresAuthentication( true );
- bundle.addRequiredAuthorization( ArchivaRoleConstants.OPERATION_MANAGE_CONFIGURATION, Resource.GLOBAL );
-
- return bundle;
- }
-
- public void prepare()
- throws RepositoryAdminException
- {
- legacyArtifactPaths = new ArrayList<LegacyArtifactPath>( getArchivaAdministration().getLegacyArtifactPaths() );
- }
-
- public List<LegacyArtifactPath> getLegacyArtifactPaths()
- {
- return legacyArtifactPaths;
- }
-
- public String getBaseUrl()
- {
- return baseUrl;
- }
-
- public ArchivaAdministration getArchivaAdministration()
- {
- return archivaAdministration;
- }
-
- public void setArchivaAdministration( ArchivaAdministration archivaAdministration )
- {
- this.archivaAdministration = archivaAdministration;
- }
-}
+++ /dev/null
-package org.apache.archiva.web.action.admin.network;
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import com.opensymphony.xwork2.Preparable;
-import org.apache.archiva.admin.model.RepositoryAdminException;
-import org.apache.archiva.admin.model.admin.ArchivaAdministration;
-import org.apache.archiva.admin.model.beans.NetworkConfiguration;
-import org.apache.archiva.redback.rbac.Resource;
-import org.apache.archiva.security.common.ArchivaRoleConstants;
-import org.apache.archiva.web.action.AbstractActionSupport;
-import org.apache.archiva.redback.integration.interceptor.SecureAction;
-import org.apache.archiva.redback.integration.interceptor.SecureActionBundle;
-import org.apache.archiva.redback.integration.interceptor.SecureActionException;
-import org.springframework.context.annotation.Scope;
-import org.springframework.stereotype.Controller;
-
-import javax.inject.Inject;
-
-/**
- * @author Olivier Lamy
- * @since 1.4-M1
- */
-@Controller( "networkConfigurationAction" )
-@Scope( "prototype" )
-public class NetworkConfigurationAction
- extends AbstractActionSupport
- implements Preparable, SecureAction
-{
-
- @Inject
- private ArchivaAdministration archivaAdministration;
-
- private NetworkConfiguration networkConfiguration;
-
- public void prepare( )
- throws Exception
- {
- networkConfiguration = archivaAdministration.getNetworkConfiguration( );
- }
-
- public SecureActionBundle getSecureActionBundle( )
- throws SecureActionException
- {
- SecureActionBundle bundle = new SecureActionBundle( );
-
- bundle.setRequiresAuthentication( true );
- bundle.addRequiredAuthorization( ArchivaRoleConstants.OPERATION_MANAGE_CONFIGURATION, Resource.GLOBAL );
-
- return bundle;
- }
-
- public String edit( )
- {
- return INPUT;
- }
-
- public String save( )
- {
- try
- {
- archivaAdministration.setNetworkConfiguration( this.networkConfiguration );
- }
- catch ( RepositoryAdminException e )
- {
- addActionError( "Error during networkConfiguration upate:" + e.getMessage( ) );
- return ERROR;
- }
- addActionMessage( "Network Configuration Updated" );
- return SUCCESS;
- }
-
- public NetworkConfiguration getNetworkConfiguration( )
- {
- return networkConfiguration;
- }
-
- public void setNetworkConfiguration( NetworkConfiguration networkConfiguration )
- {
- this.networkConfiguration = networkConfiguration;
- }
-}
+++ /dev/null
-package org.apache.archiva.web.action.admin.networkproxies;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import com.opensymphony.xwork2.Preparable;
-import com.opensymphony.xwork2.Validateable;
-import org.apache.archiva.admin.model.RepositoryAdminException;
-import org.apache.archiva.admin.model.beans.NetworkProxy;
-import org.apache.archiva.admin.model.networkproxy.NetworkProxyAdmin;
-import org.apache.archiva.security.common.ArchivaRoleConstants;
-import org.apache.commons.lang.StringUtils;
-import org.apache.archiva.web.action.AbstractActionSupport;
-import org.apache.archiva.redback.rbac.Resource;
-import org.apache.archiva.redback.integration.interceptor.SecureAction;
-import org.apache.archiva.redback.integration.interceptor.SecureActionBundle;
-import org.apache.archiva.redback.integration.interceptor.SecureActionException;
-import org.springframework.context.annotation.Scope;
-import org.springframework.stereotype.Controller;
-
-import javax.inject.Inject;
-
-/**
- * ConfigureNetworkProxyAction
- *
- *
- */
-@Controller( "configureNetworkProxyAction" )
-@Scope( "prototype" )
-public class ConfigureNetworkProxyAction
- extends AbstractActionSupport
- implements SecureAction, Preparable, Validateable
-{
-
- @Inject
- private NetworkProxyAdmin networkProxyAdmin;
-
- private String mode;
-
- private String proxyid;
-
- private NetworkProxy proxy;
-
- public String add()
- {
- this.mode = "add";
- return INPUT;
- }
-
- public String confirm()
- {
- return INPUT;
- }
-
- public String delete()
- throws RepositoryAdminException
- {
-
- String id = getProxyid();
- if ( StringUtils.isBlank( id ) )
- {
- addActionError( "Unable to delete network proxy with blank id." );
- return SUCCESS;
- }
-
- NetworkProxy networkProxy = getNetworkProxyAdmin().getNetworkProxy( id );
- if ( networkProxy == null )
- {
- addActionError( "Unable to remove network proxy, proxy with id [" + id + "] not found." );
- return SUCCESS;
- }
-
- getNetworkProxyAdmin().deleteNetworkProxy( id, getAuditInformation() );
- addActionMessage( "Successfully removed network proxy [" + id + "]" );
- return SUCCESS;
- }
-
- public String edit()
- {
- this.mode = "edit";
- return INPUT;
- }
-
- public String getMode()
- {
- return mode;
- }
-
- public NetworkProxy getProxy()
- {
- return proxy;
- }
-
- public String getProxyid()
- {
- return proxyid;
- }
-
- public SecureActionBundle getSecureActionBundle()
- throws SecureActionException
- {
- SecureActionBundle bundle = new SecureActionBundle();
-
- bundle.setRequiresAuthentication( true );
- bundle.addRequiredAuthorization( ArchivaRoleConstants.OPERATION_MANAGE_CONFIGURATION, Resource.GLOBAL );
-
- return bundle;
- }
-
- public String input()
- {
- return INPUT;
- }
-
- public void prepare()
- throws Exception
- {
- String id = getProxyid();
-
- if ( StringUtils.isNotBlank( id ) )
- {
- proxy = findNetworkProxy( id );
- }
-
- if ( proxy == null )
- {
- proxy = new NetworkProxy();
- }
- }
-
- public String save()
- throws RepositoryAdminException
- {
- String mode = getMode();
-
- String id = getProxy().getId();
-
- if ( StringUtils.equalsIgnoreCase( "edit", mode ) )
- {
- getNetworkProxyAdmin().updateNetworkProxy( proxy, getAuditInformation() );
- }
- else
- {
- getNetworkProxyAdmin().addNetworkProxy( proxy, getAuditInformation() );
- }
-
- return SUCCESS;
- }
-
- public void validate()
- {
- // trim all unecessary trailing/leading white-spaces; always put this statement before the closing braces(after all validation).
- trimAllRequestParameterValues();
- }
-
- public void setMode( String mode )
- {
- this.mode = mode;
- }
-
- public void setProxy( NetworkProxy proxy )
- {
- this.proxy = proxy;
- }
-
- public void setProxyid( String proxyid )
- {
- this.proxyid = proxyid;
- }
-
-
- private NetworkProxy findNetworkProxy( String id )
- throws RepositoryAdminException
- {
- return getNetworkProxyAdmin().getNetworkProxy( id );
- }
-
- private void trimAllRequestParameterValues()
- {
- if ( StringUtils.isNotEmpty( proxy.getId() ) )
- {
- proxy.setId( proxy.getId().trim() );
- }
-
- if ( StringUtils.isNotEmpty( proxy.getHost() ) )
- {
- proxy.setHost( proxy.getHost().trim() );
- }
-
- if ( StringUtils.isNotEmpty( proxy.getPassword() ) )
- {
- proxy.setPassword( proxy.getPassword().trim() );
- }
-
- if ( StringUtils.isNotEmpty( proxy.getProtocol() ) )
- {
- proxy.setProtocol( proxy.getProtocol().trim() );
- }
-
- if ( StringUtils.isNotEmpty( proxy.getUsername() ) )
- {
- proxy.setUsername( proxy.getUsername().trim() );
- }
- }
-
- public NetworkProxyAdmin getNetworkProxyAdmin()
- {
- return networkProxyAdmin;
- }
-
- public void setNetworkProxyAdmin( NetworkProxyAdmin networkProxyAdmin )
- {
- this.networkProxyAdmin = networkProxyAdmin;
- }
-}
-
+++ /dev/null
-package org.apache.archiva.web.action.admin.networkproxies;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import com.opensymphony.xwork2.Preparable;
-import org.apache.archiva.admin.model.beans.NetworkProxy;
-import org.apache.archiva.admin.model.networkproxy.NetworkProxyAdmin;
-import org.apache.archiva.security.common.ArchivaRoleConstants;
-import org.apache.archiva.web.action.AbstractActionSupport;
-import org.apache.archiva.redback.rbac.Resource;
-import org.apache.archiva.redback.integration.interceptor.SecureAction;
-import org.apache.archiva.redback.integration.interceptor.SecureActionBundle;
-import org.apache.archiva.redback.integration.interceptor.SecureActionException;
-import org.springframework.context.annotation.Scope;
-import org.springframework.stereotype.Controller;
-
-import javax.inject.Inject;
-import java.util.List;
-
-/**
- * NetworkProxiesAction
- *
- *
- */
-@Controller( "networkProxiesAction" )
-@Scope( "prototype" )
-public class NetworkProxiesAction
- extends AbstractActionSupport
- implements Preparable, SecureAction
-{
-
- @Inject
- private NetworkProxyAdmin networkProxyAdmin;
-
- private List<NetworkProxy> networkProxies;
-
- public void prepare()
- throws Exception
- {
- networkProxies = getNetworkProxyAdmin().getNetworkProxies();
- }
-
- public SecureActionBundle getSecureActionBundle()
- throws SecureActionException
- {
- SecureActionBundle bundle = new SecureActionBundle();
-
- bundle.setRequiresAuthentication( true );
- bundle.addRequiredAuthorization( ArchivaRoleConstants.OPERATION_MANAGE_CONFIGURATION, Resource.GLOBAL );
-
- return bundle;
- }
-
- public List<NetworkProxy> getNetworkProxies()
- {
- return networkProxies;
- }
-
- public void setNetworkProxies( List<NetworkProxy> networkProxies )
- {
- this.networkProxies = networkProxies;
- }
-
- public NetworkProxyAdmin getNetworkProxyAdmin()
- {
- return networkProxyAdmin;
- }
-
- public void setNetworkProxyAdmin( NetworkProxyAdmin networkProxyAdmin )
- {
- this.networkProxyAdmin = networkProxyAdmin;
- }
-}
+++ /dev/null
-package org.apache.archiva.web.action.admin.repositories;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-/**
- * Abstract ManagedRepositories Action.
- * <p/>
- * Place for all generic methods used in Managed Repository Administration.
- *
- *
- */
-public abstract class AbstractManagedRepositoriesAction
- extends AbstractRepositoriesAdminAction
-{
- public static final String CONFIRM = "confirm";
-}
+++ /dev/null
-package org.apache.archiva.web.action.admin.repositories;
-
-import org.apache.archiva.admin.model.beans.NetworkProxy;
-import org.apache.archiva.admin.model.networkproxy.NetworkProxyAdmin;
-import org.apache.archiva.admin.model.remote.RemoteRepositoryAdmin;
-
-import javax.inject.Inject;
-import java.util.Collections;
-import java.util.List;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-/**
- * AbstractRemoteRepositoriesAction
- *
- *
- */
-public class AbstractRemoteRepositoriesAction
- extends AbstractRepositoriesAdminAction
-{
- @Inject
- private RemoteRepositoryAdmin remoteRepositoryAdmin;
-
- @Inject
- private NetworkProxyAdmin networkProxyAdmin;
-
- private List<NetworkProxy> networkProxies;
-
- public RemoteRepositoryAdmin getRemoteRepositoryAdmin()
- {
- return remoteRepositoryAdmin;
- }
-
- public void setRemoteRepositoryAdmin( RemoteRepositoryAdmin remoteRepositoryAdmin )
- {
- this.remoteRepositoryAdmin = remoteRepositoryAdmin;
- }
-
- public NetworkProxyAdmin getNetworkProxyAdmin()
- {
- return networkProxyAdmin;
- }
-
- public void setNetworkProxyAdmin( NetworkProxyAdmin networkProxyAdmin )
- {
- this.networkProxyAdmin = networkProxyAdmin;
- }
-
- public List<NetworkProxy> getNetworkProxies()
- {
- return networkProxies == null ? Collections.<NetworkProxy>emptyList() : networkProxies;
- }
-
- public void setNetworkProxies( List<NetworkProxy> networkProxies )
- {
- this.networkProxies = networkProxies;
- }
-}
+++ /dev/null
-package org.apache.archiva.web.action.admin.repositories;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import org.apache.archiva.admin.model.RepositoryCommonValidator;
-import org.apache.archiva.admin.model.managed.ManagedRepositoryAdmin;
-import org.apache.archiva.audit.Auditable;
-import org.apache.archiva.security.common.ArchivaRoleConstants;
-import org.apache.archiva.web.action.AbstractActionSupport;
-import org.apache.archiva.redback.rbac.Resource;
-import org.apache.archiva.redback.integration.interceptor.SecureAction;
-import org.apache.archiva.redback.integration.interceptor.SecureActionBundle;
-import org.apache.archiva.redback.integration.interceptor.SecureActionException;
-
-import javax.inject.Inject;
-
-/**
- * Abstract AdminRepositories Action base.
- * <p/>
- * Base class for all repository administrative functions.
- * This should be neutral to the type of action (add/edit/delete) and type of repo (managed/remote)
- *
- *
- */
-public abstract class AbstractRepositoriesAdminAction
- extends AbstractActionSupport
- implements SecureAction, Auditable
-{
-
- @Inject
- private ManagedRepositoryAdmin managedRepositoryAdmin;
-
- @Inject
- private RepositoryCommonValidator repositoryCommonValidator;
-
-
- public SecureActionBundle getSecureActionBundle()
- throws SecureActionException
- {
- SecureActionBundle bundle = new SecureActionBundle();
-
- bundle.setRequiresAuthentication( true );
- bundle.addRequiredAuthorization( ArchivaRoleConstants.OPERATION_MANAGE_CONFIGURATION, Resource.GLOBAL );
-
- return bundle;
- }
-
-
-
- public ManagedRepositoryAdmin getManagedRepositoryAdmin()
- {
- return managedRepositoryAdmin;
- }
-
- public void setManagedRepositoryAdmin( ManagedRepositoryAdmin managedRepositoryAdmin )
- {
- this.managedRepositoryAdmin = managedRepositoryAdmin;
- }
-
- public RepositoryCommonValidator getRepositoryCommonValidator()
- {
- return repositoryCommonValidator;
- }
-
- public void setRepositoryCommonValidator( RepositoryCommonValidator repositoryCommonValidator )
- {
- this.repositoryCommonValidator = repositoryCommonValidator;
- }
-}
+++ /dev/null
-package org.apache.archiva.web.action.admin.repositories;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import com.opensymphony.xwork2.Preparable;
-import com.opensymphony.xwork2.Validateable;
-import org.apache.archiva.admin.model.RepositoryAdminException;
-import org.apache.archiva.admin.model.beans.ManagedRepository;
-import org.apache.archiva.redback.components.scheduler.CronExpressionValidator;
-import org.apache.commons.lang.StringUtils;
-import org.springframework.context.annotation.Scope;
-import org.springframework.stereotype.Controller;
-
-import java.io.File;
-
-/**
- * AddManagedRepositoryAction
- *
- *
- */
-@Controller( "addManagedRepositoryAction" )
-@Scope( "prototype" )
-public class AddManagedRepositoryAction
- extends AbstractManagedRepositoriesAction
- implements Preparable, Validateable
-{
-
- private ManagedRepository repository;
-
- private boolean stageNeeded;
-
- private String action = "addRepository";
-
- public void prepare()
- {
- this.repository = new ManagedRepository();
- this.repository.setReleases( false );
- this.repository.setScanned( false );
- this.repository.setBlockRedeployments( false );
- }
-
- public String input()
- {
- this.repository.setReleases( true );
- this.repository.setScanned( true );
- this.repository.setBlockRedeployments( true );
-
- return INPUT;
- }
-
- public String confirmAdd()
- {
- return save();
- }
-
- public String commit()
- {
- repository.setLocation( getRepositoryCommonValidator().removeExpressions( repository.getLocation() ) );
-
- File location = new File( repository.getLocation() );
- if ( location.exists() )
- {
- return CONFIRM;
- }
-
- return save();
- }
-
- private String save()
- {
- String result = SUCCESS;
- try
- {
- getManagedRepositoryAdmin().addManagedRepository( repository, stageNeeded, getAuditInformation() );
- }
- catch ( RepositoryAdminException e )
- {
- log.error( e.getMessage(), e );
- addActionError( "Check your server logs, Repository Administration Exception: " + e.getMessage() );
- result = INPUT;
- }
-
- return result;
- }
-
- @Override
- public void validate()
- {
- CronExpressionValidator validator = new CronExpressionValidator();
-
- if ( !validator.validate( repository.getCronExpression() ) )
- {
- addFieldError( "repository.cronExpression", "Invalid cron expression." );
- }
-
- // trim all unecessary trailing/leading white-spaces; always put this statement before the closing braces(after all validation).
- trimAllRequestParameterValues();
- }
-
- private void trimAllRequestParameterValues()
- {
- if ( StringUtils.isNotEmpty( repository.getId() ) )
- {
- repository.setId( repository.getId().trim() );
- }
-
- if ( StringUtils.isNotEmpty( repository.getName() ) )
- {
- repository.setName( repository.getName().trim() );
- }
-
- if ( StringUtils.isNotEmpty( repository.getLocation() ) )
- {
- repository.setLocation( repository.getLocation().trim() );
- }
-
- if ( StringUtils.isNotEmpty( repository.getIndexDirectory() ) )
- {
- repository.setIndexDirectory( repository.getIndexDirectory().trim() );
- }
- }
-
- public ManagedRepository getRepository()
- {
- return repository;
- }
-
- public void setRepository( ManagedRepository repository )
- {
- this.repository = repository;
- }
-
-
- public void setStageNeeded( boolean stageNeeded )
- {
- this.stageNeeded = stageNeeded;
- }
-
- public String getAction()
- {
- return action;
- }
-}
+++ /dev/null
-package org.apache.archiva.web.action.admin.repositories;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import com.opensymphony.xwork2.Preparable;
-import com.opensymphony.xwork2.Validateable;
-import org.apache.archiva.admin.model.RepositoryAdminException;
-import org.apache.archiva.admin.model.beans.RemoteRepository;
-import org.springframework.context.annotation.Scope;
-import org.springframework.stereotype.Controller;
-
-/**
- * AddRemoteRepositoryAction
- *
- *
- */
-@Controller( "addRemoteRepositoryAction" )
-@Scope( "prototype" )
-public class AddRemoteRepositoryAction
- extends AbstractRemoteRepositoriesAction
- implements Preparable, Validateable
-{
- /**
- * The model for this action.
- */
- private RemoteRepository repository;
-
- public void prepare()
- throws RepositoryAdminException
- {
- this.repository = new RemoteRepository();
- setNetworkProxies( getNetworkProxyAdmin().getNetworkProxies() );
- }
-
- public String input()
- {
- return INPUT;
- }
-
- public String commit()
- {
-
- String result = SUCCESS;
- try
- {
- getRemoteRepositoryAdmin().addRemoteRepository( repository, getAuditInformation() );
- }
- catch ( RepositoryAdminException e )
- {
- addActionError( "RepositoryAdminException: " + e.getMessage() );
- result = INPUT;
- }
-
- return result;
- }
-
-
- public RemoteRepository getRepository()
- {
- return repository;
- }
-
- public void setRepository( RemoteRepository repository )
- {
- this.repository = repository;
- }
-}
+++ /dev/null
-package org.apache.archiva.web.action.admin.repositories;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import com.opensymphony.xwork2.Preparable;
-import org.apache.archiva.admin.model.RepositoryAdminException;
-import org.apache.archiva.admin.model.beans.ManagedRepository;
-import org.apache.commons.lang.StringUtils;
-import org.springframework.context.annotation.Scope;
-import org.springframework.stereotype.Controller;
-
-/**
- * DeleteManagedRepositoryAction
- *
- *
- */
-@Controller( "deleteManagedRepositoryAction" )
-@Scope( "prototype" )
-public class DeleteManagedRepositoryAction
- extends AbstractManagedRepositoriesAction
- implements Preparable
-{
-
-
- private ManagedRepository repository;
-
- private ManagedRepository stagingRepository;
-
- private String repoid;
-
- public void prepare()
- throws RepositoryAdminException
- {
- if ( StringUtils.isNotBlank( repoid ) )
- {
- this.repository = getManagedRepositoryAdmin().getManagedRepository( repoid );
- this.stagingRepository = getManagedRepositoryAdmin().getManagedRepository( repoid + "-stage" );
- }
- }
-
- public String confirmDelete()
- {
- if ( StringUtils.isBlank( repoid ) )
- {
- addActionError( "Unable to delete managed repository: repository id was blank." );
- return ERROR;
- }
-
- return INPUT;
- }
-
- public String deleteEntry()
- {
- return deleteRepository( false );
- }
-
- public String deleteContents()
- {
- return deleteRepository( true );
- }
-
- private String deleteRepository( boolean deleteContents )
- {
- ManagedRepository existingRepository = repository;
- if ( existingRepository == null )
- {
- addActionError( "A repository with that id does not exist" );
- return ERROR;
- }
-
- String result = SUCCESS;
-
- try
- {
- getManagedRepositoryAdmin().deleteManagedRepository( existingRepository.getId(), getAuditInformation(),
- deleteContents );
- }
- catch ( RepositoryAdminException e )
- {
- addActionError(
- "Unable to delete repository, content may already be partially removed: " + e.getMessage() );
- log.error( e.getMessage(), e );
- result = ERROR;
- }
- return result;
- }
-
- public ManagedRepository getRepository()
- {
- return repository;
- }
-
- public void setRepository( ManagedRepository repository )
- {
- this.repository = repository;
- }
-
- public String getRepoid()
- {
- return repoid;
- }
-
- public void setRepoid( String repoid )
- {
- this.repoid = repoid;
- }
-}
+++ /dev/null
-package org.apache.archiva.web.action.admin.repositories;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import com.opensymphony.xwork2.Preparable;
-import org.apache.archiva.admin.model.RepositoryAdminException;
-import org.apache.archiva.admin.model.beans.RemoteRepository;
-import org.apache.commons.lang.StringUtils;
-import org.springframework.context.annotation.Scope;
-import org.springframework.stereotype.Controller;
-
-/**
- * DeleteRemoteRepositoryAction
- *
- *
- */
-@Controller( "deleteRemoteRepositoryAction" )
-@Scope( "prototype" )
-public class DeleteRemoteRepositoryAction
- extends AbstractRemoteRepositoriesAction
- implements Preparable
-{
- private RemoteRepository repository;
-
- private String repoid;
-
- public void prepare()
- throws RepositoryAdminException
- {
- if ( StringUtils.isNotBlank( repoid ) )
- {
- this.repository = getRemoteRepositoryAdmin().getRemoteRepository( repoid );
- }
- }
-
- public String confirmDelete()
- {
- if ( StringUtils.isBlank( repoid ) )
- {
- addActionError( "Unable to delete remote repository: repository id was blank." );
- return ERROR;
- }
-
- return INPUT;
- }
-
- public String delete()
- {
- String result = SUCCESS;
- RemoteRepository existingRepository = repository;
- if ( existingRepository == null )
- {
- addActionError( "A repository with that id does not exist" );
- return ERROR;
- }
-
- try
- {
- getRemoteRepositoryAdmin().deleteRemoteRepository( existingRepository.getId(), getAuditInformation() );
- }
- catch ( RepositoryAdminException e )
- {
- addActionError( "RepositoryAdminException: " + e.getMessage() );
- result = ERROR;
- }
- return result;
- }
-
-
- public RemoteRepository getRepository()
- {
- return repository;
- }
-
- public void setRepository( RemoteRepository repository )
- {
- this.repository = repository;
- }
-
- public String getRepoid()
- {
- return repoid;
- }
-
- public void setRepoid( String repoid )
- {
- this.repoid = repoid;
- }
-}
+++ /dev/null
-package org.apache.archiva.web.action.admin.repositories;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import com.opensymphony.xwork2.Preparable;
-import org.apache.archiva.admin.model.RepositoryAdminException;
-import org.apache.archiva.admin.model.beans.RepositoryGroup;
-import org.apache.archiva.admin.model.group.RepositoryGroupAdmin;
-import org.apache.commons.lang.StringUtils;
-import org.springframework.context.annotation.Scope;
-import org.springframework.stereotype.Controller;
-
-import javax.inject.Inject;
-
-/**
- * DeleteRepositoryGroupAction
- */
-@Controller( "deleteRepositoryGroupAction" )
-@Scope( "prototype" )
-public class DeleteRepositoryGroupAction
- extends AbstractRepositoriesAdminAction
- implements Preparable
-{
- private RepositoryGroup repositoryGroup;
-
- @Inject
- private RepositoryGroupAdmin repositoryGroupAdmin;
-
- private String repoGroupId;
-
- public void prepare()
- throws RepositoryAdminException
- {
-
- if ( StringUtils.isNotBlank( repoGroupId ) )
- {
- this.repositoryGroup = repositoryGroupAdmin.getRepositoryGroup( repoGroupId );
- }
- }
-
- public String confirmDelete()
- {
- if ( StringUtils.isBlank( repoGroupId ) )
- {
- addActionError( "Unable to delete repository group: repository id was blank." );
- return ERROR;
- }
-
- return INPUT;
- }
-
- public String delete()
- {
-
- try
- {
- RepositoryGroup group = repositoryGroupAdmin.getRepositoryGroup( repoGroupId );
- if ( group == null )
- {
- addActionError( "A repository group with that id does not exist." );
- return ERROR;
- }
-
- repositoryGroupAdmin.deleteRepositoryGroup( repoGroupId, getAuditInformation() );
- return SUCCESS;
- }
- catch ( RepositoryAdminException e )
- {
- addActionError( "error occured " + e.getMessage() );
- return ERROR;
- }
- }
-
- public RepositoryGroup getRepositoryGroup()
- {
- return repositoryGroup;
- }
-
- public void setRepositoryGroup( RepositoryGroup repositoryGroup )
- {
- this.repositoryGroup = repositoryGroup;
- }
-
- public String getRepoGroupId()
- {
- return repoGroupId;
- }
-
- public void setRepoGroupId( String repoGroupId )
- {
- this.repoGroupId = repoGroupId;
- }
-
- public RepositoryGroupAdmin getRepositoryGroupAdmin()
- {
- return repositoryGroupAdmin;
- }
-
- public void setRepositoryGroupAdmin( RepositoryGroupAdmin repositoryGroupAdmin )
- {
- this.repositoryGroupAdmin = repositoryGroupAdmin;
- }
-}
+++ /dev/null
-package org.apache.archiva.web.action.admin.repositories;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import com.opensymphony.xwork2.Preparable;
-import com.opensymphony.xwork2.Validateable;
-import org.apache.archiva.admin.model.RepositoryAdminException;
-import org.apache.archiva.admin.model.beans.ManagedRepository;
-import org.apache.commons.lang.StringUtils;
-import org.apache.archiva.redback.components.scheduler.CronExpressionValidator;
-import org.springframework.context.annotation.Scope;
-import org.springframework.stereotype.Controller;
-
-import java.io.File;
-
-/**
- * AddManagedRepositoryAction
- *
- *
- */
-@Controller( "editManagedRepositoryAction" )
-@Scope( "prototype" )
-public class EditManagedRepositoryAction
- extends AbstractManagedRepositoriesAction
- implements Preparable, Validateable
-{
-
- private ManagedRepository repository;
-
- private ManagedRepository stagingRepository;
-
- private String repoid;
-
- private final String action = "editRepository";
-
- private boolean stageNeeded;
-
-
- // FIXME better error message
- public void prepare()
- throws RepositoryAdminException
- {
- if ( StringUtils.isNotBlank( repoid ) )
- {
- repository = getManagedRepositoryAdmin().getManagedRepository( repoid );
- stagingRepository = getManagedRepositoryAdmin().getManagedRepository( repoid + "-stage" );
- }
- else if ( repository != null )
- {
- repository.setReleases( false );
- repository.setScanned( false );
- }
- }
-
- public String input()
- {
- if ( repository == null )
- {
- addActionError( "Edit failure, unable to edit a repository with a blank repository id." );
- return ERROR;
- }
-
- return INPUT;
- }
-
- public String confirmUpdate()
- {
- // location was changed
- return save( true );
- }
-
- public String commit()
- throws RepositoryAdminException
- {
- ManagedRepository existingConfig = getManagedRepositoryAdmin().getManagedRepository( repository.getId() );
- boolean resetStats = false;
-
- // check if the location was changed
- repository.setLocation( getRepositoryCommonValidator().removeExpressions( repository.getLocation() ) );
-
- if ( !StringUtils.equalsIgnoreCase( existingConfig.getLocation().trim(), repository.getLocation().trim() ) )
- {
- resetStats = true;
-
- File dir = new File( repository.getLocation() );
- if ( dir.exists() )
- {
- return CONFIRM;
- }
- }
-
- return save( resetStats );
- }
-
- private String save( boolean resetStats )
- {
-
- String result = SUCCESS;
- try
- {
- getManagedRepositoryAdmin().updateManagedRepository( repository, stageNeeded, getAuditInformation(),
- resetStats );
- }
- catch ( RepositoryAdminException e )
- {
- addActionError( "Repository Administration Exception: " + e.getMessage() );
- result = ERROR;
- }
-
- return result;
- }
-
-
- @Override
- public void validate()
- {
- CronExpressionValidator validator = new CronExpressionValidator();
-
- if ( !validator.validate( repository.getCronExpression() ) )
- {
- addFieldError( "repository.cronExpression", "Invalid cron expression." );
- }
-
- trimAllRequestParameterValues();
- }
-
- private void trimAllRequestParameterValues()
- {
- if ( StringUtils.isNotEmpty( repository.getId() ) )
- {
- repository.setId( repository.getId().trim() );
- }
-
- if ( StringUtils.isNotEmpty( repository.getName() ) )
- {
- repository.setName( repository.getName().trim() );
- }
-
- if ( StringUtils.isNotEmpty( repository.getLocation() ) )
- {
- repository.setLocation( repository.getLocation().trim() );
- }
-
- if ( StringUtils.isNotEmpty( repository.getIndexDirectory() ) )
- {
- repository.setIndexDirectory( repository.getIndexDirectory().trim() );
- }
- }
-
- public String getRepoid()
- {
- return repoid;
- }
-
- public void setRepoid( String repoid )
- {
- this.repoid = repoid;
- }
-
-
- public boolean isStageNeeded()
- {
- return stageNeeded;
- }
-
- public void setStageNeeded( boolean stageNeeded )
- {
-
- this.stageNeeded = stageNeeded;
- }
-
- public String getAction()
- {
- return action;
- }
-
- public ManagedRepository getRepository()
- {
- return repository;
- }
-
- public void setRepository( ManagedRepository repository )
- {
- this.repository = repository;
- }
-
- public ManagedRepository getStagingRepository()
- {
- return stagingRepository;
- }
-
- public void setStagingRepository( ManagedRepository stagingRepository )
- {
- this.stagingRepository = stagingRepository;
- }
-}
+++ /dev/null
-package org.apache.archiva.web.action.admin.repositories;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import com.opensymphony.xwork2.Preparable;
-import org.apache.archiva.admin.model.RepositoryAdminException;
-import org.apache.archiva.admin.model.beans.RemoteRepository;
-import org.apache.archiva.scheduler.indexing.DownloadRemoteIndexException;
-import org.apache.archiva.scheduler.indexing.DownloadRemoteIndexScheduler;
-import org.apache.commons.lang.StringUtils;
-import org.springframework.context.annotation.Scope;
-import org.springframework.stereotype.Controller;
-
-import javax.inject.Inject;
-
-/**
- * EditRemoteRepositoryAction
- *
- *
- */
-@Controller( "editRemoteRepositoryAction" )
-@Scope( "prototype" )
-public class EditRemoteRepositoryAction
- extends AbstractRemoteRepositoriesAction
- implements Preparable
-{
- /**
- * The model for this action.
- */
- private RemoteRepository repository;
-
- /**
- * The repository id to edit.
- */
- private String repoid;
-
- private boolean now, fullDownload;
-
- @Inject
- private DownloadRemoteIndexScheduler downloadRemoteIndexScheduler;
-
- public void prepare()
- throws RepositoryAdminException
- {
- if ( StringUtils.isNotBlank( repoid ) )
- {
- this.repository = getRemoteRepositoryAdmin().getRemoteRepository( repoid );
- }
- setNetworkProxies( getNetworkProxyAdmin().getNetworkProxies() );
- }
-
- public String input()
- {
- if ( StringUtils.isBlank( repoid ) )
- {
- addActionError( "Edit failure, unable to edit a repository with a blank repository id." );
- return ERROR;
- }
-
- return INPUT;
- }
-
- public String commit()
- {
- String result = SUCCESS;
- try
- {
- getRemoteRepositoryAdmin().updateRemoteRepository( getRepository(), getAuditInformation() );
- }
- catch ( RepositoryAdminException e )
- {
- addActionError( "RepositoryAdminException: " + e.getMessage() );
- result = INPUT;
- }
-
- return result;
- }
-
- public String downloadRemoteIndex()
- {
- try
- {
- downloadRemoteIndexScheduler.scheduleDownloadRemote( repoid, now, fullDownload );
- }
- catch ( DownloadRemoteIndexException e )
- {
- addActionError( "DownloadRemoteIndexException: " + e.getMessage() );
- return INPUT;
- }
- return SUCCESS;
- }
-
- public RemoteRepository getRepository()
- {
- return repository;
- }
-
- public void setRepository( RemoteRepository repository )
- {
- this.repository = repository;
- }
-
- public String getRepoid()
- {
- return repoid;
- }
-
- public void setRepoid( String repoid )
- {
- this.repoid = repoid;
- }
-
- public boolean isNow()
- {
- return now;
- }
-
- public void setNow( boolean now )
- {
- this.now = now;
- }
-
- public boolean isFullDownload()
- {
- return fullDownload;
- }
-
- public void setFullDownload( boolean fullDownload )
- {
- this.fullDownload = fullDownload;
- }
-}
+++ /dev/null
-package org.apache.archiva.web.action.admin.repositories;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import com.opensymphony.xwork2.Preparable;
-import org.apache.archiva.admin.model.RepositoryAdminException;
-import org.apache.archiva.admin.model.beans.ManagedRepository;
-import org.apache.archiva.admin.model.beans.RemoteRepository;
-import org.apache.archiva.admin.model.group.RepositoryGroupAdmin;
-import org.apache.archiva.admin.model.managed.ManagedRepositoryAdmin;
-import org.apache.archiva.admin.model.remote.RemoteRepositoryAdmin;
-import org.apache.archiva.admin.repository.utils.RepositoryComparator;
-import org.apache.archiva.metadata.repository.MetadataRepository;
-import org.apache.archiva.metadata.repository.MetadataRepositoryException;
-import org.apache.archiva.metadata.repository.RepositorySession;
-import org.apache.archiva.metadata.repository.stats.RepositoryStatistics;
-import org.apache.archiva.metadata.repository.stats.RepositoryStatisticsManager;
-import org.apache.archiva.redback.rbac.Resource;
-import org.apache.archiva.security.common.ArchivaRoleConstants;
-import org.apache.archiva.web.util.ContextUtils;
-import org.apache.archiva.web.action.AbstractActionSupport;
-import org.apache.struts2.interceptor.ServletRequestAware;
-import org.apache.archiva.redback.integration.interceptor.SecureAction;
-import org.apache.archiva.redback.integration.interceptor.SecureActionBundle;
-import org.apache.archiva.redback.integration.interceptor.SecureActionException;
-import org.springframework.context.annotation.Scope;
-import org.springframework.stereotype.Controller;
-
-import javax.inject.Inject;
-import javax.servlet.http.HttpServletRequest;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-/**
- * Shows the Repositories Tab for the administrator.
- *
- *
- */
-@Controller( "repositoriesAction" )
-@Scope( "prototype" )
-public class RepositoriesAction
- extends AbstractActionSupport
- implements SecureAction, ServletRequestAware, Preparable
-{
-
- @Inject
- private ManagedRepositoryAdmin managedRepositoryAdmin;
-
- @Inject
- private RemoteRepositoryAdmin remoteRepositoryAdmin;
-
- @Inject
- private RepositoryGroupAdmin repositoryGroupAdmin;
-
- private List<ManagedRepository> managedRepositories;
-
- private List<RemoteRepository> remoteRepositories;
-
- private Map<String, RepositoryStatistics> repositoryStatistics;
-
- private Map<String, List<String>> repositoryToGroupMap;
-
- /**
- * Used to construct the repository WebDAV URL in the repository action.
- */
- private String baseUrl;
-
-
- @Inject
- private RepositoryStatisticsManager repositoryStatisticsManager;
-
- public void setServletRequest( HttpServletRequest request )
- {
- // TODO: is there a better way to do this?
- this.baseUrl = ContextUtils.getBaseURL( request, "repository" );
- }
-
- public SecureActionBundle getSecureActionBundle()
- throws SecureActionException
- {
- SecureActionBundle bundle = new SecureActionBundle();
-
- bundle.setRequiresAuthentication( true );
- bundle.addRequiredAuthorization( ArchivaRoleConstants.OPERATION_MANAGE_CONFIGURATION, Resource.GLOBAL );
-
- return bundle;
- }
-
- @SuppressWarnings( "unchecked" )
- public void prepare()
- throws RepositoryAdminException
- {
- remoteRepositories = new ArrayList<RemoteRepository>( getRemoteRepositoryAdmin().getRemoteRepositories() );
- managedRepositories = new ArrayList<ManagedRepository>( getManagedRepositoryAdmin().getManagedRepositories() );
- repositoryToGroupMap = getRepositoryGroupAdmin().getRepositoryToGroupMap();
-
- Collections.sort( managedRepositories, new RepositoryComparator() );
- Collections.sort( remoteRepositories, new RepositoryComparator() );
-
- repositoryStatistics = new HashMap<String, RepositoryStatistics>();
- RepositorySession repositorySession = repositorySessionFactory.createSession();
- try
- {
- MetadataRepository metadataRepository = repositorySession.getRepository();
- for ( ManagedRepository repo : managedRepositories )
- {
- RepositoryStatistics stats = null;
- try
- {
- stats = repositoryStatisticsManager.getLastStatistics( metadataRepository, repo.getId() );
- }
- catch ( MetadataRepositoryException e )
- {
- addActionError(
- "Error retrieving statistics for repository " + repo.getId() + " - consult application logs" );
- log.warn( "Error retrieving repository statistics: " + e.getMessage(), e );
- }
- if ( stats != null )
- {
- repositoryStatistics.put( repo.getId(), stats );
- }
- }
- }
- finally
- {
- repositorySession.close();
- }
- }
-
- public List<ManagedRepository> getManagedRepositories()
- {
- List<ManagedRepository> managedRepositoriesList = new ArrayList<ManagedRepository>();
- for ( ManagedRepository repoConfig : managedRepositories )
- {
- if ( !repoConfig.getId().endsWith( "-stage" ) )
- {
- managedRepositoriesList.add( repoConfig );
- }
- }
- return managedRepositoriesList;
- }
-
- public List<RemoteRepository> getRemoteRepositories()
- {
- return remoteRepositories;
- }
-
- public Map<String, RepositoryStatistics> getRepositoryStatistics()
- {
- return repositoryStatistics;
- }
-
- public String getBaseUrl()
- {
- return baseUrl;
- }
-
- public Map<String, List<String>> getRepositoryToGroupMap()
- {
- return repositoryToGroupMap;
- }
-
- public ManagedRepositoryAdmin getManagedRepositoryAdmin()
- {
- return managedRepositoryAdmin;
- }
-
- public void setManagedRepositoryAdmin( ManagedRepositoryAdmin managedRepositoryAdmin )
- {
- this.managedRepositoryAdmin = managedRepositoryAdmin;
- }
-
- public RemoteRepositoryAdmin getRemoteRepositoryAdmin()
- {
- return remoteRepositoryAdmin;
- }
-
- public void setRemoteRepositoryAdmin( RemoteRepositoryAdmin remoteRepositoryAdmin )
- {
- this.remoteRepositoryAdmin = remoteRepositoryAdmin;
- }
-
- public RepositoryGroupAdmin getRepositoryGroupAdmin()
- {
- return repositoryGroupAdmin;
- }
-
- public void setRepositoryGroupAdmin( RepositoryGroupAdmin repositoryGroupAdmin )
- {
- this.repositoryGroupAdmin = repositoryGroupAdmin;
- }
-
- public RepositoryStatisticsManager getRepositoryStatisticsManager()
- {
- return repositoryStatisticsManager;
- }
-
- public void setRepositoryStatisticsManager( RepositoryStatisticsManager repositoryStatisticsManager )
- {
- this.repositoryStatisticsManager = repositoryStatisticsManager;
- }
-}
+++ /dev/null
-package org.apache.archiva.web.action.admin.repositories;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import com.opensymphony.xwork2.Preparable;
-import org.apache.archiva.admin.model.RepositoryAdminException;
-import org.apache.archiva.admin.model.beans.ManagedRepository;
-import org.apache.archiva.admin.model.beans.RepositoryGroup;
-import org.apache.archiva.admin.model.group.RepositoryGroupAdmin;
-import org.apache.archiva.web.util.ContextUtils;
-import org.apache.struts2.interceptor.ServletRequestAware;
-import org.springframework.context.annotation.Scope;
-import org.springframework.stereotype.Controller;
-
-import javax.inject.Inject;
-import javax.servlet.http.HttpServletRequest;
-import java.util.List;
-import java.util.Map;
-import java.util.regex.Pattern;
-
-/**
- * RepositoryGroupsAction
- */
-@Controller( "repositoryGroupsAction" )
-@Scope( "prototype" )
-public class RepositoryGroupsAction
- extends AbstractRepositoriesAdminAction
- implements ServletRequestAware, Preparable
-{
-
- @Inject
- private RepositoryGroupAdmin repositoryGroupAdmin;
-
- private RepositoryGroup repositoryGroup;
-
- private Map<String, RepositoryGroup> repositoryGroups;
-
- private Map<String, ManagedRepository> managedRepositories;
-
- private Map<String, List<String>> groupToRepositoryMap;
-
- private String repoGroupId;
-
- private String repoId;
-
- /**
- * Used to construct the repository WebDAV URL in the repository action.
- */
- private String baseUrl;
-
- public void setServletRequest( HttpServletRequest request )
- {
- this.baseUrl = ContextUtils.getBaseURL( request, "repository" );
- }
-
- public void prepare()
- throws RepositoryAdminException
- {
-
- repositoryGroup = new RepositoryGroup();
- repositoryGroups = getRepositoryGroupAdmin().getRepositoryGroupsAsMap();
- managedRepositories = getManagedRepositoryAdmin().getManagedRepositoriesAsMap();
- groupToRepositoryMap = getRepositoryGroupAdmin().getGroupToRepositoryMap();
- }
-
- public String addRepositoryGroup()
- {
- try
- {
- getRepositoryGroupAdmin().addRepositoryGroup( repositoryGroup, getAuditInformation() );
- }
- catch ( RepositoryAdminException e )
- {
- addActionError( e.getMessage() );
- return ERROR;
- }
-
- return SUCCESS;
- }
-
- public String addRepositoryToGroup()
- {
- try
- {
- getRepositoryGroupAdmin().addRepositoryToGroup( repoGroupId, repoId, getAuditInformation() );
- }
- catch ( RepositoryAdminException e )
- {
- addActionError( e.getMessage() );
- return ERROR;
- }
- return SUCCESS;
- }
-
- public String removeRepositoryFromGroup()
- {
- try
- {
- getRepositoryGroupAdmin().deleteRepositoryFromGroup( repoGroupId, repoId, getAuditInformation() );
- }
- catch ( RepositoryAdminException e )
- {
- addActionError( e.getMessage() );
- return ERROR;
- }
- return SUCCESS;
- }
-
-
- public RepositoryGroup getRepositoryGroup()
- {
- return repositoryGroup;
- }
-
- public void setRepositoryGroup( RepositoryGroup repositoryGroup )
- {
- this.repositoryGroup = repositoryGroup;
- }
-
- public Map<String, RepositoryGroup> getRepositoryGroups()
- {
- return repositoryGroups;
- }
-
- public void setRepositoryGroups( Map<String, RepositoryGroup> repositoryGroups )
- {
- this.repositoryGroups = repositoryGroups;
- }
-
- public Map<String, ManagedRepository> getManagedRepositories()
- {
- return managedRepositories;
- }
-
- public Map<String, List<String>> getGroupToRepositoryMap()
- {
- return this.groupToRepositoryMap;
- }
-
- public String getRepoGroupId()
- {
- return repoGroupId;
- }
-
- public void setRepoGroupId( String repoGroupId )
- {
- this.repoGroupId = repoGroupId;
- }
-
- public String getRepoId()
- {
- return repoId;
- }
-
- public void setRepoId( String repoId )
- {
- this.repoId = repoId;
- }
-
- public String getBaseUrl()
- {
- return baseUrl;
- }
-
- public RepositoryGroupAdmin getRepositoryGroupAdmin()
- {
- return repositoryGroupAdmin;
- }
-
- public void setRepositoryGroupAdmin( RepositoryGroupAdmin repositoryGroupAdmin )
- {
- this.repositoryGroupAdmin = repositoryGroupAdmin;
- }
-}
+++ /dev/null
-package org.apache.archiva.web.action.admin.repositories;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import org.apache.commons.lang.StringUtils;
-import org.apache.archiva.configuration.ArchivaConfiguration;
-import org.apache.archiva.configuration.Configuration;
-import org.apache.archiva.configuration.IndeterminateConfigurationException;
-import org.apache.archiva.configuration.RepositoryGroupConfiguration;
-import org.springframework.context.annotation.Scope;
-import org.springframework.stereotype.Controller;
-
-import javax.inject.Inject;
-import java.util.List;
-
-/**
- * SortRepositoriesAction
- * FIXME remove access to archivaconfiguration
- */
-@Controller( "sortRepositoriesAction" )
-@Scope( "prototype" )
-public class SortRepositoriesAction
- extends AbstractRepositoriesAdminAction
-{
-
- private String repoGroupId;
-
- private String targetRepo;
-
- @Inject
- protected ArchivaConfiguration archivaConfiguration;
-
- public String sortDown()
- {
- Configuration config = archivaConfiguration.getConfiguration();
-
- List<String> repositories = getRepositoriesFromGroup();
-
- int idx = findTargetRepository( repositories, targetRepo );
-
- if ( idx >= 0 && validIndex( repositories, idx + 1 ) )
- {
- repositories.remove( idx );
- repositories.add( idx + 1, targetRepo );
- }
-
- return saveConfiguration( config );
- }
-
- public String sortUp()
- {
- Configuration config = archivaConfiguration.getConfiguration();
-
- List<String> repositories = getRepositoriesFromGroup();
-
- int idx = findTargetRepository( repositories, targetRepo );
-
- if ( idx >= 0 && validIndex( repositories, idx - 1 ) )
- {
- repositories.remove( idx );
- repositories.add( idx - 1, targetRepo );
- }
-
- return saveConfiguration( config );
- }
-
-/**
- * Save the configuration.
- *
- * @param configuration the configuration to save.
- * @return the webwork result code to issue.
- * @throws java.io.IOException thrown if unable to save file to disk.
- * @throws org.apache.archiva.configuration.InvalidConfigurationException thrown if configuration is invalid.
- * @throws org.apache.archiva.redback.components.registry.RegistryException thrown if configuration subsystem has a problem saving the configuration to disk.
- */
- protected String saveConfiguration( Configuration configuration )
- {
- try
- {
- archivaConfiguration.save( configuration );
- addActionMessage( "Successfully saved configuration" );
- }
- catch ( IndeterminateConfigurationException e )
- {
- addActionError( e.getMessage() );
- return INPUT;
- }
- catch ( org.apache.archiva.redback.components.registry.RegistryException e )
- {
- addActionError( "Configuration Registry Exception: " + e.getMessage() );
- return INPUT;
- }
-
- return SUCCESS;
- }
-
- public String getRepoGroupId()
- {
- return repoGroupId;
- }
-
- public void setRepoGroupId( String repoGroupId )
- {
- this.repoGroupId = repoGroupId;
- }
-
- public String getTargetRepo()
- {
- return targetRepo;
- }
-
- public void setTargetRepo( String targetRepo )
- {
- this.targetRepo = targetRepo;
- }
-
- private int findTargetRepository( List<String> repositories, String targetRepository )
- {
- int idx = ( -1 );
-
- for ( int i = 0; i < repositories.size(); i++ )
- {
- if ( StringUtils.equals( targetRepository, repositories.get( i ) ) )
- {
- idx = i;
- break;
- }
- }
- return idx;
- }
-
- private List<String> getRepositoriesFromGroup()
- {
- Configuration config = archivaConfiguration.getConfiguration();
- RepositoryGroupConfiguration repoGroup = config.findRepositoryGroupById( repoGroupId );
- return repoGroup.getRepositories();
- }
-
- private boolean validIndex( List<String> repositories, int idx )
- {
- return ( idx >= 0 ) && ( idx < repositories.size() );
- }
-
- public ArchivaConfiguration getArchivaConfiguration()
- {
- return archivaConfiguration;
- }
-
- public void setArchivaConfiguration( ArchivaConfiguration archivaConfiguration )
- {
- this.archivaConfiguration = archivaConfiguration;
- }
-}
+++ /dev/null
-package org.apache.archiva.web.action.admin.scanning;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import com.opensymphony.xwork2.Preparable;
-import com.opensymphony.xwork2.Validateable;
-import org.apache.archiva.admin.model.RepositoryAdminException;
-import org.apache.archiva.admin.model.admin.ArchivaAdministration;
-import org.apache.archiva.admin.model.beans.FileType;
-import org.apache.archiva.admin.repository.admin.FiletypeToMapClosure;
-import org.apache.archiva.audit.Auditable;
-import org.apache.archiva.repository.scanner.RepositoryContentConsumers;
-import org.apache.archiva.rest.api.model.AdminRepositoryConsumer;
-import org.apache.archiva.rest.services.utils.AddAdminRepoConsumerClosure;
-import org.apache.archiva.rest.services.utils.AdminRepositoryConsumerComparator;
-import org.apache.archiva.security.common.ArchivaRoleConstants;
-import org.apache.commons.collections.CollectionUtils;
-import org.apache.commons.lang.StringUtils;
-import org.apache.archiva.web.action.AbstractActionSupport;
-import org.apache.archiva.redback.rbac.Resource;
-import org.apache.archiva.redback.integration.interceptor.SecureAction;
-import org.apache.archiva.redback.integration.interceptor.SecureActionBundle;
-import org.apache.archiva.redback.integration.interceptor.SecureActionException;
-import org.springframework.context.annotation.Scope;
-import org.springframework.stereotype.Controller;
-
-import javax.inject.Inject;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
-
-/**
- * RepositoryScanningAction
- *
- *
- */
-@Controller( "repositoryScanningAction" )
-@Scope( "prototype" )
-public class RepositoryScanningAction
- extends AbstractActionSupport
- implements Preparable, Validateable, SecureAction, Auditable
-{
-
- @Inject
- private RepositoryContentConsumers repoconsumerUtil;
-
- @Inject
- private ArchivaAdministration archivaAdministration;
-
- private Map<String, FileType> fileTypeMap;
-
- private List<String> fileTypeIds;
-
- /**
- * List of {@link org.apache.archiva.rest.api.model.AdminRepositoryConsumer} objects for consumers of known content.
- */
- private List<AdminRepositoryConsumer> knownContentConsumers;
-
- /**
- * List of enabled {@link AdminRepositoryConsumer} objects for consumers of known content.
- */
- private List<String> enabledKnownContentConsumers;
-
- /**
- * List of {@link AdminRepositoryConsumer} objects for consumers of invalid/unknown content.
- */
- private List<AdminRepositoryConsumer> invalidContentConsumers;
-
- /**
- * List of enabled {@link AdminRepositoryConsumer} objects for consumers of invalid/unknown content.
- */
- private List<String> enabledInvalidContentConsumers;
-
- private String pattern;
-
- private String fileTypeId;
-
- public void addActionError( String anErrorMessage )
- {
- super.addActionError( anErrorMessage );
- log.warn( "[ActionError] {}", anErrorMessage );
- }
-
- public void addActionMessage( String aMessage )
- {
- super.addActionMessage( aMessage );
- log.info( "[ActionMessage] {}", aMessage );
- }
-
- public void prepare()
- throws Exception
- {
- FiletypeToMapClosure filetypeToMapClosure = new FiletypeToMapClosure();
-
- CollectionUtils.forAllDo( archivaAdministration.getFileTypes(), filetypeToMapClosure );
- fileTypeMap = filetypeToMapClosure.getMap();
-
- AddAdminRepoConsumerClosure addAdminRepoConsumer =
- new AddAdminRepoConsumerClosure( archivaAdministration.getKnownContentConsumers() );
- CollectionUtils.forAllDo( repoconsumerUtil.getAvailableKnownConsumers(), addAdminRepoConsumer );
- this.knownContentConsumers = addAdminRepoConsumer.getList();
- Collections.sort( knownContentConsumers, AdminRepositoryConsumerComparator.getInstance() );
-
- addAdminRepoConsumer = new AddAdminRepoConsumerClosure( archivaAdministration.getInvalidContentConsumers() );
- CollectionUtils.forAllDo( repoconsumerUtil.getAvailableInvalidConsumers(), addAdminRepoConsumer );
- this.invalidContentConsumers = addAdminRepoConsumer.getList();
- Collections.sort( invalidContentConsumers, AdminRepositoryConsumerComparator.getInstance() );
-
- fileTypeIds = new ArrayList<String>();
- fileTypeIds.addAll( fileTypeMap.keySet() );
- Collections.sort( fileTypeIds );
- }
-
- public String addFiletypePattern()
- {
- log.info( "Add New File Type Pattern [{}:{}]", getFileTypeId(), getPattern() );
-
- if ( !isValidFiletypeCommand() )
- {
- return INPUT;
- }
-
- try
- {
- getArchivaAdministration().addFileTypePattern( getFileTypeId(), getPattern(), getAuditInformation() );
- }
- catch ( RepositoryAdminException e )
- {
- addActionError( e.getMessage() );
- return INPUT;
- }
- return SUCCESS;
- }
-
- public String removeFiletypePattern()
- throws RepositoryAdminException
- {
- log.info( "Remove File Type Pattern [{}:{}]", getFileTypeId(), getPattern() );
-
- if ( !isValidFiletypeCommand() )
- {
- return INPUT;
- }
-
- try
- {
- getArchivaAdministration().removeFileTypePattern( getFileTypeId(), getPattern(), getAuditInformation() );
- }
- catch ( RepositoryAdminException e )
- {
- addActionError( "error adding file type pattern " + e.getMessage() );
- return INPUT;
- }
-
- return SUCCESS;
- }
-
- public String getFileTypeId()
- {
- return fileTypeId;
- }
-
- public List<String> getFileTypeIds()
- {
- return fileTypeIds;
- }
-
- public Map<String, FileType> getFileTypeMap()
- {
- return fileTypeMap;
- }
-
- public List<AdminRepositoryConsumer> getInvalidContentConsumers()
- {
- return invalidContentConsumers;
- }
-
- public List<AdminRepositoryConsumer> getKnownContentConsumers()
- {
- return knownContentConsumers;
- }
-
- public String getPattern()
- {
- return pattern;
- }
-
- public SecureActionBundle getSecureActionBundle()
- throws SecureActionException
- {
- SecureActionBundle bundle = new SecureActionBundle();
-
- bundle.setRequiresAuthentication( true );
- bundle.addRequiredAuthorization( ArchivaRoleConstants.OPERATION_MANAGE_CONFIGURATION, Resource.GLOBAL );
-
- return bundle;
- }
-
- public void setFileTypeId( String fileTypeId )
- {
- this.fileTypeId = fileTypeId;
- }
-
- public void setPattern( String pattern )
- {
- this.pattern = pattern;
- }
-
- public String updateInvalidConsumers()
- {
-
- try
- {
- List<String> oldConsumers = getArchivaAdministration().getInvalidContentConsumers();
-
- if ( enabledInvalidContentConsumers != null )
- {
- for ( String oldConsumer : oldConsumers )
- {
- if ( !enabledInvalidContentConsumers.contains( oldConsumer ) )
- {
- getArchivaAdministration().removeInvalidContentConsumer( oldConsumer, getAuditInformation() );
- }
- }
- for ( String enabledKnowContentConsumer : enabledInvalidContentConsumers )
- {
- getArchivaAdministration().addInvalidContentConsumer( enabledKnowContentConsumer,
- getAuditInformation() );
- }
- }
- else
- {
- for ( String oldConsumer : oldConsumers )
- {
- getArchivaAdministration().removeInvalidContentConsumer( oldConsumer, getAuditInformation() );
- }
- }
- }
- catch ( RepositoryAdminException e )
- {
- log.error( e.getMessage(), e );
- addActionError( "Error update invalidContentConsumers " + e.getMessage() );
- return INPUT;
- }
- addActionMessage( "Update Invalid Consumers" );
-
- return SUCCESS;
- }
-
- public String updateKnownConsumers()
- {
-
- try
- {
- List<String> oldConsumers = getArchivaAdministration().getKnownContentConsumers();
-
- if ( enabledKnownContentConsumers != null )
- {
- for ( String oldConsumer : oldConsumers )
- {
- if ( !enabledKnownContentConsumers.contains( oldConsumer ) )
- {
- getArchivaAdministration().removeKnownContentConsumer( oldConsumer, getAuditInformation() );
- }
- }
- for ( String enabledKnowContentConsumer : enabledKnownContentConsumers )
- {
- getArchivaAdministration().addKnownContentConsumer( enabledKnowContentConsumer,
- getAuditInformation() );
- }
- }
- else
- {
- for ( String oldConsumer : oldConsumers )
- {
- getArchivaAdministration().removeKnownContentConsumer( oldConsumer, getAuditInformation() );
- }
- }
- }
- catch ( RepositoryAdminException e )
- {
- log.error( e.getMessage(), e );
- addActionError( "Error update knowContentConsumers " + e.getMessage() );
- return INPUT;
- }
- addActionMessage( "Update Known Consumers" );
-
- return SUCCESS;
- }
-
- private boolean isValidFiletypeCommand()
- {
- if ( StringUtils.isBlank( getFileTypeId() ) )
- {
- addActionError( "Unable to process blank filetype id." );
- }
-
- if ( StringUtils.isBlank( getPattern() ) )
- {
- addActionError( "Unable to process blank pattern." );
- }
-
- return !hasActionErrors();
- }
-
-
- public List<String> getEnabledInvalidContentConsumers()
- {
- return enabledInvalidContentConsumers;
- }
-
- public void setEnabledInvalidContentConsumers( List<String> enabledInvalidContentConsumers )
- {
- this.enabledInvalidContentConsumers = enabledInvalidContentConsumers;
- }
-
- public List<String> getEnabledKnownContentConsumers()
- {
- return enabledKnownContentConsumers;
- }
-
- public void setEnabledKnownContentConsumers( List<String> enabledKnownContentConsumers )
- {
- this.enabledKnownContentConsumers = enabledKnownContentConsumers;
- }
-
- public ArchivaAdministration getArchivaAdministration()
- {
- return archivaAdministration;
- }
-
- public void setArchivaAdministration( ArchivaAdministration archivaAdministration )
- {
- this.archivaAdministration = archivaAdministration;
- }
-}
+++ /dev/null
-package org.apache.archiva.web.action.reports;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import com.opensymphony.xwork2.Preparable;
-import org.apache.archiva.admin.model.RepositoryAdminException;
-import org.apache.archiva.admin.model.managed.ManagedRepositoryAdmin;
-import org.apache.archiva.metadata.repository.MetadataRepository;
-import org.apache.archiva.metadata.repository.MetadataRepositoryException;
-import org.apache.archiva.metadata.repository.RepositorySession;
-import org.apache.archiva.metadata.repository.stats.RepositoryStatistics;
-import org.apache.archiva.metadata.repository.stats.RepositoryStatisticsManager;
-import org.apache.archiva.reports.RepositoryProblemFacet;
-import org.apache.archiva.security.common.ArchivaRoleConstants;
-import org.apache.commons.io.IOUtils;
-import org.apache.commons.lang.StringUtils;
-import org.apache.commons.lang.time.DateUtils;
-import org.apache.archiva.web.action.AbstractRepositoryBasedAction;
-import org.apache.archiva.redback.rbac.Resource;
-import org.apache.archiva.redback.integration.interceptor.SecureAction;
-import org.apache.archiva.redback.integration.interceptor.SecureActionBundle;
-import org.apache.archiva.redback.integration.interceptor.SecureActionException;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.context.annotation.Scope;
-import org.springframework.stereotype.Controller;
-
-import javax.inject.Inject;
-import java.io.ByteArrayInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.StringReader;
-import java.text.ParseException;
-import java.util.ArrayList;
-import java.util.Calendar;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
-import java.util.TreeMap;
-
-/**
- *
- */
-@Controller( "generateReport" )
-@Scope( "prototype" )
-public class GenerateReportAction
- extends AbstractRepositoryBasedAction
- implements SecureAction, Preparable
-{
- public static final String ALL_REPOSITORIES = "All Repositories";
-
- public static final String BLANK = "blank";
-
- private static final String[] datePatterns =
- new String[]{ "MM/dd/yy", "MM/dd/yyyy", "MMMMM/dd/yyyy", "MMMMM/dd/yy", "dd MMMMM yyyy", "dd/MM/yy",
- "dd/MM/yyyy", "yyyy/MM/dd", "yyyy-MM-dd", "yyyy-dd-MM", "MM-dd-yyyy", "MM-dd-yy" };
-
- public static final String SEND_FILE = "send-file";
-
- private Logger log = LoggerFactory.getLogger( GenerateReportAction.class );
-
- @Inject
- private ManagedRepositoryAdmin managedRepositoryAdmin;
-
- @Inject
- private RepositoryStatisticsManager repositoryStatisticsManager;
-
- private String groupId;
-
- private String repositoryId;
-
- private int page = 1;
-
- private int rowCount = 100;
-
- private List<String> selectedRepositories = new ArrayList<String>();
-
- private String startDate;
-
- private String endDate;
-
- private int numPages;
-
- private List<String> repositoryIds;
-
- private Map<String, List<RepositoryProblemFacet>> repositoriesMap =
- new TreeMap<String, List<RepositoryProblemFacet>>();
-
- private List<String> availableRepositories;
-
- private List<RepositoryStatistics> repositoryStatistics = new ArrayList<RepositoryStatistics>();
-
- private InputStream inputStream;
-
- private boolean lastPage;
-
- @SuppressWarnings( "unchecked" )
- public void prepare()
- throws RepositoryAdminException
- {
- repositoryIds = new ArrayList<String>();
- repositoryIds.add( ALL_REPOSITORIES ); // comes first to be first in the list
- repositoryIds.addAll( getObservableRepos() );
-
- availableRepositories = new ArrayList<String>();
-
- // remove selected repositories in the option for the statistics report
- availableRepositories.addAll( managedRepositoryAdmin.getManagedRepositoriesAsMap().keySet() );
- for ( String repo : selectedRepositories )
- {
- if ( availableRepositories.contains( repo ) )
- {
- availableRepositories.remove( repo );
- }
- }
- }
-
- /**
- * Generate the statistics report.
- * <p/>
- * check whether single repo report or comparison report
- * 1. if it is a single repository, get all the statistics for the repository on the specified date
- * - if no date is specified, get only the latest
- * (total page = 1 --> no pagination since only the most recent stats will be displayed)
- * - otherwise, get everything within the date range (total pages = repo stats / rows per page)
- * - required params: repository, startDate, endDate
- * <p/>
- * 2. if multiple repositories, get the latest statistics on each repository on the specified date
- * - if no date is specified, use the current date endDate
- * - required params: repositories, endDate
- * - total pages = repositories / rows per page
- *
- * @return action result
- */
- public String generateStatistics()
- {
- if ( rowCount < 10 )
- {
- // TODO: move to validation framework
- addFieldError( "rowCount", "Row count must be larger than 10." );
- return INPUT;
- }
- Date startDateInDF;
- Date endDateInDF;
-
- RepositorySession repositorySession = repositorySessionFactory.createSession();
- try
- {
- MetadataRepository metadataRepository = repositorySession.getRepository();
- if ( selectedRepositories.size() > 1 )
- {
- numPages = 1;
-
- try
- {
- startDateInDF = getStartDateInDateFormat();
- endDateInDF = getEndDateInDateFormat();
- }
- catch ( ParseException e )
- {
- addActionError( "Error parsing date(s)." );
- return ERROR;
- }
-
- if ( startDateInDF != null && endDateInDF != null && startDateInDF.after( endDateInDF ) )
- {
- addFieldError( "startDate", "Start Date must be earlier than the End Date" );
- return INPUT;
- }
-
- // multiple repos
- for ( String repo : selectedRepositories )
- {
- List<RepositoryStatistics> stats = null;
- try
- {
- stats =
- repositoryStatisticsManager.getStatisticsInRange( metadataRepository, repo, startDateInDF,
- endDateInDF );
- }
- catch ( MetadataRepositoryException e )
- {
- log.warn( "Unable to retrieve stats, assuming is empty: " + e.getMessage(), e );
- }
- if ( stats == null || stats.isEmpty() )
- {
- log.info( "No statistics available for repository '" + repo + "'." );
- // TODO set repo's stats to 0
- continue;
- }
-
- repositoryStatistics.add( stats.get( 0 ) );
- }
- }
- else if ( selectedRepositories.size() == 1 )
- {
- repositoryId = selectedRepositories.get( 0 );
- try
- {
- startDateInDF = getStartDateInDateFormat();
- endDateInDF = getEndDateInDateFormat();
-
- if ( startDateInDF != null && endDateInDF != null && startDateInDF.after( endDateInDF ) )
- {
- addFieldError( "startDate", "Start Date must be earlier than the End Date" );
- return INPUT;
- }
-
- List<RepositoryStatistics> stats = null;
- try
- {
- stats = repositoryStatisticsManager.getStatisticsInRange( metadataRepository, repositoryId,
- startDateInDF, endDateInDF );
- }
- catch ( MetadataRepositoryException e )
- {
- log.warn( "Unable to retrieve stats, assuming is empty: " + e.getMessage(), e );
- }
- if ( stats == null || stats.isEmpty() )
- {
- addActionError(
- "No statistics available for repository. Repository might not have been scanned." );
- return ERROR;
- }
-
- int rowCount = getRowCount();
- int extraPage = ( stats.size() % rowCount ) != 0 ? 1 : 0;
- int totalPages = ( stats.size() / rowCount ) + extraPage;
- numPages = totalPages;
-
- int currentPage = getPage();
- if ( currentPage > totalPages )
- {
- addActionError(
- "Error encountered while generating report :: The requested page exceeds the total number of pages." );
- return ERROR;
- }
-
- int start = rowCount * ( currentPage - 1 );
- int end = ( start + rowCount ) - 1;
-
- if ( end >= stats.size() )
- {
- end = stats.size() - 1;
- }
-
- repositoryStatistics = stats.subList( start, end + 1 );
- }
- catch ( ParseException pe )
- {
- addActionError( pe.getMessage() );
- return ERROR;
- }
- }
- else
- {
- addFieldError( "availableRepositories", "Please select a repository (or repositories) from the list." );
- return INPUT;
- }
- }
- finally
- {
- repositorySession.close();
- }
-
- if ( repositoryStatistics.isEmpty() )
- {
- return BLANK;
- }
-
- return SUCCESS;
- }
-
- /**
- * Export report to CSV.
- *
- * @return action result
- */
- public String downloadStatisticsReport()
- {
- Date startDateInDF;
- Date endDateInDF;
-
- selectedRepositories = parseSelectedRepositories();
- List<RepositoryStatistics> repositoryStatistics = new ArrayList<RepositoryStatistics>();
-
- StringBuilder input;
- RepositorySession repositorySession = repositorySessionFactory.createSession();
- try
- {
- MetadataRepository metadataRepository = repositorySession.getRepository();
- if ( selectedRepositories.size() > 1 )
- {
- try
- {
- startDateInDF = getStartDateInDateFormat();
- endDateInDF = getEndDateInDateFormat();
- }
- catch ( ParseException e )
- {
- addActionError( "Error parsing date(s)." );
- return ERROR;
- }
-
- if ( startDateInDF != null && endDateInDF != null && startDateInDF.after( endDateInDF ) )
- {
- addFieldError( "startDate", "Start Date must be earlier than the End Date" );
- return INPUT;
- }
-
- input = new StringBuilder(
- "Repository,Total File Count,Total Size,Artifact Count,Group Count,Project Count,Plugins,Archetypes,"
- + "Jars,Wars\n" );
-
- // multiple repos
- for ( String repo : selectedRepositories )
- {
- List<RepositoryStatistics> stats = null;
- try
- {
- stats =
- repositoryStatisticsManager.getStatisticsInRange( metadataRepository, repo, startDateInDF,
- endDateInDF );
- }
- catch ( MetadataRepositoryException e )
- {
- log.warn( "Unable to retrieve stats, assuming is empty: " + e.getMessage(), e );
- }
- if ( stats == null || stats.isEmpty() )
- {
- log.info( "No statistics available for repository '" + repo + "'." );
- // TODO set repo's stats to 0
- continue;
- }
-
- // only the first one
- RepositoryStatistics repositoryStats = stats.get( 0 );
- repositoryStatistics.add( repositoryStats );
-
- input.append( repo ).append( "," );
- input.append( repositoryStats.getTotalFileCount() ).append( "," );
- input.append( repositoryStats.getTotalArtifactFileSize() ).append( "," );
- input.append( repositoryStats.getTotalArtifactCount() ).append( "," );
- input.append( repositoryStats.getTotalGroupCount() ).append( "," );
- input.append( repositoryStats.getTotalProjectCount() ).append( "," );
- input.append( repositoryStats.getTotalCountForType( "maven-plugin" ) ).append( "," );
- input.append( repositoryStats.getTotalCountForType( "maven-archetype" ) ).append( "," );
- input.append( repositoryStats.getTotalCountForType( "jar" ) ).append( "," );
- input.append( repositoryStats.getTotalCountForType( "war" ) );
- input.append( "\n" );
- }
- }
- else if ( selectedRepositories.size() == 1 )
- {
- repositoryId = selectedRepositories.get( 0 );
- try
- {
- startDateInDF = getStartDateInDateFormat();
- endDateInDF = getEndDateInDateFormat();
-
- if ( startDateInDF != null && endDateInDF != null && startDateInDF.after( endDateInDF ) )
- {
- addFieldError( "startDate", "Start Date must be earlier than the End Date" );
- return INPUT;
- }
-
- List<RepositoryStatistics> stats = null;
- try
- {
- stats = repositoryStatisticsManager.getStatisticsInRange( metadataRepository, repositoryId,
- startDateInDF, endDateInDF );
- }
- catch ( MetadataRepositoryException e )
- {
- log.warn( "Unable to retrieve stats, assuming is empty: " + e.getMessage(), e );
- }
- if ( stats == null || stats.isEmpty() )
- {
- addActionError(
- "No statistics available for repository. Repository might not have been scanned." );
- return ERROR;
- }
-
- input = new StringBuilder(
- "Date of Scan,Total File Count,Total Size,Artifact Count,Group Count,Project Count,Plugins,"
- + "Archetypes,Jars,Wars\n" );
-
- for ( RepositoryStatistics repositoryStats : stats )
- {
- input.append( repositoryStats.getScanStartTime() ).append( "," );
- input.append( repositoryStats.getTotalFileCount() ).append( "," );
- input.append( repositoryStats.getTotalArtifactFileSize() ).append( "," );
- input.append( repositoryStats.getTotalArtifactCount() ).append( "," );
- input.append( repositoryStats.getTotalGroupCount() ).append( "," );
- input.append( repositoryStats.getTotalProjectCount() ).append( "," );
- input.append( repositoryStats.getTotalCountForType( "maven-plugin" ) ).append( "," );
- input.append( repositoryStats.getTotalCountForType( "maven-archetype" ) ).append( "," );
- input.append( repositoryStats.getTotalCountForType( "jar" ) ).append( "," );
- input.append( repositoryStats.getTotalCountForType( "war" ) );
- input.append( "\n" );
- }
-
- repositoryStatistics = stats;
- }
- catch ( ParseException pe )
- {
- addActionError( pe.getMessage() );
- return ERROR;
- }
- }
- else
- {
- addFieldError( "availableRepositories", "Please select a repository (or repositories) from the list." );
- return INPUT;
- }
- }
- finally
- {
- repositorySession.close();
- }
-
- if ( repositoryStatistics.isEmpty() )
- {
- return BLANK;
- }
-
- // write output stream depending on single or comparison report
- StringReader reader = new StringReader( input.toString() );
-
- try
- {
- inputStream = new ByteArrayInputStream( IOUtils.toByteArray( reader ) );
- }
- catch ( IOException i )
- {
- addActionError( "Error occurred while generating CSV file." );
- return ERROR;
- }
-
- return SEND_FILE;
- }
-
- // hack for parsing the struts list passed as param in <s:url ../>
-
- private List<String> parseSelectedRepositories()
- {
- List<String> parsedSelectedRepos = new ArrayList<String>();
-
- for ( String repo : selectedRepositories )
- {
- String[] tokens = StringUtils.split( repo, ',' );
- if ( tokens.length > 1 )
- {
- for ( String token : tokens )
- {
- parsedSelectedRepos.add( StringUtils.remove( StringUtils.remove( token, '[' ), ']' ).trim() );
- }
- }
- else
- {
- parsedSelectedRepos.add( StringUtils.remove( StringUtils.remove( repo, '[' ), ']' ).trim() );
- }
- }
- return parsedSelectedRepos;
- }
-
- private Date getStartDateInDateFormat()
- throws ParseException
- {
- Date startDateInDF;
- if ( startDate == null || "".equals( startDate ) )
- {
- startDateInDF = null;
- }
- else
- {
- startDateInDF = DateUtils.parseDate( startDate, datePatterns );
- }
- return startDateInDF;
- }
-
- private Date getEndDateInDateFormat()
- throws ParseException
- {
- Date endDateInDF;
- if ( endDate == null || "".equals( endDate ) )
- {
- endDateInDF = null;
- }
- else
- {
- endDateInDF = DateUtils.parseDate( endDate, datePatterns );
-
- // add a day, since we don't inclue time and want the date to be inclusive
- Calendar cal = Calendar.getInstance();
- cal.setTime( endDateInDF );
- cal.add( Calendar.DAY_OF_MONTH, 1 );
- endDateInDF = cal.getTime();
- }
-
- return endDateInDF;
- }
-
- public String execute()
- throws Exception
- {
- if ( repositoryId == null )
- {
- addFieldError( "repositoryId", "You must provide a repository id." );
- return INPUT;
- }
-
- if ( rowCount < 10 )
- {
- addFieldError( "rowCount", "Row count must be larger than 10." );
- return INPUT;
- }
-
- List<String> observableRepos = getObservableRepos();
- Collection<String> repoIds;
- if ( StringUtils.isEmpty( repositoryId ) || ALL_REPOSITORIES.equals( repositoryId ) )
- {
- repoIds = observableRepos;
- }
- else if ( observableRepos.contains( repositoryId ) )
- {
- repoIds = Collections.singletonList( repositoryId );
- }
- else
- {
- repoIds = Collections.emptyList();
- }
-
- List<RepositoryProblemFacet> problemArtifacts = new ArrayList<RepositoryProblemFacet>();
- RepositorySession repositorySession = repositorySessionFactory.createSession();
- try
- {
- MetadataRepository metadataRepository = repositorySession.getRepository();
- for ( String repoId : repoIds )
- {
- // TODO: improve performance by navigating into a group subtree. Currently group is property, not part of name of item
- for ( String name : metadataRepository.getMetadataFacets( repoId, RepositoryProblemFacet.FACET_ID ) )
- {
- RepositoryProblemFacet metadataFacet =
- (RepositoryProblemFacet) metadataRepository.getMetadataFacet( repoId,
- RepositoryProblemFacet.FACET_ID,
- name );
-
- if ( StringUtils.isEmpty( groupId ) || groupId.equals( metadataFacet.getNamespace() ) )
- {
- problemArtifacts.add( metadataFacet );
- }
- }
- }
- }
- finally
- {
- repositorySession.close();
- }
-
- // TODO: getting range only after reading is not efficient for a large number of artifacts
- int lowerBound = ( page - 1 ) * rowCount;
- int upperBound = ( page * rowCount ) + 1; // Add 1 to check if it's the last page or not.
- if ( upperBound <= problemArtifacts.size() )
- {
- problemArtifacts = problemArtifacts.subList( lowerBound, upperBound );
- }
- else
- {
- problemArtifacts = problemArtifacts.subList( lowerBound, problemArtifacts.size() );
- }
-
- for ( RepositoryProblemFacet problem : problemArtifacts )
- {
- List<RepositoryProblemFacet> problemsList;
- if ( repositoriesMap.containsKey( problem.getRepositoryId() ) )
- {
- problemsList = repositoriesMap.get( problem.getRepositoryId() );
- }
- else
- {
- problemsList = new ArrayList<RepositoryProblemFacet>();
- repositoriesMap.put( problem.getRepositoryId(), problemsList );
- }
-
- problemsList.add( problem );
- }
-
- // TODO: handling should be improved
- if ( problemArtifacts.size() <= rowCount )
- {
- lastPage = true;
- }
-
- if ( problemArtifacts.isEmpty() && page == 1 )
- {
- return BLANK;
- }
- else
- {
- return SUCCESS;
- }
- }
-
- public SecureActionBundle getSecureActionBundle()
- throws SecureActionException
- {
- SecureActionBundle bundle = new SecureActionBundle();
-
- bundle.setRequiresAuthentication( true );
- bundle.addRequiredAuthorization( ArchivaRoleConstants.OPERATION_ACCESS_REPORT, Resource.GLOBAL );
-
- return bundle;
- }
-
- public List<String> getRepositoryIds()
- {
- return repositoryIds;
- }
-
- public String getGroupId()
- {
- return groupId;
- }
-
- public void setGroupId( String groupId )
- {
- this.groupId = groupId;
- }
-
- public String getRepositoryId()
- {
- return repositoryId;
- }
-
- public void setRepositoryId( String repositoryId )
- {
- this.repositoryId = repositoryId;
- }
-
- public int getPage()
- {
- return page;
- }
-
- public void setPage( int page )
- {
- this.page = page;
- }
-
- public int getRowCount()
- {
- return rowCount;
- }
-
- public void setRowCount( int rowCount )
- {
- this.rowCount = rowCount;
- }
-
- public void setRepositoriesMap( Map<String, List<RepositoryProblemFacet>> repositoriesMap )
- {
- this.repositoriesMap = repositoriesMap;
- }
-
- public Map<String, List<RepositoryProblemFacet>> getRepositoriesMap()
- {
- return repositoriesMap;
- }
-
- public List<String> getSelectedRepositories()
- {
- return selectedRepositories;
- }
-
- public void setSelectedRepositories( List<String> selectedRepositories )
- {
- this.selectedRepositories = selectedRepositories;
- }
-
- public List<String> getAvailableRepositories()
- {
- return availableRepositories;
- }
-
- public void setAvailableRepositories( List<String> availableRepositories )
- {
- this.availableRepositories = availableRepositories;
- }
-
- public String getStartDate()
- {
- return startDate;
- }
-
- public void setStartDate( String startDate )
- {
- this.startDate = startDate;
- }
-
- public String getEndDate()
- {
- return endDate;
- }
-
- public void setEndDate( String endDate )
- {
- this.endDate = endDate;
- }
-
- public List<RepositoryStatistics> getRepositoryStatistics()
- {
- return repositoryStatistics;
- }
-
- public void setRepositoryStatistics( List<RepositoryStatistics> repositoryStatistics )
- {
- this.repositoryStatistics = repositoryStatistics;
- }
-
- public boolean isLastPage()
- {
- return lastPage;
- }
-
- public void setLastPage( boolean lastPage )
- {
- this.lastPage = lastPage;
- }
-
- public InputStream getInputStream()
- {
- return inputStream;
- }
-
- public int getNumPages()
- {
- return numPages;
- }
-
- public void setRepositoryStatisticsManager( RepositoryStatisticsManager repositoryStatisticsManager )
- {
- this.repositoryStatisticsManager = repositoryStatisticsManager;
- }
-
- public ManagedRepositoryAdmin getManagedRepositoryAdmin()
- {
- return managedRepositoryAdmin;
- }
-
- public void setManagedRepositoryAdmin( ManagedRepositoryAdmin managedRepositoryAdmin )
- {
- this.managedRepositoryAdmin = managedRepositoryAdmin;
- }
-}
+++ /dev/null
-package org.apache.archiva.web.action.reports;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import com.opensymphony.xwork2.Preparable;
-import org.apache.archiva.audit.AuditEvent;
-import org.apache.archiva.audit.AuditManager;
-import org.apache.archiva.metadata.repository.RepositorySession;
-import org.apache.commons.lang.StringUtils;
-import org.apache.commons.lang.time.DateUtils;
-import org.apache.archiva.security.AccessDeniedException;
-import org.apache.archiva.security.ArchivaSecurityException;
-import org.apache.archiva.security.PrincipalNotFoundException;
-import org.apache.archiva.security.UserRepositories;
-import org.apache.archiva.web.action.AbstractActionSupport;
-import org.apache.struts2.interceptor.ServletRequestAware;
-import org.apache.archiva.redback.integration.interceptor.SecureAction;
-import org.apache.archiva.redback.integration.interceptor.SecureActionBundle;
-import org.apache.archiva.redback.integration.interceptor.SecureActionException;
-import org.springframework.context.annotation.Scope;
-import org.springframework.stereotype.Controller;
-
-import javax.inject.Inject;
-import javax.servlet.http.HttpServletRequest;
-import java.util.ArrayList;
-import java.util.Calendar;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Date;
-import java.util.List;
-
-/**
- *
- */
-@Controller( "viewAuditLogReport" )
-@Scope( "prototype" )
-public class ViewAuditLogReportAction
- extends AbstractActionSupport
- implements SecureAction, ServletRequestAware, Preparable
-{
- protected HttpServletRequest request;
-
- @Inject
- private UserRepositories userRepositories;
-
- @Inject
- private AuditManager auditManager;
-
- private String repository;
-
- private List<String> repositories;
-
- private String groupId;
-
- private String artifactId;
-
- private String startDate;
-
- private String endDate;
-
- private int rowCount = 30;
-
- private int page = 1;
-
- protected boolean isLastPage = true;
-
- private List<AuditEvent> auditLogs;
-
- private static final String ALL_REPOSITORIES = "all";
-
- private String initial = "true";
-
- private String headerName;
-
- private static final String HEADER_LATEST_EVENTS = "Latest Events";
-
- private static final String HEADER_RESULTS = "Results";
-
- private String[] datePatterns =
- new String[]{ "MM/dd/yy", "MM/dd/yyyy", "MMMMM/dd/yyyy", "MMMMM/dd/yy", "dd MMMMM yyyy", "dd/MM/yy",
- "dd/MM/yyyy", "yyyy/MM/dd", "yyyy-MM-dd", "yyyy-dd-MM", "MM-dd-yyyy", "MM-dd-yy" };
-
-
-
- public SecureActionBundle getSecureActionBundle()
- throws SecureActionException
- {
- SecureActionBundle bundle = new SecureActionBundle();
-
- // TODO: should require this, but for now we trust in the list of repositories
-// bundle.setRequiresAuthentication( true );
-// bundle.addRequiredAuthorization( ArchivaRoleConstants.OPERATION_VIEW_AUDIT_LOG );
-
- return bundle;
- }
-
- public void setServletRequest( HttpServletRequest request )
- {
- this.request = request;
- }
-
- @SuppressWarnings( "unchecked" )
- public void prepare()
- throws Exception
- {
- repositories = new ArrayList<String>();
- repositories.add( ALL_REPOSITORIES );
- List<String> repos = getManagableRepositories();
- repositories.addAll( repos );
-
- auditLogs = null;
- groupId = "";
- artifactId = "";
- repository = "";
-
- if ( Boolean.parseBoolean( initial ) )
- {
- headerName = HEADER_LATEST_EVENTS;
- }
- else
- {
- headerName = HEADER_RESULTS;
- }
-
- RepositorySession repositorySession = repositorySessionFactory.createSession();
- try
- {
- auditLogs = auditManager.getMostRecentAuditEvents( repositorySession.getRepository(), repos );
- }
- finally
- {
- repositorySession.close();
- }
- }
-
- public String execute()
- throws Exception
- {
- Date startDateInDF = null;
- Date endDateInDF = null;
- if ( !StringUtils.isEmpty( startDate ) )
- {
- startDateInDF = DateUtils.parseDate( startDate, datePatterns );
- }
-
- if ( !StringUtils.isEmpty( endDate ) )
- {
- endDateInDF = DateUtils.parseDate( endDate, datePatterns );
- Calendar cal = Calendar.getInstance();
- cal.setTime( endDateInDF );
- cal.set( Calendar.HOUR, 23 );
- cal.set( Calendar.MINUTE, 59 );
- cal.set( Calendar.SECOND, 59 );
-
- endDateInDF = cal.getTime();
- }
-
- Collection<String> repos = getManagableRepositories();
- if ( !repository.equals( ALL_REPOSITORIES ) )
- {
- if ( repos.contains( repository ) )
- {
- repos = Collections.singletonList( repository );
- }
- else
- {
- repos = Collections.emptyList();
- }
- }
-
- if ( StringUtils.isEmpty( groupId ) && !StringUtils.isEmpty( artifactId ) )
- {
- // Until we store the full artifact metadata in the audit event, we can't query by these individually
- addActionError( "If you specify an artifact ID, you must specify a group ID" );
- auditLogs = null;
- return INPUT;
- }
-
- String resource = null;
- if ( !StringUtils.isEmpty( groupId ) )
- {
- String groupIdAsPath = groupId.replace( '.', '/' );
- if ( StringUtils.isEmpty( artifactId ) )
- {
- resource = groupIdAsPath;
- }
- else
- {
- resource = groupIdAsPath + "/" + artifactId;
- }
- }
-
- RepositorySession repositorySession = repositorySessionFactory.createSession();
- try
- {
- auditLogs =
- auditManager.getAuditEventsInRange( repositorySession.getRepository(), repos, resource, startDateInDF,
- endDateInDF );
- }
- finally
- {
- repositorySession.close();
- }
-
- headerName = HEADER_RESULTS;
-
- if ( auditLogs.isEmpty() )
- {
- addActionError( "No audit logs found." );
- initial = "true";
- return SUCCESS;
- }
- else
- {
- initial = "false";
- return paginate();
- }
- }
-
- private String paginate()
- {
- int rowCount = getRowCount();
- int extraPage = ( auditLogs.size() % rowCount ) != 0 ? 1 : 0;
- int totalPages = ( auditLogs.size() / rowCount ) + extraPage;
-
- int currentPage = getPage();
- if ( currentPage > totalPages )
- {
- addActionError(
- "Error encountered while generating report :: The requested page exceeds the total number of pages." );
- return ERROR;
- }
-
- if ( currentPage == totalPages )
- {
- isLastPage = true;
- }
- else
- {
- isLastPage = false;
- }
-
- int start = rowCount * ( currentPage - 1 );
- int end = ( start + rowCount ) - 1;
-
- if ( end >= auditLogs.size() )
- {
- end = auditLogs.size() - 1;
- }
-
- auditLogs = auditLogs.subList( start, end + 1 );
-
- return SUCCESS;
- }
-
- private List<String> getManagableRepositories()
- {
- try
- {
- return userRepositories.getManagableRepositoryIds( getPrincipal() );
- }
- catch ( PrincipalNotFoundException e )
- {
- log.warn( e.getMessage(), e );
- }
- catch ( AccessDeniedException e )
- {
- log.warn( e.getMessage(), e );
- }
- catch ( ArchivaSecurityException e )
- {
- log.warn( e.getMessage(), e );
- }
- return Collections.emptyList();
- }
-
- public String getRepository()
- {
- return repository;
- }
-
- public void setRepository( String repository )
- {
- this.repository = repository;
- }
-
- public List<String> getRepositories()
- {
- return repositories;
- }
-
- public void setRepositories( List<String> repositories )
- {
- this.repositories = repositories;
- }
-
- public String getGroupId()
- {
- return groupId;
- }
-
- public void setGroupId( String groupId )
- {
- this.groupId = groupId;
- }
-
- public String getArtifactId()
- {
- return artifactId;
- }
-
- public void setArtifactId( String artifactId )
- {
- this.artifactId = artifactId;
- }
-
- public List<AuditEvent> getAuditLogs()
- {
- return auditLogs;
- }
-
- public int getRowCount()
- {
- return rowCount;
- }
-
- public void setRowCount( int rowCount )
- {
- this.rowCount = rowCount;
- }
-
- public String getStartDate()
- {
- return startDate;
- }
-
- public void setStartDate( String startDate )
- {
- this.startDate = startDate;
- }
-
- public String getEndDate()
- {
- return endDate;
- }
-
- public void setEndDate( String endDate )
- {
- this.endDate = endDate;
- }
-
- public int getPage()
- {
- return page;
- }
-
- public void setPage( int page )
- {
- this.page = page;
- }
-
- public boolean getIsLastPage()
- {
- return isLastPage;
- }
-
- public void setIsLastPage( boolean isLastPage )
- {
- this.isLastPage = isLastPage;
- }
-
- public String getInitial()
- {
- return initial;
- }
-
- public void setInitial( String initial )
- {
- this.initial = initial;
- }
-
- public String getHeaderName()
- {
- return headerName;
- }
-
- public void setHeaderName( String headerName )
- {
- this.headerName = headerName;
- }
-}
+++ /dev/null
-package org.apache.archiva.web.interceptor;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import com.opensymphony.xwork2.ActionInvocation;
-import com.opensymphony.xwork2.interceptor.Interceptor;
-import org.apache.archiva.configuration.ArchivaConfiguration;
-import org.apache.struts2.ServletActionContext;
-import org.springframework.context.annotation.Scope;
-import org.springframework.stereotype.Service;
-
-import javax.inject.Inject;
-import javax.servlet.ServletContext;
-
-/**
- * An interceptor that makes the configuration bits available, both to the application and the webapp.
- */
-@Service( "configurationInterceptor" )
-@Scope( "prototype" )
-public class ConfigurationInterceptor
- implements Interceptor
-{
-
- @Inject
- private ArchivaConfiguration configuration;
-
- public String intercept( ActionInvocation actionInvocation )
- throws Exception
- {
- // populate webapp configuration bits into the session
- ServletContext applicationScope = ServletActionContext.getServletContext();
- applicationScope.setAttribute( "uiOptions", configuration.getConfiguration().getWebapp().getUi() );
-
- return actionInvocation.invoke();
- }
-
- public void destroy()
- {
- // This space left intentionally blank
- }
-
- public void init()
- {
- // This space left intentionally blank
- }
-
-}
+++ /dev/null
-package org.apache.archiva.web.mapper;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import com.opensymphony.xwork2.config.ConfigurationManager;
-import org.apache.struts2.dispatcher.mapper.ActionMapping;
-import org.apache.struts2.dispatcher.mapper.DefaultActionMapper;
-
-import org.apache.commons.lang.StringUtils;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import javax.servlet.http.HttpServletRequest;
-
-/**
- * Map alternate URLs to specific actions. Used for the repository browser and the proxy.
- *
- */
-public class RepositoryActionMapper
- extends DefaultActionMapper
-{
- private static final String ACTION_BROWSE = "browse";
-
- private static final String ACTION_BROWSE_ARTIFACT = "browseArtifact";
-
- private static final String ACTION_BROWSE_GROUP = "browseGroup";
-
- private static final String ACTION_SHOW_ARTIFACT = "showArtifact";
-
- private static final String ACTION_SHOW_ARTIFACT_DEPENDEES = "showArtifactDependees";
-
- private static final String ACTION_SHOW_ARTIFACT_DEPENDENCIES = "showArtifactDependencies";
-
- private static final String ACTION_SHOW_ARTIFACT_DEPENDENCY_TREE = "showArtifactDependencyTree";
-
- private static final String ACTION_SHOW_ARTIFACT_MAILING_LISTS = "showArtifactMailingLists";
-
- private static final String BROWSE_PREFIX = "/browse";
-
- private static final String METHOD_DEPENDENCIES = "dependencies";
-
- private static final String METHOD_DEPENDENCY_TREE = "dependencyTree";
-
- private static final String METHOD_MAILING_LISTS = "mailingLists";
-
- private static final String METHOD_USEDBY = "usedby";
-
- private static final String PARAM_ARTIFACT_ID = "artifactId";
-
- private static final String PARAM_GROUP_ID = "groupId";
-
- private static final String PARAM_VERSION = "version";
-
- private static final String ACTION_EXTENSION = "action";
-
- public ActionMapping getMapping( HttpServletRequest httpServletRequest, ConfigurationManager manager )
- {
- String path = httpServletRequest.getServletPath();
-
- if ("".equals(path)){
- // if JEE 5 spec is correctly implemented, the "/*" pattern implies an empty string in servletpath
- path = httpServletRequest.getPathInfo();
- }
-
- if (StringUtils.isEmpty( path ))
- {
- // try RequestURI in last at least for StrutsTestCase
- path = httpServletRequest.getRequestURI();
- }
-
- if ( path.startsWith( BROWSE_PREFIX ) )
- {
- path = path.substring( BROWSE_PREFIX.length() );
- if ( StringUtils.isBlank( path ) ||
- StringUtils.equals( path, "/" ) ||
- StringUtils.equals( path, ".action" ) )
- {
- // Return "root" browse.
- return createActionMapping( ACTION_BROWSE, "/", "", null );
- }
- else
- {
- Map<String, String> params = new HashMap<String, String>();
-
- if ( path.charAt( 0 ) == '/' )
- {
- path = path.substring( 1 );
- }
-
- String[] parts = path.split( "/" );
- switch ( parts.length )
- {
- case 1:
- params.put( PARAM_GROUP_ID, parts[0] );
- return createActionMapping( ACTION_BROWSE_GROUP, "/", "", params );
-
- case 2:
- params.put( PARAM_GROUP_ID, parts[0] );
- params.put( PARAM_ARTIFACT_ID, parts[1] );
- return createActionMapping( ACTION_BROWSE_ARTIFACT, "/", "", params );
-
- case 3:
- params.put( PARAM_GROUP_ID, parts[0] );
- params.put( PARAM_ARTIFACT_ID, parts[1] );
- params.put( PARAM_VERSION, parts[2] );
- return createActionMapping( ACTION_SHOW_ARTIFACT, "/", "", params );
-
- case 4:
- params.put( PARAM_GROUP_ID, parts[0] );
- params.put( PARAM_ARTIFACT_ID, parts[1] );
- params.put( PARAM_VERSION, parts[2] );
-
- if ( METHOD_DEPENDENCIES.equals( parts[3] ) )
- {
- return createActionMapping( ACTION_SHOW_ARTIFACT_DEPENDENCIES, "/", "", params );
- }
- else if ( METHOD_MAILING_LISTS.equals( parts[3] ) )
- {
- return createActionMapping( ACTION_SHOW_ARTIFACT_MAILING_LISTS, "/", "", params );
- }
- else if ( METHOD_USEDBY.equals( parts[3] ) )
- {
- return createActionMapping( ACTION_SHOW_ARTIFACT_DEPENDEES, "/", "", params );
- }
- else if ( METHOD_DEPENDENCY_TREE.equals( parts[3] ) )
- {
- return createActionMapping( ACTION_SHOW_ARTIFACT_DEPENDENCY_TREE, "/", "", params );
- }
- break;
- }
- }
- }
-
- return super.getMapping( httpServletRequest, manager );
- }
-
- @SuppressWarnings("unchecked")
- @Override
- public String getUriFromActionMapping( ActionMapping actionMapping )
- {
- Map<String, Object> params = actionMapping.getParams();
- if ( ACTION_BROWSE.equals( actionMapping.getName() ) )
- {
- return BROWSE_PREFIX;
- }
- else if ( ACTION_BROWSE_GROUP.equals( actionMapping.getName() ) )
- {
- return toUri( params, false, false, null );
- }
- else if ( ACTION_BROWSE_ARTIFACT.equals( actionMapping.getName() ) )
- {
- return toUri( params, true, false, null );
- }
- else if ( ACTION_SHOW_ARTIFACT.equals( actionMapping.getName() ) )
- {
- return toUri( params, true, true, null );
- }
- else if ( ACTION_SHOW_ARTIFACT_DEPENDENCIES.equals( actionMapping.getName() ) )
- {
- return toUri( params, true, true, METHOD_DEPENDENCIES );
- }
- else if ( ACTION_SHOW_ARTIFACT_MAILING_LISTS.equals( actionMapping.getName() ) )
- {
- return toUri( params, true, true, METHOD_MAILING_LISTS );
- }
- else if ( ACTION_SHOW_ARTIFACT_DEPENDEES.equals( actionMapping.getName() ) )
- {
- return toUri( params, true, true, METHOD_USEDBY );
- }
- else if ( ACTION_SHOW_ARTIFACT_DEPENDENCY_TREE.equals( actionMapping.getName() ) )
- {
- return toUri( params, true, true, METHOD_DEPENDENCY_TREE );
- }
-
- return super.getUriFromActionMapping( actionMapping );
- }
-
- private String toUri( Map<String, Object> params, boolean artifactId, boolean version, String method )
- {
- StringBuilder buf = new StringBuilder();
-
- buf.append( BROWSE_PREFIX );
- buf.append( '/' );
- buf.append( params.remove( PARAM_GROUP_ID ) );
-
- if ( artifactId )
- {
- buf.append( '/' );
- buf.append( params.remove( PARAM_ARTIFACT_ID ) );
-
- if ( version )
- {
- buf.append( '/' );
- buf.append( params.remove( PARAM_VERSION ) );
-
- if ( StringUtils.isNotBlank( method ) )
- {
- buf.append( '/' );
- buf.append( method );
- }
- }
- }
-
- return buf.toString();
- }
-
- private ActionMapping createActionMapping( String name, String namespace, String method, Map params )
- {
- ActionMapping mapping = new ActionMapping( name, namespace, method, params );
- mapping.setExtension( ACTION_EXTENSION );
-
- return mapping;
- }
-}
+++ /dev/null
-package org.apache.archiva.web.tags;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import org.apache.archiva.admin.model.beans.ManagedRepository;
-import org.apache.archiva.web.util.ContextUtils;
-import org.apache.commons.lang.StringEscapeUtils;
-import org.apache.struts2.views.annotations.StrutsTag;
-import org.apache.struts2.views.annotations.StrutsTagAttribute;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import javax.servlet.jsp.JspException;
-import javax.servlet.jsp.JspWriter;
-import javax.servlet.jsp.PageContext;
-import javax.servlet.jsp.tagext.TagSupport;
-import java.io.IOException;
-
-/**
- * CopyPasteSnippetTag
- *
- *
- */
-@StrutsTag(name = "copy-paste-snippet", tldBodyContent = "empty", tldTagClass = "org.apache.archiva.web.tags.CopyPasteSnippetTag", description = "Render a copy paste snippet for the provided object")
-public class CopyPasteSnippetTag
- extends TagSupport
-{
- private Logger log = LoggerFactory.getLogger( CopyPasteSnippetTag.class );
-
- private Object object;
-
- private String wrapper = PRE;
-
- public static final String PRE = "pre";
-
- public static final String TOGGLE = "toggle";
-
- @Override
- public void release()
- {
- object = null;
- super.release();
- }
-
- @Override
- public int doEndTag()
- throws JspException
- {
- StringBuilder prefix = new StringBuilder();
- StringBuilder buf = new StringBuilder();
- StringBuilder suffix = new StringBuilder();
-
- if ( object == null )
- {
- buf.append( "Error generating snippet." );
- log.error( "Unable to generate snippet for null object." );
- }
- else if ( object instanceof ManagedRepository )
- {
- ManagedRepository repo = (ManagedRepository) object;
-
- if ( TOGGLE.equals( wrapper ) )
- {
- prefix.append( "<a href=\"#\" class=\"expand\">Show POM Snippet</a><br/>" );
- prefix.append( "<pre class=\"pom\"><code>" );
-
- suffix.append( "</code></pre>" );
- }
- else if ( PRE.equals( wrapper ) )
- {
- prefix.append( "<pre>" );
- suffix.append( "</pre>" );
- }
-
- createSnippet( buf, repo, pageContext );
- }
- else
- {
- buf.append( "Unable to generate snippet for object " ).append( object.getClass().getName() );
- }
-
- try
- {
- JspWriter out = pageContext.getOut();
-
- out.write( prefix.toString() );
- out.write( StringEscapeUtils.escapeXml( buf.toString() ) );
- out.write( suffix.toString() );
-
- out.flush();
- }
- catch ( IOException e )
- {
- throw new JspException( "Unable to write snippet to output: " + e.getMessage(), e );
- }
-
- return super.doEndTag();
- }
-
- @StrutsTagAttribute(description = "The Object to Render", type = "String", defaultValue = "", required = true, rtexprvalue = true)
- public void setObject( Object object )
- {
- this.object = object;
- }
-
- @StrutsTagAttribute(description = "The wrapper type to use, can be 'pre' or 'toggle'", type = "String", defaultValue = "", required = false, rtexprvalue = true)
- public void setWrapper( String wrapper )
- {
- this.wrapper = wrapper;
- }
-
- private void createSnippet( StringBuilder snippet, ManagedRepository repo, PageContext pageContext )
- {
- snippet.append( "<project>\n" );
- snippet.append( " ...\n" );
- snippet.append( " <distributionManagement>\n" );
-
- String distRepoName = "repository";
- if ( repo.isSnapshots() )
- {
- distRepoName = "snapshotRepository";
- }
-
- snippet.append( " <" ).append( distRepoName ).append( ">\n" );
- snippet.append( " <id>" ).append( repo.getId() ).append( "</id>\n" );
- snippet.append( " <url>" ).append( ContextUtils.getBaseURL( pageContext, "repository" ) );
- snippet.append( "/" ).append( repo.getId() ).append( "/" ).append( "</url>\n" );
-
- if ( !"default".equals( repo.getLayout() ) )
- {
- snippet.append( " <layout>" ).append( repo.getLayout() ).append( "</layout>" );
- }
-
- snippet.append( " </" ).append( distRepoName ).append( ">\n" );
- snippet.append( " </distributionManagement>\n" );
- snippet.append( "\n" );
-
- snippet.append( " <repositories>\n" );
- snippet.append( " <repository>\n" );
- snippet.append( " <id>" ).append( repo.getId() ).append( "</id>\n" );
- snippet.append( " <name>" ).append( repo.getName() ).append( "</name>\n" );
-
- snippet.append( " <url>" );
- snippet.append( ContextUtils.getBaseURL( pageContext, "repository" ) );
- snippet.append( "/" ).append( repo.getId() ).append( "/" );
-
- snippet.append( "</url>\n" );
-
- if ( !"default".equals( repo.getLayout() ) )
- {
- snippet.append( " <layout>" ).append( repo.getLayout() ).append( "</layout>\n" );
- }
-
- snippet.append( " <releases>\n" );
- snippet.append( " <enabled>" ).append( Boolean.valueOf( repo.isReleases() ) ).append( "</enabled>\n" );
- snippet.append( " </releases>\n" );
- snippet.append( " <snapshots>\n" );
- snippet.append( " <enabled>" ).append( Boolean.valueOf( repo.isSnapshots() ) ).append( "</enabled>\n" );
- snippet.append( " </snapshots>\n" );
- snippet.append( " </repository>\n" );
- snippet.append( " </repositories>\n" );
- snippet.append( " <pluginRepositories>\n" );
- snippet.append( " <pluginRepository>\n" );
- snippet.append( " <id>" ).append( repo.getId() ).append( "</id>\n" );
- snippet.append( " <name>" ).append( repo.getName() ).append( "</name>\n" );
-
- snippet.append( " <url>" );
- snippet.append( ContextUtils.getBaseURL( pageContext, "repository" ) );
- snippet.append( "/" ).append( repo.getId() ).append( "/" );
-
- snippet.append( "</url>\n" );
-
- if ( !"default".equals( repo.getLayout() ) )
- {
- snippet.append( " <layout>" ).append( repo.getLayout() ).append( "</layout>\n" );
- }
-
- snippet.append( " <releases>\n" );
- snippet.append( " <enabled>" ).append( Boolean.valueOf( repo.isReleases() ) ).append( "</enabled>\n" );
- snippet.append( " </releases>\n" );
- snippet.append( " <snapshots>\n" );
- snippet.append( " <enabled>" ).append( Boolean.valueOf( repo.isSnapshots() ) ).append( "</enabled>\n" );
- snippet.append( " </snapshots>\n" );
- snippet.append( " </pluginRepository>\n" );
- snippet.append( " </pluginRepositories>\n" );
-
- snippet.append( " ...\n" );
- snippet.append( "</project>\n" );
- }
-}
+++ /dev/null
-package org.apache.archiva.web.tags;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import com.opensymphony.xwork2.ActionContext;
-import org.apache.archiva.common.ArchivaException;
-import org.apache.archiva.dependency.tree.maven2.DependencyTreeBuilder;
-import org.apache.archiva.model.Keys;
-import org.apache.archiva.security.ArchivaXworkUser;
-import org.apache.archiva.security.UserRepositories;
-import org.apache.commons.lang.StringUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.sonatype.aether.artifact.Artifact;
-import org.sonatype.aether.graph.DependencyNode;
-import org.sonatype.aether.graph.DependencyVisitor;
-import org.springframework.stereotype.Service;
-
-import javax.inject.Inject;
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * DependencyTree
- */
-@Service( "dependencyTree" )
-public class DependencyTree
-{
- private Logger log = LoggerFactory.getLogger( DependencyTree.class );
-
-
- @Inject
- private DependencyTreeBuilder dependencyTreeBuilder;
-
- @Inject
- private UserRepositories userRepositories;
-
- public static class TreeEntry
- {
- private String pre = "";
-
- private String post = "";
-
- private Artifact artifact;
-
- public void setArtifact( Artifact artifact )
- {
- this.artifact = artifact;
- }
-
- public Artifact getArtifact()
- {
- return artifact;
- }
-
- public String getPost()
- {
- return post;
- }
-
- public String getPre()
- {
- return pre;
- }
-
- public void appendPre( String string )
- {
- this.pre += string;
- }
-
- public void appendPost( String string )
- {
- this.post += string;
- }
- }
-
- public List<TreeEntry> gatherTreeList( String groupId, String artifactId, String modelVersion )
- throws ArchivaException
- {
- if ( StringUtils.isBlank( groupId ) )
- {
- String emsg = "Error generating dependency tree [" + Keys.toKey( groupId, artifactId, modelVersion )
- + "]: groupId is blank.";
- log.error( emsg );
- throw new ArchivaException( emsg );
- }
-
- if ( StringUtils.isBlank( artifactId ) )
- {
- String emsg = "Error generating dependency tree [" + Keys.toKey( groupId, artifactId, modelVersion )
- + "]: artifactId is blank.";
- log.error( emsg );
- throw new ArchivaException( emsg );
- }
-
- if ( StringUtils.isBlank( modelVersion ) )
- {
- String emsg = "Error generating dependency tree [" + Keys.toKey( groupId, artifactId, modelVersion )
- + "]: version is blank.";
- log.error( emsg );
- throw new ArchivaException( emsg );
- }
-
- // TODO Cache the results to disk, in XML format, in the same place as the artifact is located.
-
- TreeListVisitor visitor = new TreeListVisitor();
- try
- {
- dependencyTreeBuilder.buildDependencyTree( userRepositories.getObservableRepositoryIds( getPrincipal() ),
- groupId, artifactId, modelVersion, visitor );
- }
- catch ( Exception e )
- {
- throw new ArchivaException( "Unable to build dependency tree: " + e.getMessage(), e );
- }
-
- return visitor.getList();
- }
-
- private String getPrincipal()
- {
- return ArchivaXworkUser.getActivePrincipal( ActionContext.getContext().getSession() );
- }
-
- private static class TreeListVisitor
- implements DependencyVisitor
- {
- private List<TreeEntry> list;
-
- private TreeEntry currentEntry;
-
- boolean firstChild = true;
-
- private DependencyNode firstNode;
-
- public TreeListVisitor()
- {
- this.list = new ArrayList<TreeEntry>();
- }
-
- public List<TreeEntry> getList()
- {
- return this.list;
- }
-
- public boolean visitEnter( DependencyNode node )
- {
- if ( firstNode == null )
- {
- firstNode = node;
- }
-
- currentEntry = new TreeEntry();
-
- if ( firstChild )
- {
- currentEntry.appendPre( "<ul>" );
- }
-
- currentEntry.appendPre( "<li>" );
- currentEntry.setArtifact( node.getDependency().getArtifact() );
- currentEntry.appendPost( "</li>" );
- this.list.add( currentEntry );
-
- if ( !node.getChildren().isEmpty() )
- {
- firstChild = true;
- }
-
- return true;
- }
-
- public boolean visitLeave( org.sonatype.aether.graph.DependencyNode node )
- {
- firstChild = false;
-
- if ( !node.getChildren().isEmpty() )
- {
- currentEntry.appendPost( "</ul>" );
- }
-
- if ( node == firstNode )
- {
- currentEntry.appendPost( "</ul>" );
- }
-
- return true;
- }
-
-
- }
-}
+++ /dev/null
-package org.apache.archiva.web.tags;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import org.apache.commons.collections.CollectionUtils;
-import org.apache.commons.collections.IteratorUtils;
-import org.apache.commons.lang.StringUtils;
-import org.apache.archiva.common.ArchivaException;
-import org.apache.archiva.web.tags.DependencyTree.TreeEntry;
-import org.apache.struts2.views.annotations.StrutsTag;
-import org.apache.struts2.views.annotations.StrutsTagAttribute;
-import org.springframework.beans.BeansException;
-import org.springframework.web.context.WebApplicationContext;
-import org.springframework.web.context.support.WebApplicationContextUtils;
-
-import java.io.IOException;
-import java.io.PrintWriter;
-import java.util.Iterator;
-import java.util.List;
-
-import javax.servlet.jsp.JspException;
-import javax.servlet.jsp.PageContext;
-import javax.servlet.jsp.tagext.IterationTag;
-import javax.servlet.jsp.tagext.TagSupport;
-import javax.servlet.jsp.tagext.TryCatchFinally;
-
-/**
- * DependencyTreeTag - just here to output the dependency tree to the browser.
- * It was easier to do it this way, vs accessing the dependency graph via a JSP.
- *
- * <pre>
- * <archiva:dependency-tree groupId="org.apache.archiva"
- * artifactId="archiva-common"
- * version="1.3.5"
- * nodevar="node">
- * <b>${node.groupId}</b>:<b>${node.artifactId}</b>:<b>${node.version}</b> (${node.scope})
- * </archiva:dependency-tree>
- * </pre>
- *
- *
- */
-@StrutsTag(name = "dependency-tree", tldBodyContent = "JSP", tldTagClass = "org.apache.archiva.web.tags.DependencyTreeTag", description = "Render a dependency tree for the provided project.")
-public class DependencyTreeTag
- extends TagSupport
- implements IterationTag, TryCatchFinally
-{
- private String groupId;
-
- private String artifactId;
-
- @SuppressWarnings("unused")
- private String version;
-
- private String nodevar;
-
- private Iterator<TreeEntry> treeIterator;
-
- private List<TreeEntry> tree;
-
- private TreeEntry currentTreeEntry;
-
- private String modelVersion;
-
- public int doAfterBody()
- throws JspException
- {
- if ( currentTreeEntry != null )
- {
- out( currentTreeEntry.getPost() );
- }
-
- if ( treeIterator.hasNext() )
- {
- currentTreeEntry = treeIterator.next();
- out( currentTreeEntry.getPre() );
- exposeVariables();
- return EVAL_BODY_AGAIN;
- }
-
- out( "\n</div><!-- end of dependency-graph -->" );
-
- return SKIP_BODY;
- }
-
- public void doCatch( Throwable t )
- throws Throwable
- {
- throw t;
- }
-
- public void doFinally()
- {
- unExposeVariables();
- }
-
- @SuppressWarnings("unchecked")
- public int doStartTag()
- throws JspException
- {
- DependencyTree deptree;
- try
- {
- WebApplicationContext webApplicationContext =
- WebApplicationContextUtils.getRequiredWebApplicationContext( pageContext.getServletContext() );
-
- deptree = webApplicationContext.getBean( "dependencyTree", DependencyTree.class );
- }
- catch ( BeansException e )
- {
- throw new JspException( "Unable to lookup DependencyTree: " + e.getMessage(), e );
- }
-
- if ( deptree == null )
- {
- throw new JspException( "Unable to process dependency tree. Component not found." );
- }
-
- if ( StringUtils.isBlank( nodevar ) )
- {
- nodevar = "node";
- }
-
- out( "<div class=\"dependency-graph\">" );
- try
- {
- this.tree = deptree.gatherTreeList( groupId, artifactId, modelVersion );
-
- if ( CollectionUtils.isEmpty( this.tree ) )
- {
- return SKIP_BODY;
- }
-
- treeIterator = tree.iterator();
-
- currentTreeEntry = treeIterator.next();
- out( currentTreeEntry.getPre() );
- exposeVariables();
- }
- catch ( ArchivaException e )
- {
- treeIterator = IteratorUtils.EMPTY_LIST_ITERATOR;
-
- out("<pre>");
- e.printStackTrace( new PrintWriter( pageContext.getOut() ) );
- out("</pre>");
- }
-
- return EVAL_BODY_INCLUDE;
- }
-
- public void release()
- {
- groupId = "";
- artifactId = "";
- version = "";
- nodevar = "";
- tree = null;
- treeIterator = null;
- super.release();
- }
-
- @StrutsTagAttribute(description = "The artifactId", type = "String", defaultValue = "", required = true, rtexprvalue = true)
- public void setArtifactId( String artifactId )
- {
- this.artifactId = artifactId;
- }
-
- @StrutsTagAttribute(description = "The groupId", type = "String", defaultValue = "", required = true, rtexprvalue = true)
- public void setGroupId( String groupId )
- {
- this.groupId = groupId;
- }
-
- @StrutsTagAttribute(description = "The variable name for the node.", type = "String", defaultValue = "", required = false, rtexprvalue = true)
- public void setNodevar( String nodevar )
- {
- this.nodevar = nodevar;
- }
-
- @StrutsTagAttribute(description = "The version", type = "String", defaultValue = "", required = true, rtexprvalue = true)
- public void setVersion( String version )
- {
- this.version = version;
- }
-
- @StrutsTagAttribute(description = "The version of the project model. Used to verify the dependency graph for generic snapshots not yet in the repo.", type = "String", defaultValue = "", required = false, rtexprvalue = true)
- public void setModelVersion( String modelVersion )
- {
- this.modelVersion = modelVersion;
- }
-
- private void exposeVariables()
- throws JspException
- {
- if ( currentTreeEntry == null )
- {
- pageContext.removeAttribute( nodevar, PageContext.PAGE_SCOPE );
- }
- else
- {
- pageContext.setAttribute( nodevar, currentTreeEntry.getArtifact() );
- }
- }
-
- private void out( String msg )
- throws JspException
- {
- try
- {
- pageContext.getOut().print( msg );
- }
- catch ( IOException e )
- {
- throw new JspException( "Unable to output to jsp page context." );
- }
- }
-
- private void unExposeVariables()
- {
- pageContext.removeAttribute( nodevar, PageContext.PAGE_SCOPE );
- }
-}
+++ /dev/null
-package org.apache.archiva.web.tags;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import org.apache.taglibs.standard.tag.common.core.NullAttributeException;
-import org.apache.taglibs.standard.tag.el.core.ExpressionUtil;
-
-import javax.servlet.jsp.JspException;
-import javax.servlet.jsp.PageContext;
-import javax.servlet.jsp.tagext.Tag;
-
-/**
- * ExpressionTool
- *
- *
- */
-public class ExpressionTool
-{
- private PageContext pageContext;
-
- private Tag tag;
-
- private String tagName;
-
- public ExpressionTool( PageContext pageContext, Tag tag, String tagName )
- {
- this.pageContext = pageContext;
- this.tag = tag;
- this.tagName = tagName;
- }
-
- public boolean optionalBoolean( String propertyName, String expression, boolean defaultValue )
- throws JspException
- {
- try
- {
- Boolean ret = (Boolean) ExpressionUtil.evalNotNull( this.tagName, propertyName, expression, Boolean.class,
- this.tag, this.pageContext );
-
- if ( ret == null )
- {
- return defaultValue;
- }
-
- return ret.booleanValue();
- }
- catch ( NullAttributeException e )
- {
- return defaultValue;
- }
- }
-
- public String optionalString( String propertyName, String expression, String defaultValue )
- throws JspException
- {
- try
- {
- String ret = (String) ExpressionUtil.evalNotNull( this.tagName, propertyName, expression, String.class,
- this.tag, this.pageContext );
-
- if ( ret == null )
- {
- return defaultValue;
- }
-
- return ret;
- }
- catch ( NullAttributeException e )
- {
- return defaultValue;
- }
- }
-
- public String requiredString( String propertyName, String expression )
- throws JspException
- {
- try
- {
- String ret = (String) ExpressionUtil.evalNotNull( this.tagName, propertyName, expression, String.class,
- this.tag, this.pageContext );
- return ret;
- }
- catch ( NullAttributeException e )
- {
- String emsg = "Required " + this.tagName + " property [" + propertyName + "] is null!";
-
- log( emsg, e );
- throw new JspException( emsg );
- }
- }
-
- private void log( String msg, Throwable t )
- {
- pageContext.getServletContext().log( msg, t );
- }
-}
+++ /dev/null
-package org.apache.archiva.web.tags;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import org.apache.struts2.StrutsException;
-import org.apache.struts2.components.Component;
-
-import com.opensymphony.xwork2.util.ValueStack;
-import java.io.IOException;
-import java.io.Writer;
-import java.util.StringTokenizer;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-/**
- * GroupIdLink
- *
- *
- */
-public class GroupIdLink
- extends Component
-{
- private static final String ACTION = "browseGroup";
-
- private static final String NAMESPACE = "/";
-
- private static final boolean includeContext = true;
-
- private static final boolean encode = true;
-
- private static final String method = null;
-
- private HttpServletRequest req;
-
- private HttpServletResponse res;
-
- private String groupId;
-
- private boolean includeTop = false;
-
- public GroupIdLink( ValueStack stack, HttpServletRequest req, HttpServletResponse res )
- {
- super( stack );
- this.req = req;
- this.res = res;
- }
-
- @Override
- public boolean end( Writer writer, String body )
- {
- StringBuilder sb = new StringBuilder();
-
- sb.append( "<span class=\"groupId\">" );
-
- if ( includeTop )
- {
- sb.append( "<a href=\"" );
- sb.append( determineBrowseActionUrl() );
- sb.append( "\">[top]</a> / " ); // TODO: i18n
- }
-
- StringTokenizer tok = new StringTokenizer( groupId, "." );
- String cumulativeGroup = null;
-
- while ( tok.hasMoreTokens() )
- {
- String token = tok.nextToken();
-
- if ( cumulativeGroup == null )
- {
- cumulativeGroup = token;
- }
- else
- {
- cumulativeGroup += "." + token;
- }
- sb.append( "<a href=\"" );
- sb.append( determineBrowseGroupActionUrl( cumulativeGroup ) );
- sb.append( "\">" ).append( token ).append( "</a> / " );
- }
-
- sb.append( "</span>" );
-
- try
- {
- writer.write( sb.toString() );
- }
- catch ( IOException e )
- {
- throw new StrutsException( "IOError: " + e.getMessage(), e );
- }
-
- return super.end( writer, body );
- }
-
- private String determineBrowseActionUrl()
- {
- return determineActionURL( "browse", NAMESPACE, method, req, res, parameters, req.getScheme(), includeContext, encode, false, false );
- }
-
- @SuppressWarnings("unchecked")
- private String determineBrowseGroupActionUrl( String gid )
- {
- parameters.put( "groupId", gid );
-
- return determineActionURL( ACTION, NAMESPACE, method, req, res, parameters, req.getScheme(), includeContext, encode, false, false );
- }
-
- public String getGroupId()
- {
- return groupId;
- }
-
- public void setGroupId( String groupId )
- {
- this.groupId = groupId;
- }
-
- public boolean isIncludeTop()
- {
- return includeTop;
- }
-
- public void setIncludeTop( boolean includeTop )
- {
- this.includeTop = includeTop;
- }
-
-}
+++ /dev/null
-package org.apache.archiva.web.tags;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import com.opensymphony.xwork2.util.ValueStack;
-import org.apache.struts2.components.Component;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import javax.servlet.jsp.JspException;
-
-import org.apache.struts2.views.annotations.StrutsTag;
-import org.apache.struts2.views.annotations.StrutsTagAttribute;
-import org.apache.struts2.views.jsp.ComponentTagSupport;
-
-/**
- * GroupIdLink
- *
- *
- */
-@StrutsTag(name = "groupIdLink", tldBodyContent = "empty", tldTagClass = "org.apache.archiva.web.tags.GroupIdLinkTag", description = "Render a groupId as a set of Links")
-public class GroupIdLinkTag
- extends ComponentTagSupport
-{
- private String var_; // stores EL-based property
-
- private String var; // stores the evaluated object.
-
- private boolean includeTop = false;
-
- @Override
- public Component getBean(ValueStack valueStack, HttpServletRequest request, HttpServletResponse response) {
- return new GroupIdLink( valueStack, request, response );
- }
-
- @Override
- public void release()
- {
- var_ = null;
- var = null;
- includeTop = false;
-
- super.release();
- }
-
- @Override
- public int doEndTag()
- throws JspException
- {
- evaluateExpressions();
-
- GroupIdLink groupIdLink = (GroupIdLink)component;
-
- groupIdLink.setGroupId( var );
- groupIdLink.setIncludeTop( includeTop );
-
- return super.doEndTag();
- }
-
- private void evaluateExpressions()
- throws JspException
- {
- ExpressionTool exprTool = new ExpressionTool( pageContext, this, "groupIdLink" );
-
- var = exprTool.optionalString( "var", var_, "" );
- }
-
- @StrutsTagAttribute(description = "The GroupID String", type = "String", defaultValue = "", required = true, rtexprvalue = true)
- public void setVar( String value )
- {
- this.var_ = value;
- }
-
- @StrutsTagAttribute(description = "Boolean indicating if 'top' link should be created or not.", type = "String", defaultValue = "", required = false, rtexprvalue = true)
- public void setIncludeTop( boolean includeTop )
- {
- this.includeTop = includeTop;
- }
-}
+++ /dev/null
-package org.apache.archiva.web.util;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import org.apache.commons.lang.StringUtils;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.jsp.PageContext;
-
-/**
- * ContextUtils
- *
- *
- */
-public class ContextUtils
-{
- private static final Map<String, Integer> defaultSchemePortMap;
-
- static
- {
- defaultSchemePortMap = new HashMap<String, Integer>();
- defaultSchemePortMap.put( "http", Integer.valueOf( 80 ) );
- defaultSchemePortMap.put( "https", Integer.valueOf( 443 ) );
- }
-
- /**
- * Using the page context, get the base url.
- *
- * @param pageContext the page context to use
- * @return the base url with module name.
- */
- public static String getBaseURL( PageContext pageContext )
- {
- return getBaseURL( pageContext, null );
- }
-
- /**
- * Using the page context, get the base url and append an optional resource name to the end of the provided url.
- *
- * @param pageContext the page context to use
- * @param resource the resource name (or null if no resource name specified)
- * @return the base url with resource name.
- */
- public static String getBaseURL( PageContext pageContext, String resource )
- {
- HttpServletRequest request = (HttpServletRequest) pageContext.getRequest();
- return getBaseURL( request, resource );
- }
-
- /**
- * Using the http servlet request, get the base url and append an optional resource name to the end of the url.
- *
- * @param request the request to use
- * @param resource the resource name (or null if not resource name should be appended)
- * @return the base url with resource name.
- */
- public static String getBaseURL( HttpServletRequest request, String resource )
- {
- StringBuilder baseUrl = new StringBuilder();
-
- baseUrl.append( request.getScheme() ).append( "://" );
- baseUrl.append( getServerName( request ) );
- baseUrl.append( request.getContextPath() );
-
- if ( StringUtils.isNotBlank( resource ) )
- {
- if ( !baseUrl.toString().endsWith( "/" ) )
- {
- baseUrl.append( "/" );
- }
-
- baseUrl.append( resource );
- }
-
- return baseUrl.toString();
- }
-
- private static String getServerName( HttpServletRequest request )
- {
- String name = request.getHeader( "X-Forwarded-Host" );
- if ( name == null )
- {
- name = request.getServerName();
- int portnum = request.getServerPort();
-
- // Only add port if non-standard.
- Integer defaultPortnum = (Integer) defaultSchemePortMap.get( request.getScheme() );
- if ( ( defaultPortnum == null ) || ( defaultPortnum.intValue() != portnum ) )
- {
- name = name + ":" + String.valueOf( portnum );
- }
- return name;
- }
- else
- {
- // respect chains of proxies, return first one (as it's the outermost visible one)
- String[] hosts = name.split( "," );
- name = hosts[0].trim();
- }
- return name;
- }
-}
+++ /dev/null
-package org.apache.archiva.web.validator;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import com.opensymphony.xwork2.validator.ValidationException;
-import com.opensymphony.xwork2.validator.ValidatorContext;
-import com.opensymphony.xwork2.validator.validators.FieldValidatorSupport;
-
-/**
- * Reused from Continuum crontab validator
- */
-public class CronExpressionValidator
- extends FieldValidatorSupport
-{
- public void validate( Object obj )
- throws ValidationException
- {
- String cron = (String) getFieldValue( "cron", obj );
-
- org.apache.archiva.redback.components.scheduler.CronExpressionValidator cronExpressionValidator =
- new org.apache.archiva.redback.components.scheduler.CronExpressionValidator();
-
- ValidatorContext ctxt = getValidatorContext();
- if ( !cronExpressionValidator.validate( String.valueOf( cron ) ) )
- {
- ctxt.addActionError( "Invalid cron expression value(s)" );
- return;
- }
- }
-}
+++ /dev/null
-package org.apache.archiva.web.validator;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import com.opensymphony.xwork2.validator.ValidationException;
-import com.opensymphony.xwork2.validator.ValidatorContext;
-import com.opensymphony.xwork2.validator.validators.ValidatorSupport;
-
-/**
- */
-public class IntervalValidator
- extends ValidatorSupport
-{
-
- public void validate( Object obj )
- throws ValidationException
- {
- String snapshotsPolicy = (String) getFieldValue( "snapshotsPolicy", obj );
- String releasesPolicy = (String) getFieldValue( "releasesPolicy", obj );
- Integer snapshotsInterval = (Integer) getFieldValue( "snapshotsInterval", obj );
- Integer releasesInterval = (Integer) getFieldValue( "releasesInterval", obj );
-
- ValidatorContext ctxt = getValidatorContext();
-
- if ( !snapshotsPolicy.equals( "interval" ) )
- {
- if ( snapshotsInterval.intValue() != 0 )
- {
- ctxt.addActionError( "Snapshots Interval must be set to zero." );
- }
- }
-
- if ( !releasesPolicy.equals( "interval" ) )
- {
- if ( releasesInterval.intValue() != 0 )
- {
- ctxt.addActionError( "Releases Interval must be set to zero." );
- }
- }
-
- if ( ctxt.hasActionErrors() )
- {
- return;
- }
- }
-}
+++ /dev/null
-package org.apache.archiva.web.validator;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import com.opensymphony.xwork2.validator.ValidationException;
-import com.opensymphony.xwork2.validator.ValidatorContext;
-import com.opensymphony.xwork2.validator.validators.ValidatorSupport;
-
-/**
- * Validator for synced repository form. The values to be validated depends on the
- * selected sync method to be used.
- *
- */
-public class SyncedRepositoryValidator
- extends ValidatorSupport
-{
-
- public void validate( Object obj )
- throws ValidationException
- {
-
- String method = (String) getFieldValue( "method", obj );
- ValidatorContext ctxt = getValidatorContext();
-
- if ( method.equals( "rsync" ) )
- {
- String rsyncHost = (String) getFieldValue( "rsyncHost", obj );
- if ( rsyncHost == null || rsyncHost.equals( "" ) )
- {
- ctxt.addActionError( "Rsync host is required." );
- }
-
- String rsyncDirectory = (String) getFieldValue( "rsyncDirectory", obj );
- if ( rsyncDirectory == null || rsyncDirectory.equals( "" ) )
- {
- ctxt.addActionError( "Rsync directory is required." );
- }
-
- String rsyncMethod = (String) getFieldValue( "rsyncMethod", obj );
- if ( rsyncMethod == null || rsyncMethod.equals( "" ) )
- {
- ctxt.addActionError( "Rsync method is required." );
- }
- else
- {
- if ( !rsyncMethod.equals( "anonymous" ) && !rsyncMethod.equals( "ssh" ) )
- {
- ctxt.addActionError( "Invalid rsync method" );
- }
- }
-
- String username = (String) getFieldValue( "username", obj );
- if ( username == null || username.equals( "" ) )
- {
- ctxt.addActionError( "Username is required." );
- }
-
- }
- else if ( method.equals( "svn" ) )
- {
- String svnUrl = (String) getFieldValue( "svnUrl", obj );
- if ( svnUrl == null || svnUrl.equals( "" ) )
- {
- ctxt.addActionError( "SVN url is required." );
- }
-
- String username = (String) getFieldValue( "username", obj );
- if ( username == null || username.equals( "" ) )
- {
- ctxt.addActionError( "Username is required." );
- }
- }
- else if ( method.equals( "cvs" ) )
- {
- String cvsRoot = (String) getFieldValue( "cvsRoot", obj );
- if ( cvsRoot == null || cvsRoot.equals( "" ) )
- {
- ctxt.addActionError( "CVS root is required." );
- }
- }
- else if ( method.equals( "file" ) )
- {
- String directory = (String) getFieldValue( "directory", obj );
- if ( directory == null || directory.equals( "" ) )
- {
- ctxt.addActionError( "Directory is required." );
- }
- }
-
- if ( ctxt.hasActionErrors() )
- {
- return;
- }
- }
-
-}
+++ /dev/null
-<?xml version="1.0"?>
-
-<!--
- ~ Licensed to the Apache Software Foundation (ASF) under one
- ~ or more contributor license agreements. See the NOTICE file
- ~ distributed with this work for additional information
- ~ regarding copyright ownership. The ASF licenses this file
- ~ to you under the Apache License, Version 2.0 (the
- ~ "License"); you may not use this file except in compliance
- ~ with the License. You may obtain a copy of the License at
- ~
- ~ http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing,
- ~ software distributed under the License is distributed on an
- ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- ~ KIND, either express or implied. See the License for the
- ~ specific language governing permissions and limitations
- ~ under the License.
- -->
-<beans xmlns="http://www.springframework.org/schema/beans"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns:context="http://www.springframework.org/schema/context"
- xmlns:util="http://www.springframework.org/schema/util"
- xsi:schemaLocation="http://www.springframework.org/schema/beans
- http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
- http://www.springframework.org/schema/context
- http://www.springframework.org/schema/context/spring-context-3.0.xsd
- http://www.springframework.org/schema/util
- http://www.springframework.org/schema/util/spring-util-3.0.xsd"
- default-lazy-init="true">
-
- <context:annotation-config/>
- <context:component-scan base-package="org.apache.archiva.web"/>
-
- <bean id="jcr-repository" class="org.apache.jackrabbit.core.RepositoryImpl" destroy-method="shutdown" lazy-init="true">
- <constructor-arg ref="jcr-config"/>
- </bean>
-
- <bean id="jcr-config" class="org.apache.archiva.metadata.repository.jcr.ArchivaJcrRepositoryConfig" factory-method="create">
- <constructor-arg value="${appserver.base}/conf/repository.xml"/>
- <constructor-arg value="${appserver.base}/data/jcr"/>
- </bean>
-
-
-</beans>
\ No newline at end of file
+++ /dev/null
-<!--
- ~ Licensed to the Apache Software Foundation (ASF) under one
- ~ or more contributor license agreements. See the NOTICE file
- ~ distributed with this work for additional information
- ~ regarding copyright ownership. The ASF licenses this file
- ~ to you under the Apache License, Version 2.0 (the
- ~ "License"); you may not use this file except in compliance
- ~ with the License. You may obtain a copy of the License at
- ~
- ~ http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing,
- ~ software distributed under the License is distributed on an
- ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- ~ KIND, either express or implied. See the License for the
- ~ specific language governing permissions and limitations
- ~ under the License.
- -->
-<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
- <diskStore path="java.io.tmpdir" />
-
- <!-- make default cache very short lived -->
-
- <defaultCache
- maxElementsInMemory="100"
- maxElementsOnDisk="0"
- eternal="false"
- overflowToDisk="false"
- timeToIdleSeconds="300"
- timeToLiveSeconds="600"
- memoryStoreEvictionPolicy="LFU" />
-
- <!--
- cache Redback classes longer to avoid a lot of SQL queries
- See REDBACK-227
- -->
- <cache name="defaultJpox"
- maxElementsInMemory="10000"
- maxElementsOnDisk="0"
- eternal="false"
- overflowToDisk="false"
- timeToIdleSeconds="1800"
- timeToLiveSeconds="14400"
- memoryStoreEvictionPolicy="LFU" />
-
- <cache name="org.apache.archiva.redback.rbac.jdo.JdoOperation"
- maxElementsInMemory="10000"
- maxElementsOnDisk="0"
- eternal="false"
- overflowToDisk="false"
- timeToIdleSeconds="1800"
- timeToLiveSeconds="14400"
- memoryStoreEvictionPolicy="LFU" />
-
- <cache name="org.apache.archiva.redback.rbac.jdo.JdoPermission"
- maxElementsInMemory="10000"
- maxElementsOnDisk="0"
- eternal="false"
- overflowToDisk="false"
- timeToIdleSeconds="1800"
- timeToLiveSeconds="14400"
- memoryStoreEvictionPolicy="LFU" />
-
- <cache name="org.apache.archiva.redback.rbac.jdo.JdoResource"
- maxElementsInMemory="10000"
- maxElementsOnDisk="0"
- eternal="false"
- overflowToDisk="false"
- timeToIdleSeconds="1800"
- timeToLiveSeconds="14400"
- memoryStoreEvictionPolicy="LFU" />
-
- <cache name="org.apache.archiva.redback.rbac.jdo.JdoRole"
- maxElementsInMemory="10000"
- maxElementsOnDisk="0"
- eternal="false"
- overflowToDisk="false"
- timeToIdleSeconds="1800"
- timeToLiveSeconds="14400"
- memoryStoreEvictionPolicy="LFU" />
-
- <cache name="org.apache.archiva.redback.rbac.jdo.JdoUserAssignment"
- maxElementsInMemory="10000"
- maxElementsOnDisk="0"
- eternal="false"
- overflowToDisk="false"
- timeToIdleSeconds="300"
- timeToLiveSeconds="600"
- memoryStoreEvictionPolicy="LFU" />
-
-</ehcache>
-
+++ /dev/null
-#
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements. See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership. The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations
-# under the License.
-#
-# 1 hour
-template_update_delay=3600000
\ No newline at end of file
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8" ?>
-<!--
- ~ Licensed to the Apache Software Foundation (ASF) under one
- ~ or more contributor license agreements. See the NOTICE file
- ~ distributed with this work for additional information
- ~ regarding copyright ownership. The ASF licenses this file
- ~ to you under the Apache License, Version 2.0 (the
- ~ "License"); you may not use this file except in compliance
- ~ with the License. You may obtain a copy of the License at
- ~
- ~ http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing,
- ~ software distributed under the License is distributed on an
- ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- ~ KIND, either express or implied. See the License for the
- ~ specific language governing permissions and limitations
- ~ under the License.
- -->
-
-
-<configuration>
-
- <properties>
- <property name="logsDirectory">${sys:appserver.base}/logs</property>
- </properties>
-
- <appenders>
-
- <RollingFile name="rolling" fileName="${logsDirectory}/archiva.log"
- filePattern="${logsDirectory}/archiva-%d{MM-dd-yyyy}.log">
- <PatternLayout>
- <pattern>%d [%t] %-5p %c %x - %m%n</pattern>
- </PatternLayout>
- <Policies>
- <TimeBasedTriggeringPolicy />
- </Policies>
- </RollingFile>
-
- <RollingFile name="auditlog" fileName="${logsDirectory}/archiva-audit.log"
- filePattern="${logsDirectory}/logs/archiva-audit-%d{MM-dd-yyyy}.log">
- <PatternLayout>
- <pattern>%d{yyyy-MM-dd HH:mm:ss} %m%n</pattern>
- </PatternLayout>
- <Policies>
- <TimeBasedTriggeringPolicy />
- </Policies>
- </RollingFile>
-
- <RollingFile name="redbackAuditLog" fileName="${logsDirectory}/archiva-security-audit.log"
- filePattern="${logsDirectory}/archiva-security-audit.log-%d{MM-dd-yyyy}.log">
- <PatternLayout>
- <pattern>%d{yyyy-MM-dd HH:mm:ss} - %X{redback.currentUser} - %m%n</pattern>
- </PatternLayout>
- <Policies>
- <TimeBasedTriggeringPolicy />
- </Policies>
- </RollingFile>
-
- </appenders>
- <loggers>
-
- <logger name="org.apache.archiva.redback.struts2.action.AuditEvent" additivity="false" level="info">
- <appender-ref ref="redbackAuditLog" />
- </logger>
-
- <logger name="org.apache.archiva.AuditLog" additivity="false" level="info">
- <appender-ref ref="auditlog" />
- </logger>
-
- <!-- INFO level loggers can use the default
- <logger name="org.apache.archiva.consumers" level="info"/>
-
- <logger name="org.apache.archiva" level="info"/>
-
-
- <logger name="org.quartz" level="info"/>
-
- <logger name="org.apache.jasper" level="info"/>
-
- <logger name="com.opensymphony.xwork2" level="info"/>
-
- <logger name="org.apache.struts2" level="info"/>
-
- -->
-
- <!-- WebDav objects -->
- <logger name="org.apache.archiva.webdav.ArchivaDavResource" level="info"/>
-
-
- <logger name="org.apache.archiva.webdav.ArchivaDavResourceFactory" level="info"/>
-
-
- <!-- squelch noisy objects (for now) -->
- <logger name="org.apache.commons" level="warn"/>
-
- <logger name="net.sf.ehcache" level="warn"/>
-
-
- <!-- retained for Redback -->
- <logger name="JPOX" level="warn"/>
-
-
- <logger name="JPOX.MetaData" level="error"/>
-
-
- <logger name="JPOX.RDBMS.SQL" level="error"/>
-
-
- <logger name="SQL" level="error"/>
-
- <logger name="freemarker" level="warn"/>
-
- <logger name="org.codehaus.plexus.component.manager.ClassicSingletonComponentManager" level="error"/>
-
-
- <logger name="com.opensymphony.xwork2.ognl.OgnlValueStack" level="error"/>
-
- <logger name="org.apache.commons.configuration.DefaultConfigurationBuilder" level="error"/>
-
- <!-- debug wagon transfer -->
- <!--
- <logger name="org.apache.archiva.proxy.common" level="debug"/>
-
- -->
- <!-- apache httpclient debug content transfer verbose -->
- <!--
- <logger name="org.apache.http.wire" level="debug"/>
-
- -->
- <!-- apache httpclient log headers -->
- <!--
- <logger name="org.apache.http.headers" level="debug"/>
-
- -->
-
- <root level="info">
- <appender-ref ref="rolling"/>
- </root>
- </loggers>
-</configuration>
-
-
+++ /dev/null
-#
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements. See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership. The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations
-# under the License.
-#
-
-# text resources within redback can be customized by overriding them here
-
-#password.reset.success=An email has been sent.
-#password.reset.failure=No email was not sent, perhaps the user did not exist as entered.
+++ /dev/null
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!--
- ~ Licensed to the Apache Software Foundation (ASF) under one
- ~ or more contributor license agreements. See the NOTICE file
- ~ distributed with this work for additional information
- ~ regarding copyright ownership. The ASF licenses this file
- ~ to you under the Apache License, Version 2.0 (the
- ~ "License"); you may not use this file except in compliance
- ~ with the License. You may obtain a copy of the License at
- ~
- ~ http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing,
- ~ software distributed under the License is distributed on an
- ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- ~ KIND, either express or implied. See the License for the
- ~ specific language governing permissions and limitations
- ~ under the License.
- -->
-
-<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN"
- "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
-
-<!-- validate temporarily-trimmed inputs, actual values are then carried over to the action class to be trimmed once more. -->
-<validators>
- <field name="groupId">
- <field-validator type="requiredstring">
- <message>You must enter a groupId.</message>
- </field-validator>
- <field-validator type="regex">
- <param name="trim">true</param>
- <param name="expression">^[a-zA-Z0-9._-]+$</param>
- <message>Group id must only contain alphanumeric characters, underscores(_), dots(.), and dashes(-).</message>
- </field-validator>
- </field>
- <field name="artifactId">
- <field-validator type="requiredstring">
- <message>You must enter an artifactId.</message>
- </field-validator>
- <field-validator type="regex">
- <param name="trim">true</param>
- <param name="expression">^[a-zA-Z0-9._-]+$</param>
- <message>Artifact id must only contain alphanumeric characters, underscores(_), dots(.), and dashes(-).</message>
- </field-validator>
- </field>
- <!-- version's validation is inside the validate() method of the action class -->
- <field name="version">
- <field-validator type="requiredstring">
- <message>You must enter a version.</message>
- </field-validator>
- </field>
- <field name="repositoryId">
- <!-- no requiredstring validation, because there was none before(being consistent). -->
- <field-validator type="regex">
- <param name="trim">true</param>
- <param name="expression">^[a-zA-Z0-9._-]*$</param>
- <message>Repository id must only contain alphanumeric characters, underscores(_), dots(.), and dashes(-).</message>
- </field-validator>
- </field>
-</validators>
\ No newline at end of file
+++ /dev/null
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!--
- ~ Licensed to the Apache Software Foundation (ASF) under one
- ~ or more contributor license agreements. See the NOTICE file
- ~ distributed with this work for additional information
- ~ regarding copyright ownership. The ASF licenses this file
- ~ to you under the Apache License, Version 2.0 (the
- ~ "License"); you may not use this file except in compliance
- ~ with the License. You may obtain a copy of the License at
- ~
- ~ http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing,
- ~ software distributed under the License is distributed on an
- ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- ~ KIND, either express or implied. See the License for the
- ~ specific language governing permissions and limitations
- ~ under the License.
- -->
-
-<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN"
- "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
-
-<validators>
- <field name="q">
- <field-validator type="requiredstring">
- <message>
- You must select a file, or enter the checksum. If the file was given and you receive this message,
- there may have been an error generating the checksum.
- </message>
- </field-validator>
- </field>
-</validators>
\ No newline at end of file
+++ /dev/null
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!--
- ~ Licensed to the Apache Software Foundation (ASF) under one
- ~ or more contributor license agreements. See the NOTICE file
- ~ distributed with this work for additional information
- ~ regarding copyright ownership. The ASF licenses this file
- ~ to you under the Apache License, Version 2.0 (the
- ~ "License"); you may not use this file except in compliance
- ~ with the License. You may obtain a copy of the License at
- ~
- ~ http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing,
- ~ software distributed under the License is distributed on an
- ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- ~ KIND, either express or implied. See the License for the
- ~ specific language governing permissions and limitations
- ~ under the License.
- -->
-
-<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN"
- "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
-
-<validators>
- <field name="rowCount">
- <field-validator type="int">
- <message>Invalid entry</message>
- </field-validator>
- <field-validator type="int">
- <param name="min">1</param>
- <message>Row count must be larger than ${min}.</message>
- </field-validator>
- </field>
-</validators>
+++ /dev/null
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!--
- ~ Licensed to the Apache Software Foundation (ASF) under one
- ~ or more contributor license agreements. See the NOTICE file
- ~ distributed with this work for additional information
- ~ regarding copyright ownership. The ASF licenses this file
- ~ to you under the Apache License, Version 2.0 (the
- ~ "License"); you may not use this file except in compliance
- ~ with the License. You may obtain a copy of the License at
- ~
- ~ http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing,
- ~ software distributed under the License is distributed on an
- ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- ~ KIND, either express or implied. See the License for the
- ~ specific language governing permissions and limitations
- ~ under the License.
- -->
-
-<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN"
- "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
-
-<validators>
- <field name="q">
- <field-validator type="requiredstring">
- <message>You must enter some search terms.</message>
- </field-validator>
- </field>
-</validators>
\ No newline at end of file
+++ /dev/null
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!--
- ~ Licensed to the Apache Software Foundation (ASF) under one
- ~ or more contributor license agreements. See the NOTICE file
- ~ distributed with this work for additional information
- ~ regarding copyright ownership. The ASF licenses this file
- ~ to you under the Apache License, Version 2.0 (the
- ~ "License"); you may not use this file except in compliance
- ~ with the License. You may obtain a copy of the License at
- ~
- ~ http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing,
- ~ software distributed under the License is distributed on an
- ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- ~ KIND, either express or implied. See the License for the
- ~ specific language governing permissions and limitations
- ~ under the License.
- -->
-
-<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN"
- "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
-
-<validators>
- <field name="groupId">
- <field-validator type="requiredstring">
- <message>You must enter a groupId.</message>
- </field-validator>
- </field>
- <field name="artifactId">
- <field-validator type="requiredstring">
- <message>You must enter an artifactId.</message>
- </field-validator>
- </field>
- <field name="version">
- <field-validator type="requiredstring">
- <message>You must enter a version.</message>
- </field-validator>
- </field>
- <field name="packaging">
- <field-validator type="requiredstring">
- <message>You must enter a packaging.</message>
- </field-validator>
- </field>
-</validators>
\ No newline at end of file
+++ /dev/null
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!--
- ~ Licensed to the Apache Software Foundation (ASF) under one
- ~ or more contributor license agreements. See the NOTICE file
- ~ distributed with this work for additional information
- ~ regarding copyright ownership. The ASF licenses this file
- ~ to you under the Apache License, Version 2.0 (the
- ~ "License"); you may not use this file except in compliance
- ~ with the License. You may obtain a copy of the License at
- ~
- ~ http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing,
- ~ software distributed under the License is distributed on an
- ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- ~ KIND, either express or implied. See the License for the
- ~ specific language governing permissions and limitations
- ~ under the License.
- -->
-
-<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN"
- "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
-
-<validators>
- <field name="organisationName">
- <field-validator type="requiredstring">
- <message>You must enter a name</message>
- </field-validator>
- <field-validator type="regex">
- <param name="trim">true</param>
- <param name="expression">^([-a-zA-Z0-9._/~:?!&=\\]|\s)+$</param>
- <message>Organisation name must only contain alphanumeric characters, white-spaces(' '), equals(=), question-marks(?), exclamation-points(!), ampersands(&), forward-slashes(/), back-slashes(\), underscores(_), dots(.), colons(:), tildes(~), and dashes(-).</message>
- </field-validator>
- </field>
- <field name="organisationUrl">
- <field-validator type="url">
- <message>You must enter a URL.</message>
- </field-validator>
- </field>
- <field name="organisationLogo">
- <field-validator type="url">
- <message>You must enter a URL for your logo.</message>
- </field-validator>
- </field>
-</validators>
\ No newline at end of file
+++ /dev/null
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!--
- ~ Licensed to the Apache Software Foundation (ASF) under one
- ~ or more contributor license agreements. See the NOTICE file
- ~ distributed with this work for additional information
- ~ regarding copyright ownership. The ASF licenses this file
- ~ to you under the Apache License, Version 2.0 (the
- ~ "License"); you may not use this file except in compliance
- ~ with the License. You may obtain a copy of the License at
- ~
- ~ http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing,
- ~ software distributed under the License is distributed on an
- ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- ~ KIND, either express or implied. See the License for the
- ~ specific language governing permissions and limitations
- ~ under the License.
- -->
-
-<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN"
- "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
-
-<!-- validate temporarily-trimmed inputs, actual values are then carried over to the action class to be trimmed once more. -->
-<validators>
- <field name="legacyArtifactPath.path">
- <field-validator type="requiredstring">
- <message>You must enter a legacy path.</message>
- </field-validator>
- <field-validator type="regex">
- <param name="trim">true</param>
- <param name="expression">^[-a-zA-Z0-9._/\\]+$</param>
- <message>Legacy path must only contain alphanumeric characters, forward-slashes(/), back-slashes(\), underscores(_), dots(.), and dashes(-).</message>
- </field-validator>
- </field>
- <field name="groupId">
- <field-validator type="requiredstring">
- <message>You must enter a groupId.</message>
- </field-validator>
- <field-validator type="regex">
- <param name="trim">true</param>
- <param name="expression">^[a-zA-Z0-9._-]+$</param>
- <message>Group id must only contain alphanumeric characters, underscores(_), dots(.), and dashes(-).</message>
- </field-validator>
- </field>
- <field name="artifactId">
- <field-validator type="requiredstring">
- <message>You must enter an artifactId.</message>
- </field-validator>
- <field-validator type="regex">
- <param name="trim">true</param>
- <param name="expression">^[a-zA-Z0-9._-]+$</param>
- <message>Artifact id must only contain alphanumeric characters, underscores(_), dots(.), and dashes(-).</message>
- </field-validator>
- </field>
- <field name="version">
- <field-validator type="requiredstring">
- <message>You must enter a version.</message>
- </field-validator>
- <field-validator type="regex">
- <param name="trim">true</param>
- <param name="expression">^[a-zA-Z0-9._-]+$</param>
- <message>Version must only contain alphanumeric characters, underscores(_), dots(.), and dashes(-).</message>
- </field-validator>
- </field>
- <field name="classifier">
- <!-- no requiredstring validation, because there was none before(being consistent). -->
- <field-validator type="regex">
- <param name="trim">true</param>
- <param name="expression">^[a-zA-Z0-9._-]*$</param>
- <message>Classifier must only contain alphanumeric characters, underscores(_), dots(.), and dashes(-).</message>
- </field-validator>
- </field>
- <field name="type">
- <field-validator type="requiredstring">
- <message>You must enter a type.</message>
- </field-validator>
- <field-validator type="regex">
- <param name="trim">true</param>
- <param name="expression">^[a-zA-Z0-9._-]+$</param>
- <message>Type must only contain alphanumeric characters, underscores(_), dots(.), and dashes(-).</message>
- </field-validator>
- </field>
-</validators>
\ No newline at end of file
+++ /dev/null
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!--
- ~ Licensed to the Apache Software Foundation (ASF) under one
- ~ or more contributor license agreements. See the NOTICE file
- ~ distributed with this work for additional information
- ~ regarding copyright ownership. The ASF licenses this file
- ~ to you under the Apache License, Version 2.0 (the
- ~ "License"); you may not use this file except in compliance
- ~ with the License. You may obtain a copy of the License at
- ~
- ~ http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing,
- ~ software distributed under the License is distributed on an
- ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- ~ KIND, either express or implied. See the License for the
- ~ specific language governing permissions and limitations
- ~ under the License.
- -->
-
-<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN"
- "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
-
-<validators>
- <field name="networkConfiguration.maxTotal">
- <field-validator type="int">
- <param name="min">1</param>
- <message>maxTotal must be at least superior to ${min}.</message>
- </field-validator>
-
- </field>
-
- <field name="networkConfiguration.maxTotalPerHost">
- <field-validator type="int">
- <param name="min">1</param>
- <message>maxTotalPerHost must be at least superior to ${min}.</message>
- </field-validator>
-
- </field>
-
-</validators>
+++ /dev/null
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!--
- ~ Licensed to the Apache Software Foundation (ASF) under one
- ~ or more contributor license agreements. See the NOTICE file
- ~ distributed with this work for additional information
- ~ regarding copyright ownership. The ASF licenses this file
- ~ to you under the Apache License, Version 2.0 (the
- ~ "License"); you may not use this file except in compliance
- ~ with the License. You may obtain a copy of the License at
- ~
- ~ http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing,
- ~ software distributed under the License is distributed on an
- ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- ~ KIND, either express or implied. See the License for the
- ~ specific language governing permissions and limitations
- ~ under the License.
- -->
-
-<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN"
- "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
-
-
-
-<validators>
- <field name="proxy.id">
- <field-validator type="requiredstring">
- <param name="trim">true</param>
- <message>You must enter an identifier.</message>
- </field-validator>
- <field-validator type="stringlength">
- <param name="minLength">4</param>
- <param name="maxLength">45</param>
- <param name="trim">true</param>
- <message>You must enter an identifier of 4 or more than 4 characters.</message>
- </field-validator>
- <field-validator type="regex">
- <param name="trim">true</param>
- <param name="expression">^[a-zA-Z0-9._-]+$</param>
- <message>Proxy id must only contain alphanumeric characters, underscores(_), dots(.), and dashes(-).</message>
- </field-validator>
- </field>
- <field name="proxy.protocol">
- <field-validator type="requiredstring">
- <param name="trim">true</param>
- <message>You must enter a protocol.</message>
- </field-validator>
- <field-validator type="regex">
- <param name="trim">true</param>
- <param name="expression">^[-a-zA-Z0-9./:\\]+$</param>
- <message>Protocol must only contain alphanumeric characters, forward-slashes(/), back-slashes(\), dots(.), colons(:), and dashes(-).</message>
- </field-validator>
- </field>
- <field name="proxy.host">
- <field-validator type="requiredstring">
- <param name="trim">true</param>
- <message>You must enter a host.</message>
- </field-validator>
- <field-validator type="regex">
- <param name="trim">true</param>
- <param name="expression">^[-a-zA-Z0-9._/~:?!&=\\]+$</param>
- <message>Host must only contain alphanumeric characters, equals(=), question-marks(?), exclamation-points(!), ampersands(&), forward-slashes(/), back-slashes(\), underscores(_), dots(.), colons(:), tildes(~), and dashes(-).</message>
- </field-validator>
- </field>
- <field name="proxy.port">
- <field-validator type="required">
- <message>You must enter an port.</message>
- </field-validator>
- <field-validator type="int">
- <param name="min">1</param>
-<!-- Webwork bug renders this as 65.535
- <param name="max">65535</param>
- <message>Port needs to be between ${min} and ${max}</message>
--->
- <message>Port needs to be larger than ${min}</message>
- </field-validator>
- <field-validator type="regex">
- <param name="trim">true</param>
- <param name="expression">^[0-9]+$</param>
- <message>Port must only contain numeric characters.</message>
- </field-validator>
- </field>
- <field name="proxy.username">
- <!-- no requiredstring validation, because there was none before(being consistent). -->
- <field-validator type="regex">
- <param name="trim">true</param>
- <param name="expression">^[-a-zA-Z0-9.@/_\\]*$</param>
- <message>Username must only contain alphanumeric characters, at's(@), forward-slashes(/), back-slashes(\), underscores(_), dots(.), and dashes(-).</message>
- </field-validator>
- </field>
-</validators>
+++ /dev/null
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!--
- ~ Licensed to the Apache Software Foundation (ASF) under one
- ~ or more contributor license agreements. See the NOTICE file
- ~ distributed with this work for additional information
- ~ regarding copyright ownership. The ASF licenses this file
- ~ to you under the Apache License, Version 2.0 (the
- ~ "License"); you may not use this file except in compliance
- ~ with the License. You may obtain a copy of the License at
- ~
- ~ http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing,
- ~ software distributed under the License is distributed on an
- ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- ~ KIND, either express or implied. See the License for the
- ~ specific language governing permissions and limitations
- ~ under the License.
- -->
-
-<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN"
- "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
-
-<validators>
- <field name="repository.id">
- <field-validator type="requiredstring">
- <message>You must enter a repository identifier.</message>
- </field-validator>
- <field-validator type="regex">
- <param name="trim">true</param>
- <param name="expression">^[a-zA-Z0-9._-]+$</param>
- <message>Identifier must only contain alphanumeric characters, underscores(_), dots(.), and dashes(-).</message>
- </field-validator>
- </field>
- <field name="repository.location">
- <field-validator type="requiredstring">
- <message>You must enter a directory.</message>
- </field-validator>
- <field-validator type="regex">
- <param name="trim">true</param>
- <param name="expression">^[-a-zA-Z0-9._/~:?!&=\\]+$</param>
- <message>Directory must only contain alphanumeric characters, equals(=), question-marks(?), exclamation-points(!), ampersands(&), forward-slashes(/), back-slashes(\), underscores(_), dots(.), colons(:), tildes(~), and dashes(-).</message>
- </field-validator>
- </field>
- <field name="repository.indexDirectory">
- <!-- no requiredstring validation, because there was none before(being consistent). -->
- <field-validator type="regex">
- <param name="trim">true</param>
- <param name="expression">^[-a-zA-Z0-9._/~:?!&=\\]*$</param>
- <message>Index directory must only contain alphanumeric characters, equals(=), question-marks(?), exclamation-points(!), ampersands(&), forward-slashes(/), back-slashes(\), underscores(_), dots(.), colons(:), tildes(~), and dashes(-).</message>
- </field-validator>
- </field>
- <field name="repository.name">
- <field-validator type="requiredstring">
- <message>You must enter a repository name.</message>
- </field-validator>
- <field-validator type="regex">
- <param name="trim">true</param>
- <param name="expression">^([a-zA-Z0-9.)/_(-]|\s)+$</param>
- <message>Repository Name must only contain alphanumeric characters, white-spaces(' '), forward-slashes(/), open-parenthesis('('), close-parenthesis(')'), underscores(_), dots(.), and dashes(-).</message>
- </field-validator>
- </field>
- <field name="repository.retentionCount">
- <field-validator type="int">
- <param name="min">1</param>
- <param name="max">100</param>
- <message>Repository Purge By Retention Count needs to be between ${min} and ${max}.</message>
- </field-validator>
- </field>
- <field name="repository.daysOlder">
- <field-validator type="int">
- <param name="min">0</param>
- <message>Repository Purge By Days Older Than needs to be larger than ${min}.</message>
- </field-validator>
- </field>
- <field name="repository.cronExpression">
- <field-validator type="requiredstring">
- <message>Cron expression is required.</message>
- </field-validator>
- </field>
-</validators>
+++ /dev/null
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!--
- ~ Licensed to the Apache Software Foundation (ASF) under one
- ~ or more contributor license agreements. See the NOTICE file
- ~ distributed with this work for additional information
- ~ regarding copyright ownership. The ASF licenses this file
- ~ to you under the Apache License, Version 2.0 (the
- ~ "License"); you may not use this file except in compliance
- ~ with the License. You may obtain a copy of the License at
- ~
- ~ http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing,
- ~ software distributed under the License is distributed on an
- ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- ~ KIND, either express or implied. See the License for the
- ~ specific language governing permissions and limitations
- ~ under the License.
- -->
-
-<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN"
- "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
-
-<validators>
- <field name="repository.id">
- <field-validator type="requiredstring">
- <message>You must enter a repository identifier.</message>
- </field-validator>
- </field>
- <field name="repository.url">
- <field-validator type="requiredstring">
- <message>You must enter a url.</message>
- </field-validator>
- </field>
- <field name="repository.name">
- <field-validator type="requiredstring">
- <message>You must enter a repository name.</message>
- </field-validator>
- </field>
-</validators>
\ No newline at end of file
+++ /dev/null
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!--
- ~ Licensed to the Apache Software Foundation (ASF) under one
- ~ or more contributor license agreements. See the NOTICE file
- ~ distributed with this work for additional information
- ~ regarding copyright ownership. The ASF licenses this file
- ~ to you under the Apache License, Version 2.0 (the
- ~ "License"); you may not use this file except in compliance
- ~ with the License. You may obtain a copy of the License at
- ~
- ~ http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing,
- ~ software distributed under the License is distributed on an
- ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- ~ KIND, either express or implied. See the License for the
- ~ specific language governing permissions and limitations
- ~ under the License.
- -->
-
-<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN"
- "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
-
-<validators>
- <field name="repository.id">
- <field-validator type="requiredstring">
- <message>You must enter a repository identifier.</message>
- </field-validator>
- <field-validator type="regex">
- <param name="trim">true</param>
- <param name="expression">^[a-zA-Z0-9._-]+$</param>
- <message>Identifier must only contain alphanumeric characters, underscores(_), dots(.), and dashes(-).</message>
- </field-validator>
- </field>
- <field name="repository.location">
- <field-validator type="requiredstring">
- <message>You must enter a directory.</message>
- </field-validator>
- <field-validator type="regex">
- <param name="trim">true</param>
- <param name="expression">^[-a-zA-Z0-9._/~:?!&=\\]+$</param>
- <message>Directory must only contain alphanumeric characters, equals(=), question-marks(?), exclamation-points(!), ampersands(&), forward-slashes(/), back-slashes(\), underscores(_), dots(.), colons(:), tildes(~), and dashes(-).</message>
- </field-validator>
- </field>
- <field name="repository.indexDirectory">
- <!-- no requiredstring validation, because there was none before(being consistent). -->
- <field-validator type="regex">
- <param name="trim">true</param>
- <param name="expression">^[-a-zA-Z0-9._/~:?!&=\\]*$</param>
- <message>Index directory must only contain alphanumeric characters, equals(=), question-marks(?), exclamation-points(!), ampersands(&), forward-slashes(/), back-slashes(\), underscores(_), dots(.), colons(:), tildes(~), and dashes(-).</message>
- </field-validator>
- </field>
- <field name="repository.name">
- <field-validator type="requiredstring">
- <message>You must enter a repository name.</message>
- </field-validator>
- <field-validator type="regex">
- <param name="trim">true</param>
- <param name="expression">^([a-zA-Z0-9.)/_(-]|\s)+$</param>
- <message>Repository Name must only contain alphanumeric characters, white-spaces(' '), forward-slashes(/), open-parenthesis('('), close-parenthesis(')'), underscores(_), dots(.), and dashes(-).</message>
- </field-validator>
- </field>
- <field name="repository.retentionCount">
- <field-validator type="int">
- <param name="min">1</param>
- <param name="max">100</param>
- <message>Repository Purge By Retention Count needs to be between ${min} and ${max}.</message>
- </field-validator>
- </field>
- <field name="repository.daysOlder">
- <field-validator type="int">
- <param name="min">0</param>
- <message>Repository Purge By Days Older Than needs to be larger than ${min}.</message>
- </field-validator>
- </field>
- <field name="repository.cronExpression">
- <field-validator type="requiredstring">
- <message>Cron expression is required.</message>
- </field-validator>
- </field>
-</validators>
+++ /dev/null
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!--
- ~ Licensed to the Apache Software Foundation (ASF) under one
- ~ or more contributor license agreements. See the NOTICE file
- ~ distributed with this work for additional information
- ~ regarding copyright ownership. The ASF licenses this file
- ~ to you under the Apache License, Version 2.0 (the
- ~ "License"); you may not use this file except in compliance
- ~ with the License. You may obtain a copy of the License at
- ~
- ~ http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing,
- ~ software distributed under the License is distributed on an
- ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- ~ KIND, either express or implied. See the License for the
- ~ specific language governing permissions and limitations
- ~ under the License.
- -->
-
-<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN"
- "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
-
-<validators>
- <field name="repository.id">
- <field-validator type="requiredstring">
- <message>You must enter a repository identifier.</message>
- </field-validator>
- </field>
- <field name="repository.url">
- <field-validator type="requiredstring">
- <message>You must enter a url.</message>
- </field-validator>
- </field>
- <field name="repository.name">
- <field-validator type="requiredstring">
- <message>You must enter a repository name.</message>
- </field-validator>
- </field>
-</validators>
\ No newline at end of file
+++ /dev/null
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!--
- ~ Licensed to the Apache Software Foundation (ASF) under one
- ~ or more contributor license agreements. See the NOTICE file
- ~ distributed with this work for additional information
- ~ regarding copyright ownership. The ASF licenses this file
- ~ to you under the Apache License, Version 2.0 (the
- ~ "License"); you may not use this file except in compliance
- ~ with the License. You may obtain a copy of the License at
- ~
- ~ http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing,
- ~ software distributed under the License is distributed on an
- ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- ~ KIND, either express or implied. See the License for the
- ~ specific language governing permissions and limitations
- ~ under the License.
- -->
-
-<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN"
- "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
-
-<validators>
- <field name="repositoryGroup.id">
- <field-validator type="requiredstring">
- <message>Identifier field is required.</message>
- </field-validator>
- <field-validator type="regex">
- <param name="trim">true</param>
- <param name="expression">^[a-zA-Z0-9._-]+$</param>
- <message>Identifier must only contain alphanumeric characters, underscores(_), dots(.), and dashes(-).</message>
- </field-validator>
- </field>
-</validators>
+++ /dev/null
-#
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements. See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership. The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations
-# under the License.
-#
-
-#struts.ui.theme=jqboot
-
-# define our own action mapper here
-struts.mapper.class = org.apache.archiva.web.mapper.RepositoryActionMapper
-
-## TODO olamy check fix for https://issues.apache.org/jira/browse/WW-3460
-## upgrade of struts version or use our own hacked ObjectFactory
-struts.objectFactory = org.apache.struts2.spring.StrutsSpringObjectFactory
-struts.objectFactory.spring.autoWire = type
-
-struts.url.includeParams = none
-
-## freemarker configuration
-struts.freemarker.templatesCache=true
-struts.freemarker.mru.max.strong.size=1000
-struts.freemarker.templatesCache.updateDelay=3600000
-
-#struts.devMode = true
-struts.configuration.xml.reload=true
-struts.multipart.parser=jakarta
-# 50M default
-struts.multipart.maxSize=50485760
-
-# TODO: package up a theme and share with Continuum. Should contain everything from xhtml, and set templateDir to WEB-INF/themes
-
-# Localization
-struts.custom.i18n.resources=org.apache.archiva.redback.i18n.default,org.apache.archiva.redback.custom
+++ /dev/null
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!--
- ~ Licensed to the Apache Software Foundation (ASF) under one
- ~ or more contributor license agreements. See the NOTICE file
- ~ distributed with this work for additional information
- ~ regarding copyright ownership. The ASF licenses this file
- ~ to you under the Apache License, Version 2.0 (the
- ~ "License"); you may not use this file except in compliance
- ~ with the License. You may obtain a copy of the License at
- ~
- ~ http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing,
- ~ software distributed under the License is distributed on an
- ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- ~ KIND, either express or implied. See the License for the
- ~ specific language governing permissions and limitations
- ~ under the License.
- -->
-
-<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
- "http://struts.apache.org/dtds/struts-2.0.dtd">
-
-<struts>
-
- <constant name="struts.action.extension" value="action" />
-
- <!-- Include plexus-security xwork configurations. -->
- <include file="struts-security.xml"/>
-
- <package name="base" extends="struts-default">
- <interceptors>
- <interceptor name="configuration" class="configurationInterceptor"/>
- <interceptor name="redbackForceAdminUser" class="redbackForceAdminUserInterceptor"/>
- <interceptor name="redbackSecureActions" class="redbackSecureActionInterceptor"/>
- <interceptor name="redbackAutoLogin" class="redbackAutoLoginInterceptor"/>
- <interceptor name="redbackPolicyEnforcement" class="redbackPolicyEnforcementInterceptor"/>
- <interceptor name="paramFilter" class="com.opensymphony.xwork2.interceptor.ParameterFilterInterceptor"/>
-
- <interceptor-stack name="defaultArchivaStack">
- <interceptor-ref name="exception"/>
- <interceptor-ref name="alias"/>
- <interceptor-ref name="servletConfig"/>
- <interceptor-ref name="i18n"/>
- <interceptor-ref name="prepare"/>
- <interceptor-ref name="chain"/>
- <interceptor-ref name="debugging"/>
- <interceptor-ref name="scopedModelDriven"/>
- <interceptor-ref name="modelDriven"/>
- <interceptor-ref name="fileUpload"/>
- <interceptor-ref name="checkbox"/>
- <interceptor-ref name="multiselect"/>
- <interceptor-ref name="staticParams"/>
- <interceptor-ref name="actionMappingParams"/>
- <interceptor-ref name="params">
- <param name="excludeParams">dojo\..*,^struts\..*</param>
- <param name="acceptParamNames">[a-zA-Z0-9\-\.\]\[\(\)_'\s]+</param>
- </interceptor-ref>
- <interceptor-ref name="conversionError"/>
- <interceptor-ref name="validation">
- <param name="excludeMethods">input,back,cancel,browse</param>
- </interceptor-ref>
- <interceptor-ref name="workflow">
- <param name="excludeMethods">input,back,cancel,browse</param>
- </interceptor-ref>
- </interceptor-stack>
-
- <interceptor-stack name="configuredArchivaStack">
- <interceptor-ref name="redbackForceAdminUser"/>
- <interceptor-ref name="redbackAutoLogin"/>
- <interceptor-ref name="defaultArchivaStack"/>
- <interceptor-ref name="paramFilter">
- <param name="blocked">externalResult</param>
- </interceptor-ref>
- <interceptor-ref name="redbackSecureActions">
- <param name="enableReferrerCheck">false</param>
- </interceptor-ref>
- <interceptor-ref name="redbackPolicyEnforcement"/>
- <interceptor-ref name="tokenSession">
- <param name="excludeMethods">*</param>
- </interceptor-ref>
- <interceptor-ref name="configuration"/>
- <interceptor-ref name="validation">
- <param name="excludeMethods">input,back,cancel,browse</param>
- </interceptor-ref>
- <interceptor-ref name="workflow">
- <param name="excludeMethods">input,back,cancel,browse</param>
- </interceptor-ref>
- </interceptor-stack>
-
- <interceptor-stack name="unconfiguredArchivaStack">
- <interceptor-ref name="redbackForceAdminUser"/>
- <interceptor-ref name="redbackAutoLogin"/>
- <interceptor-ref name="defaultArchivaStack"/>
- <interceptor-ref name="redbackPolicyEnforcement"/>
- <interceptor-ref name="redbackSecureActions">
- <param name="enableReferrerCheck">false</param>
- </interceptor-ref>
- <interceptor-ref name="tokenSession">
- <param name="excludeMethods">*</param>
- </interceptor-ref>
- <interceptor-ref name="validation">
- <param name="excludeMethods">input,back,cancel,browse</param>
- </interceptor-ref>
- <interceptor-ref name="workflow">
- <param name="excludeMethods">input,back,cancel,browse</param>
- </interceptor-ref>
- </interceptor-stack>
-
- <interceptor-stack name="configuredPrepareParamsStack">
- <!-- <interceptor-ref name="prepare" /> -->
- <interceptor-ref name="params"/>
- <interceptor-ref name="configuredArchivaStack"/>
- </interceptor-stack>
- </interceptors>
-
- <!-- Default interceptor stack. -->
- <default-interceptor-ref name="configuredArchivaStack"/>
-
- <global-results>
- <!-- The following security-* result names arrive from the plexus-security package -->
-
- <result name="security-login-success" type="redirectAction">index</result>
- <result name="security-login-cancel" type="redirectAction">index</result>
- <result name="security-login-locked" type="redirectAction">
- <param name="actionName">index</param>
- <param name="infoMessage">Account Locked</param>
- </result>
- <result name="security-logout" type="redirectAction">index</result>
- <result name="requires-authentication" type="redirectAction">
- <param name="actionName">login</param>
- <param name="namespace">/security</param>
- </result>
- <result name="requires-authorization" type="redirectAction">
- <param name="actionName">login</param>
- <param name="namespace">/security</param>
- </result>
- <result name="security-register-success" type="redirectAction">
- <param name="actionName">login</param>
- <param name="namespace">/security</param>
- </result>
- <result name="security-register-cancel" type="redirectAction">
- <param name="actionName">login</param>
- <param name="namespace">/security</param>
- </result>
- <result name="security-account-success" type="redirectAction">index</result>
- <result name="security-account-cancel" type="redirectAction">
- <param name="actionName">login</param>
- <param name="namespace">/security</param>
- </result>
- <result name="security-admin-user-created" type="redirectAction">
- <param name="actionName">login</param>
- <param name="namespace">/security</param>
- </result>
- <result name="security-admin-user-needed" type="redirectAction">
- <param name="actionName">addadmin</param>
- <param name="namespace">/security</param>
- </result>
- <result name="security-must-change-password" type="redirectAction">
- <param name="actionName">password</param>
- <param name="namespace">/security</param>
- </result>
-
- <!-- Generic Catchall for those action configurations that forget to
- include a result for 'error' -->
- <result name="error">/WEB-INF/jsp/generalError.jsp</result>
- <result name="access_to_no_repos">/WEB-INF/jsp/accessToNoRepos.jsp</result>
- <result name="invalid.token">/WEB-INF/jsp/redback/invalidToken.jsp</result>
-
- </global-results>
- </package>
-
- <!-- Configuration for the default package. -->
- <package name="default" extends="base" namespace="/">
-
- <!-- This is the redirection facility for plexus-security,
- allowing plexus-security to call out from its own set of actions
- into the application webapp, using global result names. -->
- <action name="redbackRedirect" class="redback-redirect" method="redirect">
- <result type="redirectAction">browse</result>
- </action>
-
- <action name="index" class="searchAction" method="input">
- <result name="input">/WEB-INF/jsp/quickSearch.jsp</result>
- </action>
-
- <action name="filteredSearch" class="searchAction" method="filteredSearch">
- <result name="input">/WEB-INF/jsp/quickSearch.jsp</result>
- <result>/WEB-INF/jsp/results.jsp</result>
- <result name="error">/WEB-INF/jsp/quickSearch.jsp</result>
- </action>
-
- <action name="quickSearch" class="searchAction" method="quickSearch">
- <result name="input">/WEB-INF/jsp/quickSearch.jsp</result>
- <result>/WEB-INF/jsp/results.jsp</result>
- <result name="error">/WEB-INF/jsp/quickSearch.jsp</result>
- </action>
-
- <action name="findArtifact" class="searchAction" method="input">
- <result name="input">/WEB-INF/jsp/findArtifact.jsp</result>
- </action>
-
- <action name="upload" class="uploadAction" method="input">
- <result name="input">/WEB-INF/jsp/upload.jsp</result>
- <result name="error">/WEB-INF/jsp/upload.jsp</result>
- <result name="success">/WEB-INF/jsp/upload.jsp</result>
- <interceptor-ref name="configuredPrepareParamsStack"/>
- <interceptor-ref name="fileUpload"/>
- </action>
-
- <action name="deleteArtifact" class="deleteArtifactAction" method="input">
- <result name="input">/WEB-INF/jsp/deleteArtifact.jsp</result>
- <result name="error">/WEB-INF/jsp/deleteArtifact.jsp</result>
- <result name="success">/WEB-INF/jsp/deleteArtifact.jsp</result>
- <interceptor-ref name="configuredArchivaStack">
- <param name="tokenSession.includeMethods">doDelete</param>
- </interceptor-ref>
- </action>
-
- <action name="checksumSearch" class="searchAction" method="findArtifact">
- <result name="input">/WEB-INF/jsp/findArtifact.jsp</result>
- <result name="results">/WEB-INF/jsp/results.jsp</result>
- <result name="error">/WEB-INF/jsp/findArtifact.jsp</result>
- <result name="artifact" type="redirect">
- /browse/${databaseResults.get(0).getNamespace()}/${databaseResults.get(0).getProject()}/${databaseResults.get(0).getVersion()}
- </result>
- </action>
-
- <action name="browse" class="browseAction" method="browse">
- <result>/WEB-INF/jsp/browse.jsp</result>
- </action>
-
- <action name="browseGroup" class="browseAction" method="browseGroup">
- <result>/WEB-INF/jsp/browse.jsp</result>
- </action>
-
- <action name="browseArtifact" class="browseAction" method="browseArtifact">
- <result>/WEB-INF/jsp/browse.jsp</result>
- </action>
-
- <action name="showArtifact" class="showArtifactAction" method="artifact">
- <result name="error">/WEB-INF/jsp/generalError.jsp</result>
- <result name="success">/WEB-INF/jsp/showArtifact.jsp</result>
- </action>
-
- <action name="showArtifactMailingLists" class="showArtifactAction" method="mailingLists">
- <result>/WEB-INF/jsp/showArtifact.jsp</result>
- </action>
-
- <action name="showArtifactReports" class="showArtifactAction" method="reports">
- <result>/WEB-INF/jsp/showArtifact.jsp</result>
- </action>
-
- <action name="showArtifactDependencies" class="showArtifactAction" method="dependencies">
- <result>/WEB-INF/jsp/showArtifact.jsp</result>
- </action>
-
- <action name="showArtifactDependees" class="showArtifactAction" method="dependees">
- <result>/WEB-INF/jsp/showArtifact.jsp</result>
- </action>
-
- <action name="showArtifactDependencyTree" class="showArtifactAction" method="dependencyTree">
- <result>/WEB-INF/jsp/showArtifact.jsp</result>
- </action>
-
- <action name="showProjectMetadata" class="showArtifactAction" method="projectMetadata">
- <result>/WEB-INF/jsp/showArtifact.jsp</result>
- </action>
-
- <action name="addMetadataProperty" class="showArtifactAction" method="addMetadataProperty">
- <result name="input">/WEB-INF/jsp/showArtifact.jsp</result>
- <result name="success">/WEB-INF/jsp/showArtifact.jsp</result>
- </action>
-
- <action name="deleteMetadataEntry" class="showArtifactAction" method="deleteMetadataEntry">
- <result name="input">/WEB-INF/jsp/showArtifact.jsp</result>
- <result name="success">/WEB-INF/jsp/showArtifact.jsp</result>
- </action>
-
- </package>
-
- <package name="components" namespace="/components" extends="struts-default">
- <default-interceptor-ref name="basicStack"/>
- <action name="companyInfo" class="organisationInfo">
- <result>/WEB-INF/jsp/components/companyLogo.jsp</result>
- </action>
- </package>
-
- <!-- Configuration for the admin package. -->
- <package name="admin" namespace="/admin" extends="base">
-
- <action name="index" class="repositoriesAction" method="input">
- <result name="input">/WEB-INF/jsp/admin/repositories.jsp</result>
- </action>
-
- <!-- .\ REPOSITORY GROUPS \._______________________________________ -->
-
- <action name="repositoryGroups" class="repositoryGroupsAction" method="input">
- <result name="input">/WEB-INF/jsp/admin/repositoryGroups.jsp</result>
- </action>
-
- <action name="addRepositoryGroup" class="repositoryGroupsAction" method="addRepositoryGroup">
- <result name="input">/WEB-INF/jsp/admin/repositoryGroups.jsp</result>
- <result name="error">/WEB-INF/jsp/admin/repositoryGroups.jsp</result>
- <result name="success" type="redirectAction">repositoryGroups</result>
- <interceptor-ref name="configuredPrepareParamsStack">
- <param name="tokenSession.includeMethods">*</param>
- </interceptor-ref>
- </action>
-
- <action name="confirmDeleteRepositoryGroup" class="deleteRepositoryGroupAction" method="confirmDelete">
- <result name="input">/WEB-INF/jsp/admin/deleteRepositoryGroup.jsp</result>
- <interceptor-ref name="configuredPrepareParamsStack">
- <param name="tokenSession.includeMethods">*</param>
- </interceptor-ref>
- </action>
-
- <action name="deleteRepositoryGroup" class="deleteRepositoryGroupAction" method="delete">
- <result name="input">/WEB-INF/jsp/admin/deleteRepositoryGroup.jsp</result>
- <result name="error">/WEB-INF/jsp/admin/deleteRepositoryGroup.jsp</result>
- <result name="success" type="redirectAction">repositoryGroups</result>
- <interceptor-ref name="configuredPrepareParamsStack">
- <param name="tokenSession.includeMethods">*</param>
- </interceptor-ref>
- </action>
-
- <action name="addRepositoryToGroup" class="repositoryGroupsAction" method="addRepositoryToGroup">
- <result name="input">/WEB-INF/jsp/admin/repositoryGroups.jsp</result>
- <result name="error">/WEB-INF/jsp/admin/repositoryGroups.jsp</result>
- <result name="success" type="redirectAction">repositoryGroups</result>
- <interceptor-ref name="configuredPrepareParamsStack"/>
- </action>
-
- <action name="removeRepositoryFromGroup" class="repositoryGroupsAction" method="removeRepositoryFromGroup">
- <result name="input">/WEB-INF/jsp/admin/repositoryGroups.jsp</result>
- <result name="error">/WEB-INF/jsp/admin/repositoryGroups.jsp</result>
- <result name="success" type="redirectAction">repositoryGroups</result>
- <interceptor-ref name="configuredPrepareParamsStack"/>
- </action>
-
- <action name="sortDownRepositoryFromGroup" class="sortRepositoriesAction" method="sortDown">
- <result name="input">/WEB-INF/jsp/admin/repositoryGroups.jsp</result>
- <result name="error">/WEB-INF/jsp/admin/repositoryGroups.jsp</result>
- <result name="success" type="redirectAction">repositoryGroups</result>
- <interceptor-ref name="configuredPrepareParamsStack"/>
- </action>
-
- <action name="sortUpRepositoryFromGroup" class="sortRepositoriesAction" method="sortUp">
- <result name="input">/WEB-INF/jsp/admin/repositoryGroups.jsp</result>
- <result name="error">/WEB-INF/jsp/admin/repositoryGroups.jsp</result>
- <result name="success" type="redirectAction">repositoryGroups</result>
- <interceptor-ref name="configuredPrepareParamsStack"/>
- </action>
-
- <!-- .\ REPOSITORIES \.____________________________________________ -->
-
- <action name="repositories" class="repositoriesAction" method="input">
- <result name="input">/WEB-INF/jsp/admin/repositories.jsp</result>
- <result name="confirm" type="redirectAction">deleteRepository</result>
- </action>
-
- <action name="indexRepository" class="schedulerAction" method="scanRepository">
- <result type="redirectAction">repositories</result>
- </action>
-
- <action name="addRepository" class="addManagedRepositoryAction" method="input">
- <result name="input">/WEB-INF/jsp/admin/addRepository.jsp</result>
- <result name="error">/WEB-INF/jsp/admin/addRepository.jsp</result>
- <result name="confirm">/WEB-INF/jsp/admin/confirmAddRepository.jsp</result>
- <result name="success" type="redirectAction">repositories</result>
- <interceptor-ref name="configuredPrepareParamsStack"/>
- </action>
-
- <action name="editRepository" class="editManagedRepositoryAction" method="input">
- <result name="input">/WEB-INF/jsp/admin/editRepository.jsp</result>
- <result name="error">/WEB-INF/jsp/admin/editRepository.jsp</result>
- <result name="success" type="redirectAction">repositories</result>
- <result name="confirm">/WEB-INF/jsp/admin/confirmAddRepository.jsp</result>
- <interceptor-ref name="configuredPrepareParamsStack"/>
- </action>
-
- <action name="confirmDeleteRepository" class="deleteManagedRepositoryAction" method="confirmDelete">
- <result name="input">/WEB-INF/jsp/admin/deleteRepository.jsp</result>
- <interceptor-ref name="configuredPrepareParamsStack">
- <param name="tokenSession.includeMethods">*</param>
- </interceptor-ref>
- </action>
-
- <action name="deleteRepository" class="deleteManagedRepositoryAction" method="delete">
- <result name="input">/WEB-INF/jsp/admin/deleteRepository.jsp</result>
- <result name="error">/WEB-INF/jsp/admin/deleteRepository.jsp</result>
- <result name="success" type="redirectAction">repositories</result>
- <interceptor-ref name="configuredPrepareParamsStack">
- <param name="tokenSession.includeMethods">*</param>
- </interceptor-ref>
- </action>
-
- <action name="addRemoteRepository" class="addRemoteRepositoryAction" method="input">
- <result name="input">/WEB-INF/jsp/admin/addRemoteRepository.jsp</result>
- <result name="error">/WEB-INF/jsp/admin/addRemoteRepository.jsp</result>
- <result name="success" type="redirectAction">repositories</result>
- <interceptor-ref name="configuredPrepareParamsStack"/>
- </action>
-
- <action name="editRemoteRepository" class="editRemoteRepositoryAction" method="input">
- <result name="input">/WEB-INF/jsp/admin/editRemoteRepository.jsp</result>
- <result name="error">/WEB-INF/jsp/admin/editRemoteRepository.jsp</result>
- <result name="success" type="redirectAction">repositories</result>
- <interceptor-ref name="configuredPrepareParamsStack"/>
- </action>
-
- <action name="confirmDeleteRemoteRepository" class="deleteRemoteRepositoryAction" method="confirmDelete">
- <result name="input">/WEB-INF/jsp/admin/deleteRemoteRepository.jsp</result>
- <interceptor-ref name="configuredPrepareParamsStack"/>
- </action>
-
-
- <action name="merge" class="mergeAction" method="getConflicts">
- <result name="CONFLICTS">/WEB-INF/jsp/admin/mergeExcludeConflicts.jsp</result>
- <result name="success">/WEB-INF/jsp/admin/mergeResults.jsp</result>
- <interceptor-ref name="configuredPrepareParamsStack"/>
- </action>
-
- <action name="deleteRemoteRepository" class="deleteRemoteRepositoryAction" method="input">
- <result name="input">/WEB-INF/jsp/admin/deleteRemoteRepository.jsp</result>
- <result name="error">/WEB-INF/jsp/admin/deleteRemoteRepository.jsp</result>
- <result name="success" type="redirectAction">repositories</result>
- <interceptor-ref name="configuredPrepareParamsStack"/>
- </action>
-
- <!-- .\ PROXY CONNECTORS \.________________________________________ -->
-
- <action name="proxyConnectors" class="proxyConnectorsAction" method="input">
- <result name="input">/WEB-INF/jsp/admin/proxyConnectors.jsp</result>
- </action>
-
- <action name="addProxyConnector" class="addProxyConnectorAction" method="input">
- <result name="input">/WEB-INF/jsp/admin/addProxyConnector.jsp</result>
- <result name="success" type="redirectAction">proxyConnectors</result>
- <interceptor-ref name="configuredPrepareParamsStack"/>
- </action>
-
- <action name="editProxyConnector" class="editProxyConnectorAction" method="input">
- <result name="input">/WEB-INF/jsp/admin/editProxyConnector.jsp</result>
- <result name="success" type="redirectAction">proxyConnectors</result>
- <interceptor-ref name="configuredPrepareParamsStack"/>
- </action>
-
- <action name="sortUpProxyConnector" class="sortProxyConnectorsAction" method="sortUp">
- <result name="input">/WEB-INF/jsp/admin/editProxyConnector.jsp</result>
- <result name="success" type="redirectAction">proxyConnectors</result>
- <interceptor-ref name="configuredPrepareParamsStack"/>
- </action>
-
- <action name="sortDownProxyConnector" class="sortProxyConnectorsAction" method="sortDown">
- <result name="input">/WEB-INF/jsp/admin/editProxyConnector.jsp</result>
- <result name="success" type="redirectAction">proxyConnectors</result>
- <interceptor-ref name="configuredPrepareParamsStack"/>
- </action>
-
- <action name="deleteProxyConnector" class="deleteProxyConnectorAction" method="confirm">
- <result name="input">/WEB-INF/jsp/admin/deleteProxyConnector.jsp</result>
- <result name="success" type="redirectAction">proxyConnectors</result>
- <interceptor-ref name="configuredPrepareParamsStack">
- <param name="tokenSession.includeMethods">*</param>
- </interceptor-ref>
- </action>
-
- <action name="enableProxyConnector" class="enableProxyConnectorAction" method="confirm">
- <result name="input">/WEB-INF/jsp/admin/enableProxyConnector.jsp</result>
- <result name="success" type="redirectAction">proxyConnectors</result>
- <interceptor-ref name="configuredPrepareParamsStack"/>
- </action>
-
- <action name="disableProxyConnector" class="disableProxyConnectorAction" method="confirm">
- <result name="input">/WEB-INF/jsp/admin/disableProxyConnector.jsp</result>
- <result name="success" type="redirectAction">proxyConnectors</result>
- <interceptor-ref name="configuredPrepareParamsStack">
- <param name="tokenSession.includeMethods">*</param>
- </interceptor-ref>
- </action>
-
-
- <!-- .\ NETWORK PROXIES \._________________________________________ -->
-
- <action name="networkProxies" class="networkProxiesAction" method="input">
- <result name="input">/WEB-INF/jsp/admin/networkProxies.jsp</result>
- </action>
-
- <action name="addNetworkProxy" class="configureNetworkProxyAction" method="add">
- <result name="input">/WEB-INF/jsp/admin/editNetworkProxy.jsp</result>
- <result name="success" type="redirectAction">networkProxies</result>
- <interceptor-ref name="configuredPrepareParamsStack"/>
- </action>
-
- <action name="editNetworkProxy" class="configureNetworkProxyAction" method="edit">
- <result name="input">/WEB-INF/jsp/admin/editNetworkProxy.jsp</result>
- <result name="success" type="redirectAction">networkProxies</result>
- <interceptor-ref name="configuredPrepareParamsStack"/>
- </action>
-
- <action name="saveNetworkProxy" class="configureNetworkProxyAction" method="save">
- <result name="input">/WEB-INF/jsp/admin/editNetworkProxy.jsp</result>
- <result name="success" type="redirectAction">networkProxies</result>
- <interceptor-ref name="configuredPrepareParamsStack">
- <param name="tokenSession.includeMethods">*</param>
- </interceptor-ref>
- </action>
-
- <action name="deleteNetworkProxy" class="configureNetworkProxyAction" method="confirm">
- <result name="input">/WEB-INF/jsp/admin/deleteNetworkProxy.jsp</result>
- <result name="success" type="redirectAction">networkProxies</result>
- <interceptor-ref name="configuredPrepareParamsStack">
- <param name="tokenSession.includeMethods">*</param>
- </interceptor-ref>
- </action>
-
- <!-- .\ REPOSITORY SCANNING \._____________________________________ -->
-
- <action name="repositoryScanning" class="repositoryScanningAction" method="input">
- <result name="input">/WEB-INF/jsp/admin/repositoryScanning.jsp</result>
- <result name="success" type="redirectAction">
- <param name="actionName">repositoryScanning</param>
- </result>
- <interceptor-ref name="configuredArchivaStack">
- <param name="tokenSession.includeMethods">removeFiletypePattern,addFiletypePattern,updateKnownConsumers,updateInvalidConsumers</param>
- </interceptor-ref>
- </action>
-
- <!-- .\ CONFIGURATION \.___________________________________________ -->
-
- <action name="configureAppearance" class="organisationInfo">
- <result name="success">/WEB-INF/jsp/admin/appearance.jsp</result>
- </action>
-
- <action name="editAppearance" class="editOrganisationInfo" method="input">
- <result name="input">/WEB-INF/jsp/admin/editAppearance.jsp</result>
- </action>
-
- <action name="saveAppearance" class="editOrganisationInfo">
- <result name="input">/WEB-INF/jsp/admin/editAppearance.jsp</result>
- <result type="redirectAction">
- <param name="actionName">configureAppearance</param>
- <param name="namespace">/admin</param>
- </result>
- </action>
-
- <action name="systemStatus" class="systemStatus">
- <result name="success">/WEB-INF/jsp/admin/systemStatus.jsp</result>
- </action>
-
- <action name="flushCache" class="systemStatus" method="flush">
- <result name="success">/WEB-INF/jsp/admin/systemStatus.jsp</result>
- </action>
-
- <!-- .\ LEGACY SUPPORT \.__________________________________________ -->
-
- <action name="legacyArtifactPath" class="legacyArtifactPathAction" method="input">
- <result name="input">/WEB-INF/jsp/admin/legacyArtifactPath.jsp</result>
- <result name="success" type="redirectAction">
- <param name="actionName">legacyArtifactPath</param>
- </result>
- </action>
-
- <action name="addLegacyArtifactPath" class="addLegacyArtifactPathAction" method="input">
- <result name="input">/WEB-INF/jsp/admin/addLegacyArtifactPath.jsp</result>
- <result name="error">/WEB-INF/jsp/admin/addLegacyArtifactPath.jsp</result>
- <result name="success" type="redirectAction">legacyArtifactPath</result>
- <interceptor-ref name="configuredPrepareParamsStack"/>
- </action>
-
- <action name="deleteLegacyArtifactPath" class="deleteLegacyArtifactPathAction" method="delete">
- <result name="input">/WEB-INF/jsp/admin/legacyArtifactPath.jsp</result>
- <result name="error">/WEB-INF/jsp/admin/legacyArtifactPath.jsp</result>
- <result name="success" type="redirectAction">legacyArtifactPath</result>
- <interceptor-ref name="configuredPrepareParamsStack">
- <param name="tokenSession.includeMethods">*</param>
- </interceptor-ref>
- </action>
-
- <!-- .\ NETWORKCONFIGURATION SUPPORT \.__________________________________________ -->
- <action name="editNetworkConfiguration" class="networkConfigurationAction" method="edit">
- <result name="input">/WEB-INF/jsp/admin/networkConfiguration.jsp</result>
- <result name="error">/WEB-INF/jsp/admin/networkConfiguration.jsp</result>
- <interceptor-ref name="configuredPrepareParamsStack"/>
- </action>
-
- <action name="saveNetworkConfiguration" class="networkConfigurationAction" method="save">
- <result name="input">/WEB-INF/jsp/admin/networkConfiguration.jsp</result>
- <result name="error">/WEB-INF/jsp/admin/networkConfiguration.jsp</result>
- <result name="success" type="redirectAction">editNetworkConfiguration</result>
- <interceptor-ref name="configuredPrepareParamsStack">
- <param name="tokenSession.includeMethods">*</param>
- </interceptor-ref>
- </action>
-
- </package>
-
- <package name="report" namespace="/report" extends="base">
- <action name="pickReport" class="generateReport" method="input">
- <result name="input">/WEB-INF/jsp/reports/pickReport.jsp</result>
- </action>
-
- <action name="generateReport" class="generateReport">
- <result name="input">/WEB-INF/jsp/reports/pickReport.jsp</result>
- <result name="blank">/WEB-INF/jsp/reports/blankReport.jsp</result>
- <result>/WEB-INF/jsp/reports/basicReport.jsp</result>
- </action>
-
- <action name="generateStatisticsReport" class="generateReport" method="generateStatistics">
- <result name="input">/WEB-INF/jsp/reports/pickReport.jsp</result>
- <result name="blank">/WEB-INF/jsp/reports/blankReport.jsp</result>
- <result>/WEB-INF/jsp/reports/statisticsReport.jsp</result>
- </action>
-
- <!-- TODO: make report filename dynamic -->
- <action name="downloadStatsReport" class="generateReport" method="downloadStatisticsReport">
- <result name="input">/WEB-INF/jsp/reports/pickReport.jsp</result>
- <result name="blank">/WEB-INF/jsp/reports/blankReport.jsp</result>
- <result name="send-file" type="stream">
- <param name="contentType">${contentType}</param>
- <param name="contentDisposition">attachment; filename="archiva_statistics_report.csv"</param>
- </result>
- </action>
-
- <!-- audit logs -->
- <action name="queryAuditLogReport" class="viewAuditLogReport" method="input">
- <result name="input">/WEB-INF/jsp/reports/auditLogReport.jsp</result>
- </action>
-
- <action name="viewAuditLogReport" class="viewAuditLogReport">
- <result name="input">/WEB-INF/jsp/reports/auditLogReport.jsp</result>
- <result>/WEB-INF/jsp/reports/auditLogReport.jsp</result>
- </action>
-
- </package>
-</struts>
-
+++ /dev/null
-<#--
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
--->
-<#--
-START SNIPPET: supported-validators
-Only the following validators are supported:
-* required validator
-* requiredstring validator
-* stringlength validator
-* regex validator
-* email validator
-* url validator
-* int validator
-* double validator
-END SNIPPET: supported-validators
--->
-<#if ((parameters.validate?default(false) == true) && (parameters.performValidation?default(false) == true))>
-<script type="text/javascript">
- function validateForm_${parameters.id?replace('[^a-zA-Z0-9_]', '_', 'r')}() {
- form = document.getElementById("${parameters.id}");
- clearErrorMessages(form);
- clearErrorLabels(form);
-
- var errors = false;
- var continueValidation = true;
- <#list parameters.tagNames as tagName>
- <#list tag.getValidators("${tagName}") as validator>
- // field name: ${validator.fieldName}
- // validator name: ${validator.validatorType}
- if (form.elements['${validator.fieldName}']) {
- field = form.elements['${validator.fieldName}'];
- var error = "${validator.getMessage(action)?js_string}";
- <#if validator.validatorType = "required">
- if (field.value == "") {
- addError(field, error);
- errors = true;
- <#if validator.shortCircuit>continueValidation = false;</#if>
- }
- <#elseif validator.validatorType = "requiredstring">
- if (continueValidation && field.value != null && (field.value == "" || field.value.replace(/^\s+|\s+$/g,"").length == 0)) {
- addError(field, error);
- errors = true;
- <#if validator.shortCircuit>continueValidation = false;</#if>
- }
- <#elseif validator.validatorType = "stringlength">
- if (continueValidation && field.value != null) {
- var value = field.value;
- <#if validator.trim>
- //trim field value
- while (value.substring(0,1) == ' ')
- value = value.substring(1, value.length);
- while (value.substring(value.length-1, value.length) == ' ')
- value = value.substring(0, value.length-1);
- </#if>
- if ((${validator.minLength?c} > -1 && value.length < ${validator.minLength?c}) ||
- (${validator.maxLength?c} > -1 && value.length > ${validator.maxLength?c})) {
- addError(field, error);
- errors = true;
- <#if validator.shortCircuit>continueValidation = false;</#if>
- }
- }
- <#elseif validator.validatorType = "regex">
- if (continueValidation && field.value != null && !field.value.match("${validator.expression?js_string}")) {
- addError(field, error);
- errors = true;
- <#if validator.shortCircuit>continueValidation = false;</#if>
- }
- <#elseif validator.validatorType = "email">
- if (continueValidation && field.value != null && field.value.length > 0 && field.value.match(/\b(^[_A-Za-z0-9-]+(\.[_A-Za-z0-9-]+)*@([A-Za-z0-9-])+(\.[A-Za-z0-9-]+)*((\.[A-Za-z0-9]{2,})|(\.[A-Za-z0-9]{2,}\.[A-Za-z0-9]{2,}))$)\b/gi)==null) {
- addError(field, error);
- errors = true;
- <#if validator.shortCircuit>continueValidation = false;</#if>
- }
- <#elseif validator.validatorType = "url">
- if (continueValidation && field.value != null && field.value.length > 0 && field.value.match(/^(ftp|http|https):\/\/((%[A-F0-9]{2}|[A-Z0-9-._~!$&'()*+,;=:])+@)?((%[A-F0-9]{2}|[A-Z0-9-._~!$&'()*+,;=])+)(:[0-9]+)?((\/(%[A-F0-9]{2}|[A-Z0-9-._~!$&'()*+,;=:@])*)*)(\?(%[A-F0-9]{2}|[A-Z0-9-._~!$&'()*+,;=:@/?])*)?(#(%[A-F0-9]{2}|[A-Z0-9-._~!$&'()*+,;=:@/?])*)?$/gi)==null) {
- addError(field, error);
- errors = true;
- <#if validator.shortCircuit>continueValidation = false;</#if>
- }
- <#elseif validator.validatorType = "int">
- if (continueValidation && field.value != null) {
- if (<#if validator.min??>parseInt(field.value) <
- ${validator.min?c}<#else>false</#if> ||
- <#if validator.max??>parseInt(field.value) >
- ${validator.max?c}<#else>false</#if>) {
- addError(field, error);
- errors = true;
- <#if validator.shortCircuit>continueValidation = false;</#if>
- }
- }
- <#elseif validator.validatorType = "double">
- if (continueValidation && field.value != null) {
- var value = parseFloat(field.value);
- if (<#if validator.minInclusive??>value < ${validator.minInclusive}<#else>false</#if> ||
- <#if validator.maxInclusive??>value > ${validator.maxInclusive}<#else>false</#if> ||
- <#if validator.minExclusive??>value <= ${validator.minExclusive}<#else>false</#if> ||
- <#if validator.maxExclusive??>value >= ${validator.maxExclusive}<#else>false</#if>) {
- addError(field, error);
- errors = true;
- <#if validator.shortCircuit>continueValidation = false;</#if>
- }
- }
- </#if>
- }
- </#list>
- </#list>
-
- return !errors;
- }
-</script>
-</#if>
+++ /dev/null
-<?xml version="1.0" encoding="ISO-8859-1"?>
-
-<!DOCTYPE validators PUBLIC
- "-//OpenSymphony Group//XWork Validator Config 1.0//EN"
- "http://www.opensymphony.com/xwork/xwork-validator-config-1.0.dtd">
-
-<!--
- ~ Licensed to the Apache Software Foundation (ASF) under one
- ~ or more contributor license agreements. See the NOTICE file
- ~ distributed with this work for additional information
- ~ regarding copyright ownership. The ASF licenses this file
- ~ to you under the Apache License, Version 2.0 (the
- ~ "License"); you may not use this file except in compliance
- ~ with the License. You may obtain a copy of the License at
- ~
- ~ http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing,
- ~ software distributed under the License is distributed on an
- ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- ~ KIND, either express or implied. See the License for the
- ~ specific language governing permissions and limitations
- ~ under the License.
- -->
-
-<validators>
- <validator name="required" class="com.opensymphony.xwork2.validator.validators.RequiredFieldValidator"/>
- <validator name="requiredstring" class="com.opensymphony.xwork2.validator.validators.RequiredStringValidator"/>
- <validator name="int" class="com.opensymphony.xwork2.validator.validators.IntRangeFieldValidator"/>
- <validator name="double" class="com.opensymphony.xwork2.validator.validators.DoubleRangeFieldValidator"/>
- <validator name="date" class="com.opensymphony.xwork2.validator.validators.DateRangeFieldValidator"/>
- <validator name="expression" class="com.opensymphony.xwork2.validator.validators.ExpressionValidator"/>
- <validator name="fieldexpression" class="com.opensymphony.xwork2.validator.validators.FieldExpressionValidator"/>
- <validator name="email" class="com.opensymphony.xwork2.validator.validators.EmailValidator"/>
- <validator name="url" class="com.opensymphony.xwork2.validator.validators.URLValidator"/>
- <validator name="visitor" class="com.opensymphony.xwork2.validator.validators.VisitorFieldValidator"/>
- <validator name="conversion" class="com.opensymphony.xwork2.validator.validators.ConversionErrorFieldValidator"/>
- <validator name="stringlength" class="com.opensymphony.xwork2.validator.validators.StringLengthFieldValidator"/>
- <validator name="regex" class="com.opensymphony.xwork2.validator.validators.RegexFieldValidator"/>
- <validator name="interval" class="org.apache.archiva.web.validator.IntervalValidator"/>
- <validator name="syncedrepo" class="org.apache.archiva.web.validator.SyncedRepositoryValidator"/>
- <validator name="crontab" class="org.apache.archiva.web.validator.CronExpressionValidator"/>
-</validators>
-
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- ~ Licensed to the Apache Software Foundation (ASF) under one
- ~ or more contributor license agreements. See the NOTICE file
- ~ distributed with this work for additional information
- ~ regarding copyright ownership. The ASF licenses this file
- ~ to you under the Apache License, Version 2.0 (the
- ~ "License"); you may not use this file except in compliance
- ~ with the License. You may obtain a copy of the License at
- ~
- ~ http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing,
- ~ software distributed under the License is distributed on an
- ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- ~ KIND, either express or implied. See the License for the
- ~ specific language governing permissions and limitations
- ~ under the License.
- -->
-<beans xmlns="http://www.springframework.org/schema/beans"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns:context="http://www.springframework.org/schema/context"
- xmlns:task="http://www.springframework.org/schema/task"
- xsi:schemaLocation="http://www.springframework.org/schema/beans
- http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
- http://www.springframework.org/schema/context
- http://www.springframework.org/schema/context/spring-context-3.0.xsd
- http://www.springframework.org/schema/task
- http://www.springframework.org/schema/task/spring-task-3.0.xsd">
-
- <context:property-placeholder location="classpath:application.properties"/>
-
- <bean id="loggerManager" class="org.codehaus.plexus.logging.slf4j.Slf4jLoggerManager"
- init-method="initialize"/>
-
- <!-- only here to cleanup temp indexes for groups increase number if use for something else -->
- <task:executor id="springExecutor" pool-size="2"/>
- <task:scheduler id="springScheduler" pool-size="2"/>
- <task:annotation-driven executor="springExecutor" scheduler="springScheduler"/>
-
- <!--
- TODO olamy check user agent used in wagon !!
- <bean name="wagon#http" class="org.apache.maven.wagon.providers.http.LightweightHttpWagon" scope="prototype">
- <property name="httpHeaders">
- <map>
- <entry key="User-Agent" value="${user.agent}"/>
- </map>
- </property>
- </bean>
-
- <bean name="wagon#https" class="org.apache.maven.wagon.providers.http.LightweightHttpsWagon" scope="prototype">
- <property name="httpHeaders">
- <map>
- <entry key="User-Agent" value="${user.agent}"/>
- </map>
- </property>
- </bean>
- -->
-
-
-
-
- <alias name="repositoryStatisticsManager#default" alias="repositoryStatisticsManager"/>
- <!-- TODO olamy need to find a more dynamic way if using jcr impl -->
- <alias name="repositorySessionFactory#jcr" alias="repositorySessionFactory"/>
-
- <bean id="mailSession" class="org.springframework.jndi.JndiObjectFactoryBean">
- <property name="jndiName" value="java:comp/env/mail/Session">
- </property>
- </bean>
-
- <bean name="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
- <property name="session" ref="mailSession"/>
- </bean>
-
- <!-- START SNIPPET: configuration-files-list -->
- <bean name="commons-configuration" class="org.apache.archiva.redback.components.registry.commons.CommonsConfigurationRegistry">
- <property name="properties">
- <value>
- <![CDATA[
- <configuration>
- <system/>
- <jndi prefix="java:comp/env" config-optional="true"/>
- <xml fileName="${user.home}/.m2/archiva.xml" config-optional="true"
- config-name="org.apache.archiva.user"
- config-at="org.apache.archiva"/>
- <xml fileName="${user.home}/.m2/shared.xml" config-optional="true"
- config-name="org.apache.maven.shared.app.user" config-at="org.apache.maven.shared.app"
- config-forceCreate="true"/>
- <properties fileName="${user.home}/.m2/security.properties" config-optional="true"
- config-at="org.apache.archiva.redback"/>
- <properties fileName="${user.home}/.m2/archiva.properties" config-optional="true"
- config-at="org.apache.archiva.redback"/>
- <xml fileName="${appserver.base}/conf/archiva.xml" config-optional="true"
- config-name="org.apache.archiva.base"
- config-at="org.apache.archiva"/>
- <xml fileName="${appserver.base}/conf/shared.xml" config-optional="true"
- config-name="org.apache.maven.shared.app.base" config-at="org.apache.maven.shared.app"/>
- <xml fileName="${appserver.base}/conf/common.xml" config-optional="true"/>
- <properties fileName="${appserver.base}/conf/security.properties" config-optional="true"
- config-at="org.apache.archiva.redback"/>
- <xml fileName="${appserver.home}/conf/archiva.xml" config-optional="true"
- config-at="org.apache.archiva"/>
- <xml fileName="${appserver.home}/conf/shared.xml" config-optional="true"
- config-at="org.apache.maven.shared.app"/>
- <xml fileName="${appserver.home}/conf/common.xml" config-optional="true"/>
- <properties fileName="${appserver.home}/conf/security.properties" config-optional="true"
- config-at="org.apache.archiva.redback"/>
- <properties fileName="org/apache/archiva/security.properties" config-at="org.apache.archiva.redback"/>
- </configuration>
- ]]>
- </value>
- </property>
- </bean>
- <!-- END SNIPPET: configuration-files-list -->
-
- <bean name="jdoFactory#users" class="org.apache.archiva.redback.components.jdo.DataSourceConfigurableJdoFactory">
- <property name="connectionFactoryName" value="java:comp/env/jdbc/users"/>
- <property name="shutdownConnectionFactoryName" value="java:comp/env/jdbc/usersShutdown"/>
- <property name="persistenceManagerFactoryClass" value="org.jpox.PersistenceManagerFactoryImpl"/>
- <property name="otherProperties">
- <props>
- <prop key="org.jpox.autoCreateSchema">true</prop>
- <prop key="org.jpox.validateTables">false</prop>
- <prop key="org.jpox.validateConstraints">false</prop>
- <prop key="org.jpox.validateColumns">false</prop>
- <prop key="org.jpox.autoStartMechanism">None</prop>
- <prop key="org.jpox.transactionIsolation">READ_COMMITTED</prop>
- <prop key="org.jpox.poid.transactionIsolation">READ_COMMITTED</prop>
- <prop key="org.jpox.rdbms.dateTimezone">JDK_DEFAULT_TIMEZONE</prop>
- <!-- NEEDED FOR MYSQL UTF-8 Databases -->
- <prop key="org.jpox.rdbms.stringDefaultLength">255</prop>
-
- <!-- NEEDED FOR POSTGRES, But causes problems in other JDBC implementations.
- <prop key="org.jpox.identifier.case">PreserveCase</prop>
- -->
-
- <!-- cache activation -->
- <prop key="org.jpox.cache.level2">true</prop>
- <prop key="org.jpox.cache.level2.type">ehcacheclassbased</prop>
- <prop key="org.jpox.cache.level2.cacheName">defaultJpox</prop>
- <prop key="org.jpox.cache.level2.configurationFile">/ehcache.xml</prop>
- </props>
- </property>
- </bean>
-
-
- <bean name="scheduler" class="org.apache.archiva.redback.components.scheduler.DefaultScheduler">
- <property name="properties">
- <props>
- <prop key="org.quartz.scheduler.instanceName">scheduler1</prop>
- <prop key="org.quartz.threadPool.class">org.quartz.simpl.SimpleThreadPool</prop>
- <prop key="org.quartz.threadPool.threadCount">2</prop>
- <prop key="org.quartz.threadPool.threadPriority">4</prop>
- <prop key="org.quartz.jobStore.class">org.quartz.simpl.RAMJobStore</prop>
- </props>
- </property>
- </bean>
-
-
-
- <!-- <component>
- <role>org.apache.archiva.webdav.util.MimeTypes</role>
- <implementation>org.apache.archiva.webdav.util.MimeTypes</implementation>
- <description>MimeTypes</description>
- <configuration>
- <resource>archiva-mime-types.txt</resource>
- </configuration>
- </component> -->
-
-
- <!--
- olamy TODO check if necessary !!
- PLXREDBACK-81 bad role hint, redefining here until redback alpha-2 is released.
-
- <component>
- <role>org.apache.archiva.redback.system.check.EnvironmentCheck</role>
- <role-hint>locked-admin-check</role-hint>
- <implementation>org.apache.archiva.redback.integration.checks.security.LockedAdminEnvironmentCheck</implementation>
- <description>LockedAdminEnvironmentCheck: checks if accounts marked as system administrator are locked
- and unlocks them on startup.
- </description>
- <requirements>
- <requirement>
- <role>org.apache.archiva.redback.users.UserManager</role>
- <role-hint>cached</role-hint>
- <field-name>userManager</field-name>
- </requirement>
- <requirement>
- <role>org.apache.archiva.redback.rbac.RBACManager</role>
- <role-hint>cached</role-hint>
- <field-name>rbacManager</field-name>
- </requirement>
- </requirements>
- </component>
- -->
-
- <!-- TODO move to spring sample and test it -->
- <!-- START SNIPPET: ldap -->
- <!--
- Ldap Authentication can be enabled by setting enabling these components and setting the following configuration options in your security.properties file
-
- ============================================================
- user.manager.impl=ldap
- ldap.bind.authenticator.enabled=true
- redback.default.admin=admin
- security.policy.password.expiration.enabled=false
-
- ldap.config.hostname=ldap.hostname
- ldap.config.port=389
- ldap.config.base.dn=o=com
- ldap.config.context.factory=com.sun.jndi.ldap.LdapCtxFactory
- ldap.config.bind.dn=uid=myusername,o=com
- ldap.config.password=s3cr3t
- #ldap.config.authentication.method=
- ============================================================
-
- * ldap.config.hostname - The hostname of the ldap server
- * ldap.config.port - The port of the ldap server
- * ldap.config.base.dn - The baseDn of the ldap system
- * ldap.config.context.factory - context factory for ldap connections
- * ldap.config.bind.dn - the core user used for authentication the ldap server, must be able to perform the necessary searches, etc.
- * ldap.config.password - password for the bindDn for the root ldap connection
-
- until this process is better documented, the following is the document for configuration ldap with redback
-
- http://redback.codehaus.org/integration/ldap.html
- -->
-
- <!--
-
- this component manages the connection to the ldap server
- -->
-
- <!--
- <bean name="ldapConnectionFactory" class="org.apache.archiva.redback.common.ldap.connection.ConfigurableLdapConnectionFactory">
- <property name="userConf" ref="userConfiguration"/>
- </bean>
- -->
-
-
- <!--
-
- this component manages the mapping of attributes in ldap to user information in redback. To configure the mapping, you can add the following properties in your security.properties
-
- ============================================================
- ldap.config.mapper.attribute.email=mail
- ldap.config.mapper.attribute.fullname=givenName
- ldap.config.mapper.attribute.password=userPassword
- ldap.config.mapper.attribute.user.id=cn
- ldap.config.mapper.attribute.user.base.dn=
- ldap.config.mapper.attribute.user.object.class=inetOrgPerson
- ldap.config.mapper.attribute.user.filter=(attributeName=value)
- ============================================================
-
-
- * email-attribute - The name of the attribute on a user that contains the email address
- * full-name-attribute - The name of the attribute on a user that contains the users fullName
- * password-attribute - The name of the attribute containing the users password, used for the authentiction using the user manager and not the ldap bind authenticator
- * user-id-attribute - The name of the attribute containing the users userId, most commonly cn or sn.
- * user-base-dn - The base dn that will be subtree searched for users.
- * user-object-class - the objectClass used in the ldap server for indentifying users, most commonly inetOrgPerson.
- -->
-
- <!--
- <bean name="ldapUserMapper" class="org.apache.archiva.redback.common.ldap.LdapUserMapper">
- <property name="emailAttribute" value="email"/>
- <property name="fullNameAttribute" value="givenName"/>
- <property name="passwordAttribute" value="userPassword"/>
- <property name="userIdAttribute" value="cn"/>
- <property name="userBaseDn" value="o=com"/>
- <property name="userObjectClass" value="inetOrgPerson"/>
- <property name="userConf" ref="userConfiguration"/>
- </bean>
- -->
-
-
-
- <!--
-
- If caching is desired to improve performance then make uncomment this and make sure the following configuration parameter is in the security.properties
-
- user.manager.impl=cached
- -->
-
- <!--
- <bean name="userManager#cached" class="org.apache.archiva.redback.users.cached.CachedUserManager">
- <property name="userImpl" ref="userMapper#ldap"/>
- <property name="usersCache" ref="cache#users"/>
- </bean>
- -->
-
-
-
- <!--
-
- if using the user manager authenticator to authenticate the user and not the ldap bind authenticator make sure
- this definition has the correct password encoder
-
- Note: you should probably just use the ldap bind authenticator which is enabled by putting
-
- ldap.bind.authenticator.enabled=true
-
- in the security.properties
- -->
- <!--
- <bean name="userSecurityPolicy" class="org.apache.archiva.redback.policy.DefaultUserSecurityPolicy">
- <property name="config" ref="userConfiguration"/>
- <property name="passwordEncoder" ref="passwordEncoder#sha1"/>
- <property name="userValidationSettings" ref="userValidationSettings"/>
- <property name="rememberMeCookieSettings" ref="cookieSettings#rememberMe"/>
- <property name="signonCookieSettings" ref="cookieSettings#signon"/>
- <property name="rules">
- add the rules you want to applied
- <list>
- <ref bean="passwordRule#alpha-count"/>
- <ref bean="passwordRule#alpha-numeric"/>
- <ref bean="passwordRule#character-length"/>
- <ref bean="passwordRule#must-have"/>
- <ref bean="passwordRule#no-whitespaces"/>
- <ref bean="passwordRule#numerical-count"/>
- </list>
- </property>
- </bean>
- -->
- <!-- END SNIPPET: ldap -->
- <!-- override jcr repository location -->
- <!-- START SNIPPET: jcr-location -->
- <!--
- <bean id="jcr-config" class="org.apache.archiva.metadata.repository.jcr.ArchivaJcrRepositoryConfig" factory-method="create">
- <constructor-arg value="${appserver.base}/conf/repository.xml"/>
- <constructor-arg value="${appserver.base}/data/jcr"/>
- </bean>
- -->
- <!-- END SNIPPET: jcr-location -->
-
-</beans>
+++ /dev/null
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!--
- ~ Licensed to the Apache Software Foundation (ASF) under one
- ~ or more contributor license agreements. See the NOTICE file
- ~ distributed with this work for additional information
- ~ regarding copyright ownership. The ASF licenses this file
- ~ to you under the Apache License, Version 2.0 (the
- ~ "License"); you may not use this file except in compliance
- ~ with the License. You may obtain a copy of the License at
- ~
- ~ http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing,
- ~ software distributed under the License is distributed on an
- ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- ~ KIND, either express or implied. See the License for the
- ~ specific language governing permissions and limitations
- ~ under the License.
- -->
-
-<decorators defaultdir="/WEB-INF/jsp/decorators">
- <excludes>
- <pattern>/repository/*</pattern>
- <pattern>/components/*</pattern>
- <pattern>/restServices/*</pattern>
- </excludes>
-
- <decorator name="default" page="default.jsp">
- <pattern>/*</pattern>
- </decorator>
-</decorators>
\ No newline at end of file
+++ /dev/null
-<%--
- ~ Licensed to the Apache Software Foundation (ASF) under one
- ~ or more contributor license agreements. See the NOTICE file
- ~ distributed with this work for additional information
- ~ regarding copyright ownership. The ASF licenses this file
- ~ to you under the Apache License, Version 2.0 (the
- ~ "License"); you may not use this file except in compliance
- ~ with the License. You may obtain a copy of the License at
- ~
- ~ http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing,
- ~ software distributed under the License is distributed on an
- ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- ~ KIND, either express or implied. See the License for the
- ~ specific language governing permissions and limitations
- ~ under the License.
- --%>
-
-<%@ page contentType="text/html; charset=UTF-8" %>
-<%@ taglib prefix="s" uri="/struts-tags" %>
-<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
-
-<html>
-<head>
- <title>You do not have access to any repository</title>
- <s:head/>
-</head>
-
-<body>
-
-<div id="contentArea">
-
- <div id="results">
- You do not have access to any repositories.
- Please contact your system administrator to request access.
- </div>
-
-</div>
-
-<div class="clear">
- <hr/>
-</div>
-
-</body>
-
-</html>
+++ /dev/null
-<%--
- ~ Licensed to the Apache Software Foundation (ASF) under one
- ~ or more contributor license agreements. See the NOTICE file
- ~ distributed with this work for additional information
- ~ regarding copyright ownership. The ASF licenses this file
- ~ to you under the Apache License, Version 2.0 (the
- ~ "License"); you may not use this file except in compliance
- ~ with the License. You may obtain a copy of the License at
- ~
- ~ http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing,
- ~ software distributed under the License is distributed on an
- ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- ~ KIND, either express or implied. See the License for the
- ~ specific language governing permissions and limitations
- ~ under the License.
- --%>
-
-<%@ page contentType="text/html; charset=UTF-8" %>
-<%@ taglib prefix="s" uri="/struts-tags" %>
-
-<html>
-<head>
- <title>Admin: Add Legacy Artifact Path</title>
- <s:head/>
-</head>
-
-<body>
-
-<h1>Admin: Add Legacy Artifact Path</h1>
-
-<div id="contentArea">
-
- <p>
- Enter the legacy path to map to a particular artifact reference, then adjust the fields as necessary.
- </p>
-
- <script type="text/javascript">
- function parse( path )
- {
- var group = path.indexOf( "/" );
- if ( group > 0 )
- {
- document.getElementById( "addLegacyArtifactPath_groupId" ).value
- = path.substring( 0, group );
- group += 1;
- var type = path.indexOf( "/", group );
- if ( type > 0 )
- {
- document.getElementById( "addLegacyArtifactPath_type" ).value
- = path.substring( group, type - 1 );
- }
- type += 1;
- var version = path.indexOf( "-", type );
- var ext = path.lastIndexOf( "." );
- if ( version > 0 )
- {
- document.getElementById( "addLegacyArtifactPath_artifactId" ).value
- = path.substring( type, version );
- document.getElementById( "addLegacyArtifactPath_version" ).value
- = path.substring( version + 1, ext );
- }
-
- }
- }
- </script>
-
- <%-- changed the structure of displaying errorMessages & actionMessages in order for them to be escaped. --%>
- <s:if test="hasActionErrors()">
- <ul>
- <s:iterator value="actionErrors">
- <li><span class="errorMessage"><s:property escape="true" /></span></li>
- </s:iterator>
- </ul>
- </s:if>
- <s:if test="hasActionMessages()">
- <ul>
- <s:iterator value="actionMessages">
- <li><span class="actionMessage"><s:property escape="true" /></span></li>
- </s:iterator>
- </ul>
- </s:if>
-
- <s:form method="post" action="addLegacyArtifactPath!commit" namespace="/admin" validate="true">
- <s:textfield name="legacyArtifactPath.path" label="Path" size="50" required="true" onchange="parse( this.value )"/>
- <s:textfield name="groupId" label="GroupId" size="20" required="true"/>
- <s:textfield name="artifactId" label="ArtifactId" size="20" required="true"/>
- <s:textfield name="version" label="Version" size="20" required="true"/>
- <s:textfield name="classifier" label="Classifier" size="20" required="false"/>
- <s:textfield name="type" label="Type" size="20" required="true"/>
- <s:submit value="Add Legacy Artifact Path"/>
- </s:form>
-
- <script type="text/javascript">
- var ref = document.getElementById("addLegacyArtifactPath_legacyArtifactPath_artifact").value;
- var i = ref.indexOf( ":" );
- document.getElementById("addLegacyArtifactPath_groupId").value = ref.substring( 0, i );
- var j = i + 1;
- var i = ref.indexOf( ":", j );
- document.getElementById("addLegacyArtifactPath_artifactId").value = ref.substring( j, i );
- var j = i + 1;
- var i = ref.indexOf( ":", j );
- document.getElementById("addLegacyArtifactPath_version").value = ref.substring( j, i );
- var j = i + 1;
- var i = ref.indexOf( ":", j );
- document.getElementById("addLegacyArtifactPath_classifier").value = ref.substring( j, i );
-
- document.getElementById("addLegacyArtifactPath_legacyArtifactPath_path").focus();
- </script>
-
-</div>
-
-</body>
-</html>
+++ /dev/null
-<%--
- ~ Licensed to the Apache Software Foundation (ASF) under one
- ~ or more contributor license agreements. See the NOTICE file
- ~ distributed with this work for additional information
- ~ regarding copyright ownership. The ASF licenses this file
- ~ to you under the Apache License, Version 2.0 (the
- ~ "License"); you may not use this file except in compliance
- ~ with the License. You may obtain a copy of the License at
- ~
- ~ http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing,
- ~ software distributed under the License is distributed on an
- ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- ~ KIND, either express or implied. See the License for the
- ~ specific language governing permissions and limitations
- ~ under the License.
- --%>
-
-<%@ page contentType="text/html; charset=UTF-8" %>
-<%@ taglib prefix="s" uri="/struts-tags" %>
-
-<html>
-<head>
- <title>Admin: Add Proxy Connector</title>
- <s:head/>
-</head>
-
-<body>
-
-<h1>Admin: Add Proxy Connector</h1>
-
-<div id="contentArea">
-
- <s:actionerror/>
- <s:actionmessage/>
-
- <s:form name="saveProxyConnector" method="post" action="addProxyConnector!commit" namespace="/admin" validate="true">
- <%@ include file="/WEB-INF/jsp/admin/include/proxyConnectorForm.jspf" %>
- <s:submit value="Add Proxy Connector"/>
- </s:form>
-
-</div>
-
-</body>
-</html>
+++ /dev/null
-<%--
- ~ Licensed to the Apache Software Foundation (ASF) under one
- ~ or more contributor license agreements. See the NOTICE file
- ~ distributed with this work for additional information
- ~ regarding copyright ownership. The ASF licenses this file
- ~ to you under the Apache License, Version 2.0 (the
- ~ "License"); you may not use this file except in compliance
- ~ with the License. You may obtain a copy of the License at
- ~
- ~ http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing,
- ~ software distributed under the License is distributed on an
- ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- ~ KIND, either express or implied. See the License for the
- ~ specific language governing permissions and limitations
- ~ under the License.
- --%>
-
-<%@ page contentType="text/html; charset=UTF-8" %>
-<%@ taglib prefix="s" uri="/struts-tags" %>
-
-<html>
-<head>
- <title>Admin: Add Remote Repository</title>
- <s:head/>
-</head>
-
-<body>
-
-<h1>Admin: Add Remote Repository</h1>
-
-<div id="contentArea">
-
- <s:actionmessage/>
- <s:form method="post" action="addRemoteRepository!commit" namespace="/admin" validate="true">
- <s:textfield name="repository.id" label="Identifier" size="10" required="true"/>
- <%@ include file="/WEB-INF/jsp/admin/include/remoteRepositoryForm.jspf" %>
- <s:submit value="Add Repository"/>
- </s:form>
-
- <script type="text/javascript">
- document.getElementById("addRemoteRepository_id").focus();
- </script>
-
-</div>
-
-</body>
-</html>
+++ /dev/null
-<%--
- ~ Licensed to the Apache Software Foundation (ASF) under one
- ~ or more contributor license agreements. See the NOTICE file
- ~ distributed with this work for additional information
- ~ regarding copyright ownership. The ASF licenses this file
- ~ to you under the Apache License, Version 2.0 (the
- ~ "License"); you may not use this file except in compliance
- ~ with the License. You may obtain a copy of the License at
- ~
- ~ http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing,
- ~ software distributed under the License is distributed on an
- ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- ~ KIND, either express or implied. See the License for the
- ~ specific language governing permissions and limitations
- ~ under the License.
- --%>
-
-<%@ page contentType="text/html; charset=UTF-8" %>
-<%@ taglib prefix="s" uri="/struts-tags" %>
-
-<html>
-<head>
- <title>Admin: Add Managed Repository</title>
- <s:head/>
-</head>
-
-<body>
-
-<h1>Admin: Add Managed Repository</h1>
-
-<div id="contentArea">
- <%-- changed the structure of displaying errorMessages & actionMessages in order for them to be escaped. --%>
- <s:if test="hasActionErrors()">
- <ul>
- <s:iterator value="actionErrors">
- <li><span class="errorMessage"><s:property escape="true" /></span></li>
- </s:iterator>
- </ul>
- </s:if>
- <s:if test="hasActionMessages()">
- <ul>
- <s:iterator value="actionMessages">
- <li><span class="actionMessage"><s:property escape="true" /></span></li>
- </s:iterator>
- </ul>
- </s:if>
- <s:form method="post" action="addRepository!commit" namespace="/admin" validate="true">
- <s:textfield name="repository.id" label="Identifier" size="10" required="true"/>
- <%@ include file="/WEB-INF/jsp/admin/include/repositoryForm.jspf" %>
- <s:checkbox name="stageNeeded" value="stageNeeded" label="Create stage repository"/>
- <s:submit value="Add Repository"/>
- </s:form>
-
- <script type="text/javascript">
- document.getElementById("addRepository_repository_id").focus();
- </script>
-
-</div>
-
-</body>
-</html>
+++ /dev/null
-<%--
- ~ Licensed to the Apache Software Foundation (ASF) under one
- ~ or more contributor license agreements. See the NOTICE file
- ~ distributed with this work for additional information
- ~ regarding copyright ownership. The ASF licenses this file
- ~ to you under the Apache License, Version 2.0 (the
- ~ "License"); you may not use this file except in compliance
- ~ with the License. You may obtain a copy of the License at
- ~
- ~ http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing,
- ~ software distributed under the License is distributed on an
- ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- ~ KIND, either express or implied. See the License for the
- ~ specific language governing permissions and limitations
- ~ under the License.
- --%>
-
-<%@ page contentType="text/html; charset=UTF-8" %>
-<%@ taglib prefix="s" uri="/struts-tags" %>
-<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
-
-<html>
-<head>
- <title>Configure Appearance</title>
- <s:head/>
-</head>
-
-<body>
-<h1>Appearance</h1>
-
-<div style="float: right">
- <a href="<s:url action='editAppearance' />">Edit</a>
-</div>
-<h2>Organization Details</h2>
-
-<p>
- The logo in the top right of the screen is controlled by the following settings.
- <a href="<s:url action='editAppearance' />">Change your appearance</a>
-</p>
-
-<%-- used c:out in displaying EL's so that they are escaped --%>
-<h3>Organization Information</h3>
-<table>
- <tr>
- <th>Name</th>
- <td><c:out value="${organisationName}" /></td>
- </tr>
- <tr>
- <th>URL</th>
- <td><a href='<c:out value="${organisationUrl}" />'>
- <code><c:out value="${organisationUrl}" /></code>
- </a></td>
- </tr>
- <tr>
- <th>Logo URL</th>
- <td>
- <code><c:out value="${organisationLogo}" /></code>
- </td>
- </tr>
- <c:if test="${!empty (organisationLogo)}">
- <tr>
- <th> </th>
- <td><img src='<c:out value="${organisationLogo}" />'
- title='<c:out value="${organisationName}" />' border="0" alt="" /></td>
- </tr>
- </c:if>
-</table>
-</body>
-</html>
+++ /dev/null
-<%--
- ~ Licensed to the Apache Software Foundation (ASF) under one
- ~ or more contributor license agreements. See the NOTICE file
- ~ distributed with this work for additional information
- ~ regarding copyright ownership. The ASF licenses this file
- ~ to you under the Apache License, Version 2.0 (the
- ~ "License"); you may not use this file except in compliance
- ~ with the License. You may obtain a copy of the License at
- ~
- ~ http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing,
- ~ software distributed under the License is distributed on an
- ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- ~ KIND, either express or implied. See the License for the
- ~ specific language governing permissions and limitations
- ~ under the License.
- --%>
-
-<%@ page contentType="text/html; charset=UTF-8" %>
-<%@ taglib prefix="s" uri="/struts-tags" %>
-<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
-
-<html>
-<head>
- <title>Admin: Add Managed Repository</title>
- <s:head/>
-</head>
-
-<body>
-
-<h1>Admin: Add Managed Repository</h1>
-
- <div class="warningbox">
- <p>
- <strong>WARNING: Repository location already exists.</strong>
- </p>
- </div>
-
- <p>
- Are you sure you want to
- <c:choose>
- <c:when test="${action == 'addRepository'}">add</c:when>
- <c:otherwise>update</c:otherwise>
- </c:choose>
- the following managed repository?
- </p>
-
- <%-- used c:out in displaying EL's so that they are escaped --%>
- <div class="infobox">
- <table class="infotable">
- <tr>
- <td>ID:</td>
- <td><code><c:out value="${repository.id}" /></code></td>
- </tr>
- <tr>
- <td>Name:</td>
- <td><c:out value="${repository.name}" /></td>
- </tr>
- <tr>
- <td>Directory:</td>
- <td><c:out value="${repository.location}" /></td>
- </tr>
- <tr>
- <td>Index Directory:</td>
- <td><c:out value="${repository.indexDirectory}" /></td>
- </tr>
- <tr>
- <td>Type:</td>
- <%--td>${repository.layout}</td--%>
- <td>
- <c:choose>
- <c:when test="${repository.layout == 'default'}">
- Maven 2.x Repository
- </c:when>
- <c:otherwise>
- Maven 1.x Repository
- </c:otherwise>
- </c:choose>
- </td>
- </tr>
- <tr>
- <td>Cron:</td>
- <td><c:out value="${repository.cronExpression}" /></td>
- </tr>
- <tr>
- <td>Repository Purge By Days Older Than:</td>
- <td><c:out value="${repository.daysOlder}" /></td>
- </tr>
- <tr>
- <td>Repository Purge By Retention Count:</td>
- <td><c:out value="${repository.retentionCount}" /></td>
- </tr>
- <tr>
- <td>Releases Included:</td>
- <td class="${repository.releases ? 'donemark' : 'errormark'} booleanIcon">
- </tr>
- <tr>
- <td>Snapshots Included:</td>
- <td class="${repository.snapshots ? 'donemark' : 'errormark'} booleanIcon">
- </tr>
- <tr>
- <td>Scannable:</td>
- <td class="${repository.scanned ? 'donemark' : 'errormark'} booleanIcon">
- </tr>
- <tr>
- <td>Delete Released Snapshots:</td>
- <td class="${repository.deleteReleasedSnapshots ? 'donemark' : 'errormark'} booleanIcon">
- </tr>
- </table>
- </div>
-
- <s:form method="post" action="%{action}" namespace="/admin" validate="true" theme="simple">
- <div class="buttons">
- <s:hidden name="repository.id" value="%{#attr.repository.id}"/>
- <s:hidden name="repository.name" value="%{#attr.repository.name}"/>
- <s:hidden name="repository.location" value="%{#attr.repository.location}"/>
- <s:hidden name="repository.indexDir" value="%{#attr.repository.indexDirectory}"/>
- <s:hidden name="repository.layout" value="%{#attr.repository.layout}"/>
- <s:hidden name="repository.cronExpression" value="%{#attr.repository.cronExpression}"/>
- <s:hidden name="repository.daysOlder" value="%{#attr.repository.daysOlder}"/>
- <s:hidden name="repository.retentionCount" value="%{#attr.repository.retentionCount}"/>
- <s:hidden name="repository.releases" value="%{#attr.repository.releases}"/>
- <s:hidden name="repository.snapshots" value="%{#attr.repository.snapshots}"/>
- <s:hidden name="repository.scanned" value="%{#attr.repository.scanned}"/>
- <s:hidden name="repository.deleteReleasedSnapshots" value="%{#attr.repository.deleteReleasedSnapshots}"/>
-
- <c:choose>
- <c:when test="${action == 'addRepository'}">
- <s:submit value="Save" method="confirmAdd"/>
- </c:when>
- <c:otherwise>
- <s:submit value="Save" method="confirmUpdate"/>
- </c:otherwise>
- </c:choose>
-
- <s:submit value="Cancel" method="execute"/>
- </div>
- </s:form>
-
-</body>
-</html>
+++ /dev/null
-<%--
- ~ Licensed to the Apache Software Foundation (ASF) under one
- ~ or more contributor license agreements. See the NOTICE file
- ~ distributed with this work for additional information
- ~ regarding copyright ownership. The ASF licenses this file
- ~ to you under the Apache License, Version 2.0 (the
- ~ "License"); you may not use this file except in compliance
- ~ with the License. You may obtain a copy of the License at
- ~
- ~ http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing,
- ~ software distributed under the License is distributed on an
- ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- ~ KIND, either express or implied. See the License for the
- ~ specific language governing permissions and limitations
- ~ under the License.
- --%>
-
-<%@ page contentType="text/html; charset=UTF-8" %>
-<%@ taglib prefix="s" uri="/struts-tags" %>
-<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
-
-<html>
-<head>
- <title>Admin: Delete Network Proxy</title>
- <s:head/>
-</head>
-
-<body>
-
-<h1>Admin: Delete Network Proxy</h1>
-
- <%-- changed the structure of displaying errorMessages in order for them to be escaped. --%>
- <s:if test="hasActionErrors()">
- <ul>
- <s:iterator value="actionErrors">
- <li><span class="errorMessage"><s:property escape="true" /></span></li>
- </s:iterator>
- </ul>
- </s:if>
-
-<div id="contentArea">
-
- <h2>Delete Network Proxy</h2>
-
- <blockquote>
- <strong><span class="statusFailed">WARNING:</span> This operation can not be undone.</strong>
- </blockquote>
- <%-- used c:out in displaying EL's for them to be escaped. --%>
- <p>
- Are you sure you want to delete network proxy <code><c:out value="${proxyid}" /></code> ?
- </p>
-
- <s:form method="post" action="deleteNetworkProxy!delete" namespace="/admin" validate="true">
- <s:hidden name="proxyid"/>
- <s:token/>
- <s:submit value="Delete"/>
- </s:form>
-</div>
-
-</body>
-</html>
\ No newline at end of file
+++ /dev/null
-<%--
- ~ Licensed to the Apache Software Foundation (ASF) under one
- ~ or more contributor license agreements. See the NOTICE file
- ~ distributed with this work for additional information
- ~ regarding copyright ownership. The ASF licenses this file
- ~ to you under the Apache License, Version 2.0 (the
- ~ "License"); you may not use this file except in compliance
- ~ with the License. You may obtain a copy of the License at
- ~
- ~ http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing,
- ~ software distributed under the License is distributed on an
- ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- ~ KIND, either express or implied. See the License for the
- ~ specific language governing permissions and limitations
- ~ under the License.
- --%>
-
-<%@ page contentType="text/html; charset=UTF-8" %>
-<%@ taglib prefix="s" uri="/struts-tags" %>
-
-<html>
-<head>
- <title>Admin: Delete Proxy Connector</title>
- <s:head/>
-</head>
-
-<body>
-
-<h1>Admin: Delete Proxy Connector</h1>
-
-<s:actionerror/>
-
-<div id="contentArea">
-
- <h2>Delete Proxy Connector</h2>
-
- <blockquote>
- <strong><span class="statusFailed">WARNING:</span> This operation can not be undone.</strong>
- </blockquote>
-
- <p>
- Are you sure you want to delete proxy connector <code>[ ${source} , ${target} ]</code> ?
- </p>
-
- <s:form method="post" action="deleteProxyConnector!delete" namespace="/admin" validate="true">
- <s:hidden name="target"/>
- <s:hidden name="source"/>
- <s:token/>
- <s:submit value="Delete"/>
- </s:form>
-</div>
-
-</body>
-</html>
\ No newline at end of file
+++ /dev/null
-<%--
- ~ Licensed to the Apache Software Foundation (ASF) under one
- ~ or more contributor license agreements. See the NOTICE file
- ~ distributed with this work for additional information
- ~ regarding copyright ownership. The ASF licenses this file
- ~ to you under the Apache License, Version 2.0 (the
- ~ "License"); you may not use this file except in compliance
- ~ with the License. You may obtain a copy of the License at
- ~
- ~ http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing,
- ~ software distributed under the License is distributed on an
- ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- ~ KIND, either express or implied. See the License for the
- ~ specific language governing permissions and limitations
- ~ under the License.
- --%>
-
-<%@ page contentType="text/html; charset=UTF-8" %>
-<%@ taglib prefix="s" uri="/struts-tags" %>
-
-<html>
-<head>
- <title>Admin: Delete Remote Repository</title>
- <s:head/>
-</head>
-
-<body>
-
-<h1>Admin: Delete Remote Repository</h1>
-
-<s:actionerror/>
-
-<div id="contentArea">
-
- <div class="warningbox">
- <p>
- <strong>WARNING: This operation can not be undone.</strong>
- </p>
- </div>
-
- <p>
- Are you sure you want to delete the following remote repository?
- </p>
-
- <div class="infobox">
- <table class="infotable">
- <tr>
- <td>ID:</td>
- <td><code>${repository.id}</code></td>
- </tr>
- <tr>
- <td>Name:</td>
- <td>${repository.name}</td>
- </tr>
- <tr>
- <td>URL:</td>
- <td><a href="${repository.url}">${repository.url}</a></td>
- </tr>
- </table>
- </div>
-
- <s:form method="post" action="deleteRemoteRepository" namespace="/admin" validate="true" theme="simple">
- <s:hidden name="repoid"/>
- <div class="buttons">
- <s:submit value="Confirm" method="delete"/>
- <s:submit value="Cancel" method="execute"/>
- </div>
- </s:form>
-</div>
-
-</body>
-</html>
\ No newline at end of file
+++ /dev/null
-<%--
- ~ Licensed to the Apache Software Foundation (ASF) under one
- ~ or more contributor license agreements. See the NOTICE file
- ~ distributed with this work for additional information
- ~ regarding copyright ownership. The ASF licenses this file
- ~ to you under the Apache License, Version 2.0 (the
- ~ "License"); you may not use this file except in compliance
- ~ with the License. You may obtain a copy of the License at
- ~
- ~ http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing,
- ~ software distributed under the License is distributed on an
- ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- ~ KIND, either express or implied. See the License for the
- ~ specific language governing permissions and limitations
- ~ under the License.
- --%>
-
-<%@ page contentType="text/html; charset=UTF-8" %>
-<%@ taglib prefix="s" uri="/struts-tags" %>
-<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
-
-<html>
-<head>
- <title>Admin: Delete Managed Repository</title>
- <s:head/>
-</head>
-
-<body>
-
-<h1>Admin: Delete Managed Repository</h1>
-
-<%-- changed the structure of displaying errorMessages in order for them to be escaped. --%>
-<s:if test="hasActionErrors()">
- <ul>
- <s:iterator value="actionErrors">
- <li><span class="errorMessage"><s:property escape="true" /></span></li>
- </s:iterator>
- </ul>
-</s:if>
-
-<div id="contentArea">
-
- <div class="warningbox">
- <p>
- <strong>WARNING: This operation can not be undone.</strong>
- </p>
- </div>
-
- <p>
- Are you sure you want to delete the following managed repository?
- </p>
-
- <%-- used c:out in displaying EL's so that they are escaped --%>
- <div class="infobox">
- <table class="infotable">
- <tr>
- <td>ID:</td>
- <td><code><c:out value="${repository.id}" /></code></td>
- </tr>
- <tr>
- <td>Name:</td>
- <td><c:out value="${repository.name}" /></td>
- </tr>
- <tr>
- <td>Directory:</td>
- <td><c:out value="${repository.location}" /></td>
- </tr>
- </table>
- </div>
-
- <s:form method="post" action="deleteRepository" namespace="/admin" validate="true" theme="simple">
- <s:hidden name="repoid"/>
- <s:token/>
- <div class="buttons">
- <s:submit value="Delete Configuration Only" method="deleteEntry" />
- <s:submit value="Delete Configuration and Contents" method="deleteContents" />
- <s:submit value="Cancel" method="execute"/>
- </div>
- </s:form>
-</div>
-
-</body>
-</html>
\ No newline at end of file
+++ /dev/null
-<%--
- ~ Licensed to the Apache Software Foundation (ASF) under one
- ~ or more contributor license agreements. See the NOTICE file
- ~ distributed with this work for additional information
- ~ regarding copyright ownership. The ASF licenses this file
- ~ to you under the Apache License, Version 2.0 (the
- ~ "License"); you may not use this file except in compliance
- ~ with the License. You may obtain a copy of the License at
- ~
- ~ http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing,
- ~ software distributed under the License is distributed on an
- ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- ~ KIND, either express or implied. See the License for the
- ~ specific language governing permissions and limitations
- ~ under the License.
- --%>
-
-<%@ page contentType="text/html; charset=UTF-8" %>
-<%@ taglib prefix="s" uri="/struts-tags" %>
-
-<html>
-<head>
- <title>Admin: Delete Repository Group</title>
- <s:head/>
-</head>
-
-<body>
-
-<h1>Admin: Delete Repository Group</h1>
-
-<s:actionerror/>
-
-<div id="contentArea">
-
- <div class="warningbox">
- <p>
- <strong>WARNING: This operation can not be undone.</strong>
- </p>
- </div>
-
- <p>
- Are you sure you want to delete the following repository group?
- </p>
-
- <div class="infobox">
- <table class="infotable">
- <tr>
- <td>ID:</td>
- <td><code>${repositoryGroup.id}</code></td>
- </tr>
- </table>
- </div>
-
- <s:form method="post" action="deleteRepositoryGroup" namespace="/admin" validate="true" theme="simple">
- <s:hidden name="repoGroupId"/>
- <div class="buttons">
- <s:token/>
- <s:submit value="Confirm" method="delete"/>
- <s:submit value="Cancel" method="execute"/>
- </div>
- </s:form>
-</div>
-
-</body>
-</html>
\ No newline at end of file
+++ /dev/null
-<%--
- ~ Licensed to the Apache Software Foundation (ASF) under one
- ~ or more contributor license agreements. See the NOTICE file
- ~ distributed with this work for additional information
- ~ regarding copyright ownership. The ASF licenses this file
- ~ to you under the Apache License, Version 2.0 (the
- ~ "License"); you may not use this file except in compliance
- ~ with the License. You may obtain a copy of the License at
- ~
- ~ http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing,
- ~ software distributed under the License is distributed on an
- ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- ~ KIND, either express or implied. See the License for the
- ~ specific language governing permissions and limitations
- ~ under the License.
- --%>
-
-<%@ page contentType="text/html; charset=UTF-8" %>
-<%@ taglib prefix="s" uri="/struts-tags" %>
-
-<html>
-<head>
- <title>Admin: Disable Proxy Connector</title>
- <s:head/>
-</head>
-
-<body>
-
-<h1>Admin: Disable Proxy Connector</h1>
-
-<s:actionerror/>
-
-<div id="contentArea">
-
- <h2>Disable Proxy Connector</h2>
-
- <p>
- Are you sure you want to disable proxy connector <code>[ ${source} , ${target} ]</code> ?
- </p>
-
- <s:form method="post" action="disableProxyConnector!disable" namespace="/admin" validate="true">
- <s:hidden name="target"/>
- <s:hidden name="source"/>
- <s:token/>
- <s:submit value="Disable"/>
- </s:form>
-</div>
-
-</body>
-</html>
\ No newline at end of file
+++ /dev/null
-<%--
- ~ Licensed to the Apache Software Foundation (ASF) under one
- ~ or more contributor license agreements. See the NOTICE file
- ~ distributed with this work for additional information
- ~ regarding copyright ownership. The ASF licenses this file
- ~ to you under the Apache License, Version 2.0 (the
- ~ "License"); you may not use this file except in compliance
- ~ with the License. You may obtain a copy of the License at
- ~
- ~ http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing,
- ~ software distributed under the License is distributed on an
- ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- ~ KIND, either express or implied. See the License for the
- ~ specific language governing permissions and limitations
- ~ under the License.
- --%>
-
-<%@ page contentType="text/html; charset=UTF-8" %>
-<%@ taglib prefix="s" uri="/struts-tags" %>
-<html>
-<head>
- <title>Configure Appearance</title>
- <s:head/>
-</head>
-
-<body>
-<h1>Appearance</h1>
-
-<h2>Organization Details</h2>
-
-<p>
- Enter the details of your organization below.
-</p>
-
-<s:set name="editOrganisationInfo" value="editOrganisationInfo"/>
-<%-- changed the structure of displaying actionMessages in order for them to be escaped. --%>
-<s:if test="hasActionMessages()">
- <ul>
- <s:iterator value="actionMessages">
- <li><span class="actionMessage"><s:property escape="true" /></span></li>
- </s:iterator>
- </ul>
-</s:if>
-<s:form method="post" action="saveAppearance" namespace="/admin" validate="true" theme="xhtml">
- <s:textfield name="organisationName" value="%{#attr.organisationName}" label="Name" size="50" />
- <s:textfield name="organisationUrl" value="%{#attr.organisationUrl}" label="URL" size="50"/>
- <s:textfield name="organisationLogo" value="%{#attr.organisationLogo}" label="Logo URL" size="50" />
- <s:submit value="Save"/>
-</s:form>
-</body>
-
-</html>
+++ /dev/null
-<%--
- ~ Licensed to the Apache Software Foundation (ASF) under one
- ~ or more contributor license agreements. See the NOTICE file
- ~ distributed with this work for additional information
- ~ regarding copyright ownership. The ASF licenses this file
- ~ to you under the Apache License, Version 2.0 (the
- ~ "License"); you may not use this file except in compliance
- ~ with the License. You may obtain a copy of the License at
- ~
- ~ http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing,
- ~ software distributed under the License is distributed on an
- ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- ~ KIND, either express or implied. See the License for the
- ~ specific language governing permissions and limitations
- ~ under the License.
- --%>
-
-<%@ page contentType="text/html; charset=UTF-8" %>
-<%@ taglib prefix="s" uri="/struts-tags" %>
-<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
-
-<c:choose>
- <c:when test="${mode == 'edit'}">
- <c:set var="addedit" value="Edit" />
- <c:set var="networkProxyName" value="${proxy.id}" />
- </c:when>
- <c:otherwise>
- <c:set var="addedit" value="Add" />
- </c:otherwise>
-</c:choose>
-
-<html>
-<head>
- <title>Admin: ${addedit} Network Proxy</title>
- <s:head/>
-</head>
-
-<body>
-
-<h1>Admin: ${addedit} Network Proxy</h1>
-
-<div id="contentArea">
-
- <h2>${addedit} network proxy: <c:out value="${networkProxyName}" /></h2>
-
- <%-- changed the structure of displaying errorMessages & actionMessages in order for them to be escaped. --%>
- <s:if test="hasActionErrors()">
- <ul>
- <s:iterator value="actionErrors">
- <li><span class="errorMessage"><s:property escape="true" /></span></li>
- </s:iterator>
- </ul>
- </s:if>
- <s:if test="hasActionMessages()">
- <ul>
- <s:iterator value="actionMessages">
- <li><span class="actionMessage"><s:property escape="true" /></span></li>
- </s:iterator>
- </ul>
- </s:if>
-
- <s:form method="post" action="saveNetworkProxy" namespace="/admin">
- <s:hidden name="mode"/>
- <s:token/>
-
- <c:choose>
- <c:when test="${mode == 'edit'}">
- <s:hidden name="proxy.id"/>
- </c:when>
- <c:otherwise>
- <s:textfield name="proxy.id" label="Identifier" size="10" required="true"/>
- </c:otherwise>
- </c:choose>
-
- <%@ include file="/WEB-INF/jsp/admin/include/networkProxyForm.jspf" %>
- <s:submit value="Save Network Proxy"/>
- </s:form>
-
- <script type="text/javascript">
- document.getElementById("saveNetworkProxy_host").focus();
- </script>
-
-</div>
-
-</body>
-</html>
+++ /dev/null
-<%--
- ~ Licensed to the Apache Software Foundation (ASF) under one
- ~ or more contributor license agreements. See the NOTICE file
- ~ distributed with this work for additional information
- ~ regarding copyright ownership. The ASF licenses this file
- ~ to you under the Apache License, Version 2.0 (the
- ~ "License"); you may not use this file except in compliance
- ~ with the License. You may obtain a copy of the License at
- ~
- ~ http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing,
- ~ software distributed under the License is distributed on an
- ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- ~ KIND, either express or implied. See the License for the
- ~ specific language governing permissions and limitations
- ~ under the License.
- --%>
-
-<%@ page contentType="text/html; charset=UTF-8" %>
-<%@ taglib prefix="s" uri="/struts-tags" %>
-<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
-
-<html>
-<head>
- <title>Admin : Edit Proxy Connector</title>
- <s:head/>
-</head>
-
-<body>
-
-<h1>Admin : Edit Proxy Connector</h1>
-
-<div id="contentArea">
-
- <s:actionerror/>
- <s:actionmessage/>
-
- <s:form name="saveProxyConnector" method="post" action="editProxyConnector!commit" namespace="/admin" validate="true">
- <%@ include file="/WEB-INF/jsp/admin/include/proxyConnectorForm.jspf" %>
- <s:submit value="Save Proxy Connector"/>
- </s:form>
-
-</div>
-
-</body>
-</html>
\ No newline at end of file
+++ /dev/null
-<%--
- ~ Licensed to the Apache Software Foundation (ASF) under one
- ~ or more contributor license agreements. See the NOTICE file
- ~ distributed with this work for additional information
- ~ regarding copyright ownership. The ASF licenses this file
- ~ to you under the Apache License, Version 2.0 (the
- ~ "License"); you may not use this file except in compliance
- ~ with the License. You may obtain a copy of the License at
- ~
- ~ http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing,
- ~ software distributed under the License is distributed on an
- ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- ~ KIND, either express or implied. See the License for the
- ~ specific language governing permissions and limitations
- ~ under the License.
- --%>
-
-<%@ page contentType="text/html; charset=UTF-8" %>
-<%@ taglib prefix="s" uri="/struts-tags" %>
-<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
-<%@ taglib prefix="redback" uri="/redback/taglib-1.0" %>
-
-<html>
-<head>
- <title>Admin: Edit Remote Repository</title>
- <s:head/>
- <script type="text/javascript" src="<c:url value='/js/jquery-1.6.1.min.js'/>"></script>
-</head>
-
-<body>
-
-<h1>Admin: Edit Remote Repository</h1>
-
-<s:actionerror/>
-
-<div id="contentArea">
-
- <s:actionmessage/>
- <s:form method="post" action="editRemoteRepository!commit" namespace="/admin" validate="false">
- <s:hidden name="repository.id"/>
- <%@ include file="/WEB-INF/jsp/admin/include/remoteRepositoryForm.jspf" %>
- <s:submit value="Update Repository"/>
- </s:form>
- <redback:ifAuthorized permission="archiva-run-indexer">
- <form id="downloadRemoteForm" name="downloadRemoteForm">
- <input type="hidden" value="${repoid}" id="repoid"/>
- Now: <input type="checkbox" name="now"/><br/>
- Full download: <input type="checkbox" name="fullDownload" /><br/>
- <input type="button" onclick="downloadRemote();" value="Download Remote Index" />
-
- </form>
- </redback:ifAuthorized>
-
-
-</div>
-
-<script type="text/javascript">
- function downloadRemote() {
- $.ajax({
- url: "${pageContext.request.contextPath}/restServices/archivaServices/repositoriesService/scheduleDownloadRemoteIndex",
- data: "repositoryId="+document.getElementById("downloadRemoteForm").repoid.value+"&now="+document.getElementById("downloadRemoteForm").now.checked+"&fullDownload="+document.getElementById("downloadRemoteForm").fullDownload.checked ,
- error: function(){
- alert('error');
- }
- });
- alert("download remote index scheduled");
- return false;
- }
- document.getElementById("editRemoteRepository_repository_name").focus();
-
-</script>
-</body>
-</html>
\ No newline at end of file
+++ /dev/null
-<%--
- ~ Licensed to the Apache Software Foundation (ASF) under one
- ~ or more contributor license agreements. See the NOTICE file
- ~ distributed with this work for additional information
- ~ regarding copyright ownership. The ASF licenses this file
- ~ to you under the Apache License, Version 2.0 (the
- ~ "License"); you may not use this file except in compliance
- ~ with the License. You may obtain a copy of the License at
- ~
- ~ http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing,
- ~ software distributed under the License is distributed on an
- ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- ~ KIND, either express or implied. See the License for the
- ~ specific language governing permissions and limitations
- ~ under the License.
- --%>
-
-<%@ page contentType="text/html; charset=UTF-8" %>
-<%@ taglib prefix="s" uri="/struts-tags" %>
-
-<html>
-<head>
- <title>Admin: Edit Managed Repository</title>
- <s:head/>
-</head>
-
-<body>
-
-<h1>Admin: Edit Managed Repository</h1>
-
-<%-- changed the structure of displaying errorMessages & actionMessages in order for them to be escaped. --%>
-<s:if test="hasActionErrors()">
- <ul>
- <s:iterator value="actionErrors">
- <li><span class="errorMessage"><s:property escape="true" /></span></li>
- </s:iterator>
- </ul>
-</s:if>
-
-<div id="contentArea">
-
- <s:if test="hasActionMessages()">
- <ul>
- <s:iterator value="actionMessages">
- <li><span class="actionMessage"><s:property escape="true" /></span></li>
- </s:iterator>
- </ul>
- </s:if>
- <s:form method="post" action="editRepository!commit" namespace="/admin" validate="false">
- <s:hidden name="repository.id"/>
- <s:label label="ID" name="repository.id" />
- <%@ include file="/WEB-INF/jsp/admin/include/repositoryForm.jspf" %>
-
- <c:choose>
- <c:when test="${empty(stagingRepository)}">
- <s:checkbox id="stageNeeded" name="stageNeeded" value="false" label="Create stage repository"/>
- </c:when>
- <c:otherwise>
- <s:checkbox name="stageNeeded" value="true" label="Create stage repository"/>
- </c:otherwise>
- </c:choose>
- <s:submit value="Update Repository"/>
- </s:form>
-
- <script type="text/javascript">
- document.getElementById("editRepository_repository_name").focus();
- </script>
-
-</div>
-
-</body>
-</html>
\ No newline at end of file
+++ /dev/null
-<%--
- ~ Licensed to the Apache Software Foundation (ASF) under one
- ~ or more contributor license agreements. See the NOTICE file
- ~ distributed with this work for additional information
- ~ regarding copyright ownership. The ASF licenses this file
- ~ to you under the Apache License, Version 2.0 (the
- ~ "License"); you may not use this file except in compliance
- ~ with the License. You may obtain a copy of the License at
- ~
- ~ http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing,
- ~ software distributed under the License is distributed on an
- ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- ~ KIND, either express or implied. See the License for the
- ~ specific language governing permissions and limitations
- ~ under the License.
- --%>
-
-<%@ page contentType="text/html; charset=UTF-8" %>
-<%@ taglib prefix="s" uri="/struts-tags" %>
-
-<html>
-<head>
- <title>Admin: Enable Proxy Connector</title>
- <s:head/>
-</head>
-
-<body>
-
-<h1>Admin: Enable Proxy Connector</h1>
-
-<s:actionerror/>
-
-<div id="contentArea">
-
- <h2>Enable Proxy Connector</h2>
-
- <p>
- Are you sure you want to enable proxy connector <code>[ ${source} , ${target} ]</code> ?
- </p>
-
- <s:form method="post" action="enableProxyConnector!enable" namespace="/admin" validate="true">
- <s:hidden name="target"/>
- <s:hidden name="source"/>
- <s:submit value="Enable"/>
- </s:form>
-</div>
-
-</body>
-</html>
\ No newline at end of file
+++ /dev/null
-<%--
- ~ Licensed to the Apache Software Foundation (ASF) under one
- ~ or more contributor license agreements. See the NOTICE file
- ~ distributed with this work for additional information
- ~ regarding copyright ownership. The ASF licenses this file
- ~ to you under the Apache License, Version 2.0 (the
- ~ "License"); you may not use this file except in compliance
- ~ with the License. You may obtain a copy of the License at
- ~
- ~ http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing,
- ~ software distributed under the License is distributed on an
- ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- ~ KIND, either express or implied. See the License for the
- ~ specific language governing permissions and limitations
- ~ under the License.
- --%>
-
-<%@ page contentType="text/html; charset=UTF-8" %>
-
-
-<p>
- <s:if test="hasActionErrors()">
- <b style="color: red;">Errors:</b>
- <s:iterator value="actionErrors">
- <li style="color: red;">
- <s:property/>
- </li>
- </s:iterator>
- </s:if>
-</p>
\ No newline at end of file
+++ /dev/null
-<%--
- ~ Licensed to the Apache Software Foundation (ASF) under one
- ~ or more contributor license agreements. See the NOTICE file
- ~ distributed with this work for additional information
- ~ regarding copyright ownership. The ASF licenses this file
- ~ to you under the Apache License, Version 2.0 (the
- ~ "License"); you may not use this file except in compliance
- ~ with the License. You may obtain a copy of the License at
- ~
- ~ http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing,
- ~ software distributed under the License is distributed on an
- ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- ~ KIND, either express or implied. See the License for the
- ~ specific language governing permissions and limitations
- ~ under the License.
- --%>
-<%@ page contentType="text/html; charset=UTF-8" %>
-<%@ taglib prefix="s" uri="/struts-tags" %>
-<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
-
-<s:textfield name="proxy.protocol" label="Protocol" size="5" required="true"/>
-<s:textfield name="proxy.host" label="Hostname" size="50" required="true"/>
-<s:textfield name="proxy.port" label="Port" size="5" required="true" />
-<s:textfield name="proxy.username" label="Username" size="25" required="false" />
-<s:password name="proxy.password" label="Password" size="25" required="false" />
-<s:checkbox name="proxy.useNtlm" label="Use ntlm"/>
+++ /dev/null
-<%--
- ~ Licensed to the Apache Software Foundation (ASF) under one
- ~ or more contributor license agreements. See the NOTICE file
- ~ distributed with this work for additional information
- ~ regarding copyright ownership. The ASF licenses this file
- ~ to you under the Apache License, Version 2.0 (the
- ~ "License"); you may not use this file except in compliance
- ~ with the License. You may obtain a copy of the License at
- ~
- ~ http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing,
- ~ software distributed under the License is distributed on an
- ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- ~ KIND, either express or implied. See the License for the
- ~ specific language governing permissions and limitations
- ~ under the License.
- --%>
-<%@ page contentType="text/html; charset=UTF-8" %>
-<%@ taglib prefix="s" uri="/struts-tags" %>
-<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
-
-<c:url var="iconDeleteUrl" value="/images/icons/delete.gif"/>
-<c:url var="iconCreateUrl" value="/images/icons/create.png"/>
-
-<%-- This hidden 'pattern' field is used by remove (white|black)list scripts --%>
-<s:hidden name="pattern" />
-
-<s:hidden name="connector.order" />
-
-<s:select name="connector.proxyId" list="proxyIdOptions" label="Network Proxy" required="true"/>
-<s:select name="connector.sourceRepoId" list="managedRepoIdList"
- label="Managed Repository" required="true"/>
-<s:select name="connector.targetRepoId" list="remoteRepoIdList"
- label="Remote Repository" required="true"/>
-
-<tr>
- <td valign="top"><label>Policies:</label>
- </td>
- <td>
- <table>
- <c:forEach items="${policyMap}" var="policy" varStatus="i">
- <tr>
- <td>
- <s:label for="policy_%{#attr.policy.key}" required="true"
- theme="simple">${policy.value.name}:
- </s:label>
- </td>
- <td>
- <c:set var="value">
- <s:property value="%{#attr.connector.policies[#attr.policy.key]}" default="%{#attr.policy.value.defaultOption}" />
- </c:set>
- <s:select name="connector.policies['%{#attr.policy.key}']"
- list="%{#attr.policyMap[#attr.policy.key].options}"
- value="%{#attr.value}"
- id="policy_%{#attr.policy.key}"
- theme="simple"
- cssStyle="width: 10em"/>
- </td>
- </tr>
- </c:forEach>
- </table>
- </td>
-</tr>
-
-<tr class="seperator">
- <td valign="top">
- <label for="propertiesEntry">Properties:</label>
- </td>
- <td>
- <s:textfield name="propertyKey" size="15" id="propertiesEntry" theme="simple"
- onkeypress="submitenter(event, 'addProperty')"/>
- :
- <s:textfield name="propertyValue" size="15" id="propertiesValue" theme="simple"
- onkeypress="submitenter(event, 'addProperty')"/>
- <input type="button" onclick="submitForm('addProperty')" value="Add Property" />
- </td>
-</tr>
-
-<tr>
- <td>
- </td>
- <td>
- <c:choose>
- <c:when test="${empty (connector.properties)}">
- <i>No properties have been set.</i>
- </c:when>
- <c:otherwise>
- <table>
- <c:forEach items="${connector.properties}" var="property" varStatus="i">
- <tr>
- <td>
- <s:label for="property_%{#attr.property.key}"
- theme="simple">${property.key}</s:label>
- </td>
- <td>
- <s:textfield name="connector.properties['%{#attr.property.key}']"
- size="15"
- id="property_%{#attr.property.key}"
- theme="simple"/>
- </td>
- <td>
- <s:a href="#" title="Remove [%{#attr.property.key}] Property"
- onclick="setAndSubmit('propertyKey', '%{#attr.property.key}', 'removeProperty')"
- theme="simple">
- <img src="${iconDeleteUrl}"/></s:a>
- </td>
- </tr>
- </c:forEach>
- </table>
- </c:otherwise>
- </c:choose>
- </td>
-</tr>
-
-<tr class="seperator">
- <td valign="top">
- <label for="blackListEntry">Black List:</label>
- </td>
- <td>
- <s:textfield name="blackListPattern" size="30" id="blackListEntry" theme="simple"
- onkeypress="submitenter(event, 'addBlackListPattern')"/>
- <input type="button" onclick="submitForm('addBlackListPattern')" value="Add Pattern" />
- </td>
-</tr>
-
-<tr>
- <td>
- </td>
- <td>
- <c:choose>
- <c:when test="${empty (connector.blackListPatterns)}">
- <i>No black list patterns have been set.</i>
- </c:when>
- <c:otherwise>
- <table>
- <s:iterator value="connector.blackListPatterns" var="currentPattern" status="i">
- <tr>
- <td>
- <input type="hidden" name="connector.blackListPatterns" value="<s:property value="currentPattern" escapeHtml="true"/>"/>
- <code>"${currentPattern}"</code>
- </td>
- <td>
- <a href="#" title="Remove [${currentPattern}] Pattern"
- onclick="setAndSubmit('pattern', '<s:property value="currentPattern" escapeJavaScript="true"/>', 'removeBlackListPattern')">
- <img src="${iconDeleteUrl}"/></a>
- </td>
- </tr>
- </s:iterator>
- </table>
- </c:otherwise>
- </c:choose>
- </td>
-</tr>
-
-<tr class="seperator">
- <td valign="top">
- <label for="whiteListEntry">White List:</label>
- </td>
- <td>
- <s:textfield name="whiteListPattern" size="30" id="whiteListEntry" theme="simple"
- onkeypress="submitenter(event, 'addWhiteListPattern')"/>
- <input type="button" onclick="submitForm('addWhiteListPattern')" value="Add Pattern" />
- </td>
-</tr>
-<tr>
- <td>
- </td>
- <td>
- <c:choose>
- <c:when test="${empty (connector.whiteListPatterns)}">
- <i>No white list patterns have been set.</i>
- </c:when>
- <c:otherwise>
- <table>
- <s:iterator value="connector.whiteListPatterns" var="currentPattern" status="i">
- <tr>
- <td>
- <input type="hidden" name="connector.whiteListPatterns" value="<s:property value="currentPattern" escapeHtml="true"/>"/>
- <code>"${currentPattern}"</code>
- </td>
- <td>
- <a href="#" title="Remove ${currentPattern} Pattern"
- onclick="setAndSubmit('pattern', '<s:property value="currentPattern" escapeJavaScript="true"/>', 'removeWhiteListPattern')"
- theme="simple">
- <img src="${iconDeleteUrl}"/></a>
- </td>
- </tr>
- </s:iterator>
- </table>
- </c:otherwise>
- </c:choose>
- </td>
-</tr>
-
-<script type="text/javascript">
- <!--
- function adjustActionMethod( action, method )
- {
- var idx = action.indexOf( "!" );
- if( idx == (-1) )
- {
- // no "name!method.action" defined, split by ".action" instead.
- idx = action.indexOf( ".action" );
- }
-
- return action.substring( 0, idx ) + "!" + method + ".action";
- }
-
- function setAndSubmit( id, value, method )
- {
- var f = document.forms['saveProxyConnector'];
-
- f.action = adjustActionMethod( f.action, method );
- f.elements[id].value = value;
- f.submit();
- }
-
- function submitForm( method )
- {
- var f = document.forms['saveProxyConnector'];
-
- var before = f.action;
- f.action = adjustActionMethod( f.action, method );
- f.submit();
- }
-
- function submitenter( e, method )
- {
- var keycode;
-
-
- if ( window.event )
- {
- keycode = window.event.keyCode;
- }
- else if ( e )
- {
- keycode = e.which;
- }
- else
- {
- return true;
- }
-
- if ( keycode == 13 )
- {
- submitForm( method );
- return false;
- }
- else
- {
- return true;
- }
- }
-
- document.forms["saveProxyConnector"]["connector.proxyId"].focus();
- //-->
-</script>
-
+++ /dev/null
-<%--
- ~ Licensed to the Apache Software Foundation (ASF) under one
- ~ or more contributor license agreements. See the NOTICE file
- ~ distributed with this work for additional information
- ~ regarding copyright ownership. The ASF licenses this file
- ~ to you under the Apache License, Version 2.0 (the
- ~ "License"); you may not use this file except in compliance
- ~ with the License. You may obtain a copy of the License at
- ~
- ~ http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing,
- ~ software distributed under the License is distributed on an
- ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- ~ KIND, either express or implied. See the License for the
- ~ specific language governing permissions and limitations
- ~ under the License.
- --%>
-
-<%@ page contentType="text/html; charset=UTF-8" %>
-<%@ taglib prefix="s" uri="/struts-tags" %>
-
-<s:textfield name="repository.name" label="Name" size="50" required="true"/>
-<s:textfield name="repository.url" label="URL" size="60" required="true"/>
-<s:textfield name="repository.userName" label="Username" size="25" required="false"/>
-<s:password name="repository.password" label="Password" size="25" required="false"/>
-<s:textfield name="repository.timeout" label="Timeout in seconds" size="3" required="false"/>
-<s:select list="#@java.util.LinkedHashMap@{'default' : 'Maven 2.x Repository', 'legacy' : 'Maven 1.x Repository'}"
- name="repository.layout" label="Type"/>
-
-<s:checkbox name="repository.downloadRemoteIndex" label="Activate download remote index" />
-<s:textfield name="repository.remoteIndexUrl" label="Remote index url, can be relative to url" size="60" required="false"/>
-<s:textfield name="repository.cronExpression" label="Cron expression" size="10" required="false"/>
-<s:textfield name="repository.indexDirectory" label="Directory index storage" size="60" required="false"/>
-<s:textfield name="repository.remoteDownloadTimeout" label="Download Remote Index Timeout in seconds" size="10" required="false"/>
-<s:select list="networkProxies" name="repository.remoteDownloadNetworkProxyId" emptyOption="true"
-required="false" listKey="id" listValue="id" label="Network Proxy to Use for download Remote Index"/>
-<s:checkbox name="repository.downloadRemoteIndexOnStartup" label="Download remote index on Archiva startup" />
-
-
+++ /dev/null
-<%--
- ~ Licensed to the Apache Software Foundation (ASF) under one
- ~ or more contributor license agreements. See the NOTICE file
- ~ distributed with this work for additional information
- ~ regarding copyright ownership. The ASF licenses this file
- ~ to you under the Apache License, Version 2.0 (the
- ~ "License"); you may not use this file except in compliance
- ~ with the License. You may obtain a copy of the License at
- ~
- ~ http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing,
- ~ software distributed under the License is distributed on an
- ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- ~ KIND, either express or implied. See the License for the
- ~ specific language governing permissions and limitations
- ~ under the License.
- --%>
-<%@ page contentType="text/html; charset=UTF-8" %>
-<%@ taglib prefix="s" uri="/struts-tags" %>
-<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
-
-<s:textfield name="repository.name" label="Name" size="50" required="true"/>
-<s:textfield name="repository.location" label="Directory" size="50" required="true"/>
-<s:textfield name="repository.indexDirectory" label="Index Directory" size="50"/>
-<s:select list="#@java.util.LinkedHashMap@{'default' : 'Maven 2.x Repository', 'legacy' : 'Maven 1.x Repository'}"
- name="repository.layout" label="Type"/>
-<s:textfield name="repository.cronExpression" label="Cron" size="40" required="true"/>
-<s:textfield name="repository.daysOlder" label="Repository Purge By Days Older Than" size="5"/>
-<s:textfield name="repository.retentionCount" label="Repository Purge By Retention Count" size="5"/>
-<s:checkbox name="repository.releases" value="repository.releases" label="Releases Included"/>
-<s:checkbox name="repository.blockRedeployments" value="repository.blockRedeployments" label="Block Re-deployment of Released Artifacts"/>
-<s:checkbox name="repository.snapshots" value="repository.snapshots" label="Snapshots Included"/>
-<s:checkbox name="repository.scanned" value="repository.scanned" label="Scannable"/>
-<s:checkbox name="repository.deleteReleasedSnapshots" value="repository.deleteReleasedSnapshots"
- label="Delete Released Snapshots"/>
+++ /dev/null
-<%--
- ~ Licensed to the Apache Software Foundation (ASF) under one
- ~ or more contributor license agreements. See the NOTICE file
- ~ distributed with this work for additional information
- ~ regarding copyright ownership. The ASF licenses this file
- ~ to you under the Apache License, Version 2.0 (the
- ~ "License"); you may not use this file except in compliance
- ~ with the License. You may obtain a copy of the License at
- ~
- ~ http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing,
- ~ software distributed under the License is distributed on an
- ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- ~ KIND, either express or implied. See the License for the
- ~ specific language governing permissions and limitations
- ~ under the License.
- --%>
-
-<%@ page contentType="text/html; charset=UTF-8" %>
-<%@ taglib prefix="s" uri="/struts-tags" %>
-<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
-<%@ taglib prefix="redback" uri="/redback/taglib-1.0" %>
-<%@ taglib prefix="archiva" uri="/WEB-INF/tld/web-tags.tld" %>
-
-<html>
-<head>
- <title>Administration - Legacy Support</title>
- <s:head/>
-</head>
-
-<body>
-
-<h1>Administration - Legacy Artifact Path Resolution</h1>
-
-<div id="contentArea">
-
-<%-- changed the structure of displaying errorMessages & actionMessages in order for them to be escaped. --%>
-<s:if test="hasActionErrors()">
- <ul>
- <s:iterator value="actionErrors">
- <li><span class="errorMessage"><s:property escape="true" /></span></li>
- </s:iterator>
- </ul>
- </s:if>
- <s:if test="hasActionMessages()">
- <ul>
- <s:iterator value="actionMessages">
- <li><span class="actionMessage"><s:property escape="true" /></span></li>
- </s:iterator>
- </ul>
- </s:if>
-
-<div class="admin">
-<div class="controls">
- <redback:ifAuthorized permission="archiva-manage-configuration">
- <s:url id="addLegacyArtifactPathUrl" action="addLegacyArtifactPath"/>
- <s:a href="%{addLegacyArtifactPathUrl}">
- <img src="<c:url value="/images/icons/create.png" />" alt="" width="16" height="16"/>
- Add
- </s:a>
- </redback:ifAuthorized>
-</div>
-<h2>Path Mappings</h2>
-
-<c:choose>
-<c:when test="${empty (legacyArtifactPaths)}">
- <%-- No paths. --%>
- <p><strong>There are no legacy artifact paths configured yet.</strong></p>
-</c:when>
-<c:otherwise>
- <%-- Display the paths. --%>
-
-<c:forEach items="${legacyArtifactPaths}" var="legacyArtifactPath" varStatus="i">
-<c:choose>
- <c:when test='${(i.index)%2 eq 0}'>
- <c:set var="rowColor" value="dark" scope="page"/>
- </c:when>
- <c:otherwise>
- <c:set var="rowColor" value="lite" scope="page"/>
- </c:otherwise>
-</c:choose>
-
-<div class="legacyArtifactPath ${rowColor}">
-
-<div class="controls">
- <%-- TODO: make some icons --%>
- <redback:ifAnyAuthorized permissions="archiva-manage-configuration">
- <s:token/>
- <s:url id="deleteLegacyArtifactPath" encode="true" action="deleteLegacyArtifactPath">
- <s:param name="path" value="%{#attr.legacyArtifactPath.path}"/>
- <s:param name="struts.token.name">struts.token</s:param>
- <s:param name="struts.token"><s:property value="struts.token"/></s:param>
- </s:url>
- <s:a href="%{deleteLegacyArtifactPath}">
- <img src="<c:url value="/images/icons/delete.gif" />" alt="" width="16" height="16"/>
- Delete
- </s:a>
- </redback:ifAnyAuthorized>
-</div>
-
-<%-- used c:out in displaying EL's so that they would be escaped --%>
-<table class="infoTable">
-<tr>
- <th>Path</th>
- <td>
- <code><c:out value="${legacyArtifactPath.path}" /></code>
- </td>
-</tr>
-<tr>
- <th>Artifact</th>
- <td>
- <code><c:out value="${legacyArtifactPath.artifact}" /></code>
- </td>
-</tr>
-</table>
-
-</div>
-</c:forEach>
-
-</c:otherwise>
-</c:choose>
-
-
-
-</div>
-
-</div>
-
-</body>
-</html>
+++ /dev/null
-<%--
- ~ Licensed to the Apache Software Foundation (ASF) under one
- ~ or more contributor license agreements. See the NOTICE file
- ~ distributed with this work for additional information
- ~ regarding copyright ownership. The ASF licenses this file
- ~ to you under the Apache License, Version 2.0 (the
- ~ "License"); you may not use this file except in compliance
- ~ with the License. You may obtain a copy of the License at
- ~
- ~ http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing,
- ~ software distributed under the License is distributed on an
- ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- ~ KIND, either express or implied. See the License for the
- ~ specific language governing permissions and limitations
- ~ under the License.
- --%>
-
-<%@ page contentType="text/html; charset=UTF-8" %>
-<%@ taglib prefix="s" uri="/struts-tags" %>
-<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
-
-<html>
-<head>
- <title>Admin: Merge Staging Repository</title>
- <s:head/>
-</head>
-
-<body>
-
-<h1>Admin: Merge Staging Repository</h1>
-
-<p>
- Are you sure you want to merge the repository?
-</p>
-
-<div class="infobox">
- <table class="infotable">
-
- <c:choose>
- <c:when test="${empty (conflictSourceArtifacts)}">
- <h1>No conflicting artifacts</h1>
-
- <c:if test="${!repository.snapshots and repository.releases}">
- <div class="warningbox">
- <p>
- <strong>WARNING: Repository "${repoid}" does not allow to merge snapshots</strong>
- </p>
- </div>
- </c:if>
-
- <s:form method="post" action="merge" namespace="/admin" validate="false" theme="simple">
- <s:hidden name="repoid"/>
- <div class="buttons">
- <s:submit value="Merge All" method="doMerge"/>
- </div>
- </s:form>
- </c:when>
- <c:otherwise>
- <div class="warningbox">
- <c:if test="${!repository.snapshots and repository.releases}">
- <p>
- <strong>WARNING: Repository "${repoid}" does not allow to merge snapshots</strong>
- </p>
- </c:if>
- <p>
- <strong>WARNING: The following are the artifacts in conflict.</strong>
- </p>
- </div>
- <c:forEach items="${conflictSourceArtifactsToBeDisplayed}" var="artifact">
- <tr>
- <td>Artifact Id :</td>
- <%--<td><code>${artifact.id}</code></td>--%>
- <td align="left"> <code>${artifact.namespace} ${" "} ${artifact.project} ${" "} ${artifact.version}</code></td>
- </tr>
- </c:forEach>
- <tr>
- <td>
- <s:form action="merge" method="post" namespace="/admin" validate="false">
- <s:hidden name="repoid"/>
- <div class="buttons">
- <table>
- <tr>
- <td>
- <table>
- <tr>
- <td>
- <s:submit value="Merge All" method="doMerge"/>
- </td>
- </tr>
- </table>
- </td>
- <td>
- <table>
- <tr>
- <td>
- <s:submit value="Merge With Skip" method="mergeBySkippingConflicts"/>
- </td>
- </tr>
- </table>
- </td>
- </tr>
- </table>
- </div>
- </s:form>
- </td>
- </tr>
- </c:otherwise>
- </c:choose>
- </table>
-</div>
-</body>
-</html>
+++ /dev/null
-<%--
- ~ Licensed to the Apache Software Foundation (ASF) under one
- ~ or more contributor license agreements. See the NOTICE file
- ~ distributed with this work for additional information
- ~ regarding copyright ownership. The ASF licenses this file
- ~ to you under the Apache License, Version 2.0 (the
- ~ "License"); you may not use this file except in compliance
- ~ with the License. You may obtain a copy of the License at
- ~
- ~ http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing,
- ~ software distributed under the License is distributed on an
- ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- ~ KIND, either express or implied. See the License for the
- ~ specific language governing permissions and limitations
- ~ under the License.
- --%>
-
-<%-- http://www.opensymphony.com/webwork/wikidocs/File%20Upload%20Interceptor.html --%>
-
-<%@ page contentType="text/html; charset=UTF-8" %>
-<%@ taglib prefix="s" uri="/struts-tags" %>
-<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
-
-<html>
-<head>
- <title>Admin: Merge Staging Repository</title>
- <s:head/>
-</head>
-
-<body>
-<h1>Admin: Merge Staging Repository</h1>
-
-<div id="contentArea">
-
- <s:actionerror/>
- <s:actionmessage/>
-</div>
-
-</body>
-</html>
+++ /dev/null
-<%--
- ~ Licensed to the Apache Software Foundation (ASF) under one
- ~ or more contributor license agreements. See the NOTICE file
- ~ distributed with this work for additional information
- ~ regarding copyright ownership. The ASF licenses this file
- ~ to you under the Apache License, Version 2.0 (the
- ~ "License"); you may not use this file except in compliance
- ~ with the License. You may obtain a copy of the License at
- ~
- ~ http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing,
- ~ software distributed under the License is distributed on an
- ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- ~ KIND, either express or implied. See the License for the
- ~ specific language governing permissions and limitations
- ~ under the License.
- --%>
-
-<%@ page contentType="text/html; charset=UTF-8" %>
-<%@ taglib prefix="s" uri="/struts-tags" %>
-<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
-
-<html>
-<head>
- <title>Configure NetworkConfiguration</title>
- <s:head/>
-</head>
-
-<body>
-
-<h1>Admin: Configure NetworkConfiguration</h1>
-
-<div id="contentArea">
-
- <s:actionerror/>
- <s:actionmessage/>
-
- <s:form name="saveNetworkConfiguration" method="post" action="saveNetworkConfiguration" namespace="/admin" validate="true">
- <s:token/>
- <s:textfield name="networkConfiguration.maxTotal" label="Max Total Http Connections"/>
- <s:textfield name="networkConfiguration.maxTotalPerHost" label="Max Total Http Connections per host"/>
- <s:checkbox name="networkConfiguration.usePooling" label="Use http connection pooling"/>
- <s:submit value="Save Network Configuration"/>
- </s:form>
-
-</div>
-
-</body>
-
-</html>
\ No newline at end of file
+++ /dev/null
-<%--
- ~ Licensed to the Apache Software Foundation (ASF) under one
- ~ or more contributor license agreements. See the NOTICE file
- ~ distributed with this work for additional information
- ~ regarding copyright ownership. The ASF licenses this file
- ~ to you under the Apache License, Version 2.0 (the
- ~ "License"); you may not use this file except in compliance
- ~ with the License. You may obtain a copy of the License at
- ~
- ~ http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing,
- ~ software distributed under the License is distributed on an
- ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- ~ KIND, either express or implied. See the License for the
- ~ specific language governing permissions and limitations
- ~ under the License.
- --%>
-
-<%@ page contentType="text/html; charset=UTF-8" %>
-<%@ taglib prefix="s" uri="/struts-tags"%>
-<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
-<%@ taglib prefix="redback" uri="/redback/taglib-1.0" %>
-<%@ taglib prefix="archiva" uri="/WEB-INF/tld/web-tags.tld" %>
-
-<html>
-<head>
-<title>Administration - Network Proxies</title>
-<s:head />
-</head>
-
-<body>
-
-<h1>Administration - Network Proxies</h1>
-
-<div id="contentArea">
-
- <%-- changed the structure of displaying errorMessages & actionMessages in order for them to be escaped. --%>
- <s:if test="hasActionErrors()">
- <ul>
- <s:iterator value="actionErrors">
- <li><span class="errorMessage"><s:property escape="true" /></span></li>
- </s:iterator>
- </ul>
- </s:if>
- <s:if test="hasActionMessages()">
- <ul>
- <s:iterator value="actionMessages">
- <li><span class="actionMessage"><s:property escape="true" /></span></li>
- </s:iterator>
- </ul>
- </s:if>
-
-<div class="admin">
-<div class="controls">
-<redback:ifAuthorized
- permission="archiva-manage-configuration">
- <s:url id="addNetworkProxyUrl" action="addNetworkProxy" />
- <s:a href="%{addNetworkProxyUrl}">
- <img src="<c:url value="/images/icons/create.png" />" />
- Add Network Proxy</s:a>
-</redback:ifAuthorized></div>
-<h2>Network Proxies</h2>
-
-<c:choose>
- <c:when test="${empty (networkProxies)}">
- <%-- No Local Repositories. --%>
- <strong>There are no network proxies configured yet.</strong>
- </c:when>
- <c:otherwise>
- <%-- Display the repositories. --%>
-
- <c:forEach items="${networkProxies}" var="proxy" varStatus="i">
- <c:choose>
- <c:when test='${(i.index)%2 eq 0}'>
- <c:set var="rowColor" value="dark" scope="page" />
- </c:when>
- <c:otherwise>
- <c:set var="rowColor" value="lite" scope="page" />
- </c:otherwise>
- </c:choose>
-
- <div class="netproxy ${rowColor}">
-
- <div class="controls">
- <redback:ifAnyAuthorized
- permissions="archiva-manage-configuration">
- <s:token/>
- <s:url id="editNetworkProxyUrl" encode="true" action="editNetworkProxy">
- <s:param name="proxyid" value="%{#attr.proxy.id}" />
- </s:url>
- <s:url id="deleteNetworkProxyUrl" encode="true" action="deleteNetworkProxy" method="confirm">
- <s:param name="proxyid" value="%{#attr.proxy.id}" />
- <s:param name="struts.token.name">struts.token</s:param>
- <s:param name="struts.token"><s:property value="struts.token"/></s:param>
- </s:url>
- <s:a href="%{editNetworkProxyUrl}">
- <img src="<c:url value="/images/icons/edit.png" />" />
- Edit Network Proxy</s:a>
- <s:a href="%{deleteNetworkProxyUrl}">
- <img src="<c:url value="/images/icons/delete.gif" />" />
- Delete Network Proxy</s:a>
- </redback:ifAnyAuthorized></div>
-
- <%-- used c:out in displaying EL's for them to be escaped. --%>
- <table class="infoTable">
- <tr>
- <th>Identifier</th>
- <td><code><c:out value="${proxy.id}" /></code></td>
- </tr>
- <tr>
- <th>Protocol</th>
- <td><c:out value="${proxy.protocol}" /></td>
- </tr>
- <tr>
- <th>Host</th>
- <td><c:out value="${proxy.host}" /></td>
- </tr>
- <tr>
- <th>Port</th>
- <td><c:out value="${proxy.port}" /></td>
- </tr>
- <c:if test="${not empty (proxy.username)}">
- <tr>
- <th>Username</th>
- <td><c:out value="${proxy.username}" /></td>
- </tr>
- <c:if test="${not empty (proxy.password)}">
- <tr>
- <th>Password</th>
- <td>••••••••</td>
- </tr>
- </c:if>
- </c:if>
- <tr>
- <th>Use NTLM</th>
- <td><c:out value="${proxy.useNtlm}" /></td>
- </tr>
- </table>
-
- </div>
- </c:forEach>
-
- </c:otherwise>
-</c:choose>
-</div>
-
-</div>
-
-</body>
-</html>
+++ /dev/null
-<%--
- ~ Licensed to the Apache Software Foundation (ASF) under one
- ~ or more contributor license agreements. See the NOTICE file
- ~ distributed with this work for additional information
- ~ regarding copyright ownership. The ASF licenses this file
- ~ to you under the Apache License, Version 2.0 (the
- ~ "License"); you may not use this file except in compliance
- ~ with the License. You may obtain a copy of the License at
- ~
- ~ http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing,
- ~ software distributed under the License is distributed on an
- ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- ~ KIND, either express or implied. See the License for the
- ~ specific language governing permissions and limitations
- ~ under the License.
- --%>
-
-<%@ page contentType="text/html; charset=UTF-8" %>
-<%@ taglib prefix="s" uri="/struts-tags" %>
-<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
-<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
-<%@ taglib prefix="redback" uri="/redback/taglib-1.0" %>
-<%@ taglib prefix="archiva" uri="/WEB-INF/tld/web-tags.tld" %>
-
-<html>
-<head>
- <title>Administration - Proxy Connectors</title>
- <s:head/>
- <script type="text/javascript" src="<c:url value='/js/jquery-1.6.1.min.js'/>"></script>
- <script type="text/javascript">
- $(document).ready(function(){
-
- $("table.settings").hide();
- $("a.expand").click(function(event){
- event.preventDefault();
- $(this).next().toggle("slow");
- });
-
- });
- </script>
-
-</head>
-
-<body>
-
-<h1>Administration - Proxy Connectors</h1>
-
-<c:url var="iconDeleteUrl" value="/images/icons/delete.gif"/>
-<c:url var="iconEditUrl" value="/images/icons/edit.png"/>
-<c:url var="iconCreateUrl" value="/images/icons/create.png"/>
-<c:url var="iconUpUrl" value="/images/icons/up.gif"/>
-<c:url var="iconDownUrl" value="/images/icons/down.gif"/>
-<c:url var="iconEnable" value="/images/icons/on-symbol.png"/>
-<c:url var="iconDisable" value="/images/icons/off-symbol.png"/>
-
-<div id="contentArea">
-
-<s:actionerror/>
-<s:actionmessage/>
-
-<div style="float:right">
- <c:choose>
- <c:when test="${remoteRepoExists}">
- <redback:ifAnyAuthorized permissions="archiva-manage-configuration">
- <s:url id="addProxyConnectorUrl" action="addProxyConnector"/>
- <s:a href="%{addProxyConnectorUrl}" cssClass="create">
- <img src="<c:url value="/images/icons/create.png" />"/> Add
- </s:a>
- </redback:ifAnyAuthorized>
- </c:when>
- <c:otherwise>
- <img src="<c:url value="/images/icons/create.png" />"/>
- Add (Disabled. No remote repositories)
- </c:otherwise>
- </c:choose>
-</div>
-
-<h2>Repository Proxy Connectors</h2>
-
-<c:choose>
-<c:when test="${empty (proxyConnectorMap)}">
- <strong>No Repository Proxy Connectors Defined.</strong>
-</c:when>
-<c:otherwise>
-
-<div class="admin">
-
-<c:forEach items="${proxyConnectorMap}" var="repository" varStatus="i">
-
-<div class="proxyConfig">
- <div class="managedRepo">
- <img src="<c:url value="/images/archiva-splat-32.gif"/>"/>
- <p class="id">${repository.key}</p>
- <p class="name">${repoMap[repository.key].name}</p>
- </div>
-
- <c:set var="numberOfRepos" value="${fn:length(repository.value)}" />
-
- <c:forEach items="${repository.value}" var="connector" varStatus="pc">
-
- <c:choose>
- <c:when test='${(pc.index)%2 eq 0}'>
- <c:set var="rowColor" value="dark" scope="page"/>
- </c:when>
- <c:otherwise>
- <c:set var="rowColor" value="lite" scope="page"/>
- </c:otherwise>
- </c:choose>
-
- <div class="connector ${rowColor}">
- <div class="controls">
- <redback:ifAnyAuthorized permissions="archiva-manage-configuration">
- <s:token/>
- <s:url id="sortDownProxyConnectorUrl" action="sortDownProxyConnector">
- <s:param name="source" value="%{#attr.connector.sourceRepoId}"/>
- <s:param name="target" value="%{#attr.connector.targetRepoId}"/>
- </s:url>
- <s:url id="sortUpProxyConnectorUrl" action="sortUpProxyConnector">
- <s:param name="source" value="%{#attr.connector.sourceRepoId}"/>
- <s:param name="target" value="%{#attr.connector.targetRepoId}"/>
- </s:url>
- <s:url id="editProxyConnectorUrl" action="editProxyConnector">
- <s:param name="target" value="%{#attr.connector.targetRepoId}"/>
- <s:param name="source" value="%{#attr.connector.sourceRepoId}"/>
- </s:url>
- <s:url id="deleteProxyConnectorUrl" action="deleteProxyConnector" method="confirmDelete">
- <s:param name="source" value="%{#attr.connector.sourceRepoId}"/>
- <s:param name="target" value="%{#attr.connector.targetRepoId}"/>
- <s:param name="struts.token.name">struts.token</s:param>
- <s:param name="struts.token"><s:property value="struts.token"/></s:param>
- </s:url>
- <s:url id="enableProxyConnectorUrl" action="enableProxyConnector" method="confirmEnable">
- <s:param name="source" value="%{#attr.connector.sourceRepoId}"/>
- <s:param name="target" value="%{#attr.connector.targetRepoId}"/>
- </s:url>
- <s:url id="disableProxyConnectorUrl" action="disableProxyConnector" method="confirmDisable">
- <s:param name="source" value="%{#attr.connector.sourceRepoId}"/>
- <s:param name="target" value="%{#attr.connector.targetRepoId}"/>
- <s:param name="struts.token.name">struts.token</s:param>
- <s:param name="struts.token"><s:property value="struts.token"/></s:param>
- </s:url>
- <c:if test="${connector.disabled}">
- <s:a href="%{enableProxyConnectorUrl}" title="Enable Proxy Connector">
- <img src="${iconDisable}"/>
- </s:a>
- </c:if>
- <c:if test="${connector.disabled == false}">
- <s:a href="%{disableProxyConnectorUrl}" title="Disable Proxy Connector">
- <img src="${iconEnable}"/>
- </s:a>
- </c:if>
- <c:if test="${pc.count > 1}">
- <s:a href="%{sortUpProxyConnectorUrl}" title="Move Proxy Connector Up">
- <img src="${iconUpUrl}"/>
- </s:a>
- </c:if>
- <c:if test="${pc.count < numberOfRepos}">
- <s:a href="%{sortDownProxyConnectorUrl}" cssClass="down" title="Move Proxy Connector Down">
- <img src="${iconDownUrl}"/>
- </s:a>
- </c:if>
- <s:a href="%{editProxyConnectorUrl}" cssClass="edit" title="Edit Proxy Connector">
- <img src="${iconEditUrl}"/>
- </s:a>
- <s:a href="%{deleteProxyConnectorUrl}" cssClass="delete" title="Delete Proxy Connector">
- <img src="${iconDeleteUrl}"/>
- </s:a>
- </redback:ifAnyAuthorized>
- </div>
-
- <h4>Proxy Connector</h4>
-
- <div class="remoteRepo">
- <img src="<c:url value="/images/archiva-world.png"/>"/>
- <p class="id">${connector.targetRepoId}</p>
- <p class="name">${repoMap[connector.targetRepoId].name}</p>
- <p class="url"><a href="${repoMap[connector.targetRepoId].url}">${repoMap[connector.targetRepoId].url}</a></p>
- </div>
-
- <a class="expand" href="#">Settings</a>
- <table class="settings">
- <tr>
- <th nowrap="nowrap">Network Proxy:</th>
- <td>
- <c:choose>
- <c:when test="${empty (connector.proxyId)}">
- <span class="directConnection">(Direct Connection)</span>
- </c:when>
- <c:otherwise>
- <s:url id="editProxyIdUrl" action="editNetworkProxy">
- <s:param name="proxyid" value="%{'#attr.connector.proxyId'}"/>
- </s:url>
- <s:a href="%{editProxyIdUrl}" cssClass="edit" title="Edit Network Proxy">
- ${connector.proxyId}
- <img src="${iconEditUrl}"/>
- </s:a>
- </c:otherwise>
- </c:choose>
- </td>
- </tr>
- <tr>
- <th>Policies:</th>
- <td nowrap="nowrap">
- <table class="policies">
- <c:forEach items="${connector.policies}" var="policies">
- <tr>
- <th>${policies.key}</th>
- <td>${policies.value}</td>
- </tr>
- </c:forEach>
- </table>
- </td>
- </tr>
-
- <c:if test="${not (empty (connector.whiteListPatterns))}">
- <tr>
- <th nowrap="nowrap">White List:</th>
- <td nowrap="nowrap">
- <c:forEach items="${connector.whiteListPatterns}" var="pattern">
- <p><code>"${pattern}"</code></p>
- </c:forEach>
- </td>
- </tr>
- </c:if>
-
- <c:if test="${not (empty (connector.blackListPatterns))}">
- <tr>
- <th nowrap="nowrap">Black List:</th>
- <td>
- <c:forEach items="${connector.blackListPatterns}" var="pattern">
- <p><code>"${pattern}"</code></p>
- </c:forEach>
- </td>
- </tr>
- </c:if>
-
- <c:if test="${not (empty (connector.properties))}">
- <tr>
- <th>Properties:</th>
- <td>
- <table class="props">
- <c:forEach items="${connector.properties}" var="prop">
- <tr>
- <th>${prop.key}</th>
- <td>${prop.value}</td>
- </tr>
- </c:forEach>
- </table>
- </td>
- </tr>
- </c:if>
- </table>
- </div> <%-- connector --%>
-
-</c:forEach>
-</div> <%-- proxyConfig --%>
-</c:forEach>
-</div> <%-- admin --%>
-</c:otherwise>
-</c:choose>
-
-</div>
-
-</body>
-</html>
+++ /dev/null
-<%@ page import="java.io.File" %>
-<%--
-~ Licensed to the Apache Software Foundation (ASF) under one
-~ or more contributor license agreements. See the NOTICE file
-~ distributed with this work for additional information
-~ regarding copyright ownership. The ASF licenses this file
-~ to you under the Apache License, Version 2.0 (the
-~ "License"); you may not use this file except in compliance
-~ with the License. You may obtain a copy of the License at
-~
-~ http://www.apache.org/licenses/LICENSE-2.0
-~
-~ Unless required by applicable law or agreed to in writing,
-~ software distributed under the License is distributed on an
-~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-~ KIND, either express or implied. See the License for the
-~ specific language governing permissions and limitations
-~ under the License.
---%>
-
-<%@ page contentType="text/html; charset=UTF-8" %>
-<%@ taglib prefix="s" uri="/struts-tags" %>
-<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
-<%@ taglib prefix="redback" uri="/redback/taglib-1.0" %>
-<%@ taglib prefix="archiva" uri="/WEB-INF/tld/web-tags.tld" %>
-
-<html>
-<head>
- <title>Administration - Repositories</title>
- <s:head/>
- <script type="text/javascript" src="<c:url value='/js/jquery-1.6.1.min.js'/>"></script>
- <script type="text/javascript">
- $(document).ready(function(){
-
- $(".pom").hide();
- $("a.expand").click(function(event){
- event.preventDefault();
- $(this).siblings("pre").toggle("slow");
- });
-
- });
- </script>
-</head>
-
-<body>
-
-<h1>Administration - Repositories</h1>
-
-<div id="contentArea">
-
- <%-- changed the structure of displaying errorMessages & actionMessages in order for them to be escaped. --%>
- <s:if test="hasActionErrors()">
- <ul>
- <s:iterator value="actionErrors">
- <li><span class="errorMessage"><s:property escape="true" /></span></li>
- </s:iterator>
- </ul>
- </s:if>
- <s:actionmessage />
- <s:if test="hasActionMessages()">
- <ul>
- <s:iterator value="actionMessages">
- <li><span class="actionMessage"><s:property escape="true" /></span></li>
- </s:iterator>
- </ul>
- </s:if>
-
-<div class="admin">
-<div class="controls">
- <redback:ifAuthorized permission="archiva-manage-configuration">
- <s:url id="addRepositoryUrl" action="addRepository"/>
- <s:a href="%{addRepositoryUrl}">
- <img src="<c:url value="/images/icons/create.png" />" alt="" width="16" height="16"/>
- Add
- </s:a>
- </redback:ifAuthorized>
-</div>
-<h2>Managed Repositories</h2>
-
-<c:choose>
-<c:when test="${empty (managedRepositories)}">
- <%-- No Managed Repositories. --%>
- <strong>There are no managed repositories configured yet.</strong>
-</c:when>
-<c:otherwise>
-<%-- Display the repositories. --%>
-
-<c:forEach items="${managedRepositories}" var="repository" varStatus="i">
-<c:choose>
- <c:when test='${(i.index)%2 eq 0}'>
- <c:set var="rowColor" value="dark" scope="page"/>
- </c:when>
- <c:otherwise>
- <c:set var="rowColor" value="lite" scope="page"/>
- </c:otherwise>
-</c:choose>
-
-<div class="repository ${rowColor}">
-
-<div class="controls">
- <%-- TODO: make some icons --%>
- <redback:ifAnyAuthorized permissions="archiva-manage-configuration">
- <s:url id="editRepositoryUrl" encode="true" action="editRepository">
- <s:param name="repoid" value="%{#attr.repository.id}"/>
- </s:url>
- <s:token/>
- <s:url id="deleteRepositoryUrl" encode="true" action="confirmDeleteRepository">
- <s:param name="repoid" value="%{#attr.repository.id}"/>
- <s:param name="struts.token.name">struts.token</s:param>
- <s:param name="struts.token"><s:property value="struts.token"/></s:param>
- </s:url>
- <s:a href="%{editRepositoryUrl}">
- <img src="<c:url value="/images/icons/edit.png" />" alt="" width="16" height="16"/>
- Edit
- </s:a>
- <s:a href="%{deleteRepositoryUrl}">
- <img src="<c:url value="/images/icons/delete.gif" />" alt="" width="16" height="16"/>
- Delete
- </s:a>
- </redback:ifAnyAuthorized>
- <c:url var="rssFeedIconUrl" value="/images/icons/rss-feed.png"/>
- <a href='/archiva/feeds/<c:out value="${repository.id}" />'>
- <img src="${rssFeedIconUrl}" />
- </a>
-</div>
-
-<%-- used c:out in displaying EL's for them to be escaped. --%>
-<div style="float: left">
- <img src="<c:url value="/images/archiva-splat-32.gif"/>" alt="" width="32" height="32"/>
-</div>
-
-<h3 class="repository"><c:out value="${repository.name}" /></h3>
-
-<table class="infoTable">
-<tr>
- <th>Identifier</th>
- <td>
- <code><c:out value="${repository.id}" /></code>
- </td>
-</tr>
-<tr>
- <th>Name</th>
- <td>
- <code><c:out value="${repository.name}" /></code>
- </td>
-</tr>
-<tr>
- <th>Directory</th>
- <td><c:out value="${repository.location}" /></td>
-</tr>
-<c:if test="${!empty (repository.indexDirectory)}">
- <tr>
- <th>Index Directory</th>
- <td><c:out value="${repository.indexDirectory}" /></td>
- </tr>
-</c:if>
-<tr>
- <th>WebDAV URL</th>
- <td><a href='<c:out value="${baseUrl}" />/<c:out value="${repository.id}" />/' ><c:out value="${baseUrl}" />/<c:out value="${repository.id}" />/</a></td>
-</tr>
-<tr>
- <th>Type</th>
- <%-- TODO: can probably just use layout appended to a key prefix in i18n to simplify this --%>
- <td>
- <c:choose>
- <c:when test="${repository.layout == 'default'}">
- Maven 2.x Repository
- </c:when>
- <c:otherwise>
- Maven 1.x Repository
- </c:otherwise>
- </c:choose>
- </td>
-</tr>
-<c:if test="${!empty (repositoryToGroupMap[repository.id])}">
- <tr>
- <th>Groups</th>
- <td>
- <c:forEach items="${repositoryToGroupMap[repository.id]}" varStatus="i" var="group">
- <c:out value="${group}" /><c:if test="${!i.last}">,</c:if>
- </c:forEach>
- </td>
- </tr>
-</c:if>
-<tr>
- <th>Releases Included</th>
- <td class="${repository.releases ? 'donemark' : 'errormark'} booleanIcon"> </td>
-</tr>
-<tr>
- <th>Snapshots Included</th>
- <td class="${repository.snapshots ? 'donemark' : 'errormark'} booleanIcon"> </td>
-</tr>
-<c:if test="${repository.snapshots}">
- <tr>
- <th>Delete Released Snapshots</th>
- <td class="${repository.deleteReleasedSnapshots ? 'donemark' : 'errormark'} booleanIcon"> </td>
- </tr>
- <tr>
- <th>Repository Purge By Days Older Than</th>
- <td><c:out value="${repository.daysOlder}" /></td>
- </tr>
- <tr>
- <th>Repository Purge By Retention Count</th>
- <td><c:out value="${repository.retentionCount}" /></td>
- </tr>
-</c:if>
-<tr>
- <th>Scanned</th>
- <td class="${repository.scanned ? 'donemark' : 'errormark'} booleanIcon"> </td>
-</tr>
-<c:if test="${repository.scanned}">
- <tr>
- <th>Scanning Cron</th>
- <td><c:out value="${repository.cronExpression}" /></td>
- </tr>
- <tr>
- <th>
- Actions
- </th>
- <td>
- <redback:ifAuthorized permission="archiva-run-indexer">
- <s:form action="indexRepository" theme="simple">
- <s:hidden name="repoid" value="%{#attr.repository.id}"/>
- <table>
- <tr>
- <td><s:checkbox name="scanAll" value="scanAll"/>Process All Artifacts</td>
- </tr>
- <tr>
- <td><s:submit value="Scan Repository Now" id="scanRepoNow%{#attr.repository.id}"/></td>
- </tr>
- </table>
- </s:form>
- </redback:ifAuthorized>
- </td>
- </tr>
- <tr>
- <th>Stats</th>
- <td>
- <c:set var="stats" value="${repositoryStatistics[repository.id]}"/>
- <c:choose>
- <c:when test="${empty (stats)}">
- No Statistics Available.
- </c:when>
- <c:otherwise>
- <table>
- <tr>
- <th>Last Scanned</th>
- <td><c:out value="${stats.scanStartTime}" /></td>
- </tr>
- <tr>
- <th>Duration</th>
- <td><c:out value="${stats.duration}" /> ms</td>
- </tr>
- <tr>
- <th>Total File Count</th>
- <td><c:out value="${stats.totalFileCount}" />
- </tr>
- <tr>
- <th>New Files Found</th>
- <td><c:out value="${stats.newFileCount}" />
- </tr>
- </table>
- </c:otherwise>
- </c:choose>
- </td>
- </tr>
-</c:if>
-<tr>
- <th>POM Snippet</th>
- <td>
- <archiva:copy-paste-snippet object="${repository}" wrapper="toggle" />
- </td>
-</tr>
-
-
- <c:set var="str" value="${repository.id}" />
- <jsp:useBean id="str" type="java.lang.String" scope="page"/>
- <c:set var="location" value="${repository.location}"/>
- <jsp:useBean id="location" type="java.lang.String" scope="page"/>
-
- <%-- TODO: fix this hard coding - make stage repository configuration more transparent than the actual ManagedRepositoryConfiguration --%>
- <c:if test='<%= new File (new File(location ).getParent() ,str + "-stage" ).exists()%>'>
- <tr>
- <th>
- stage repository location
- </th>
- <td>
- ${repository.location}${'-stage'}
- </td>
- </tr>
- <redback:ifAuthorized permission="archiva-merge-repository" resource="${repository.id}">
- <tr>
- <th>Merge Actions</th>
- <td>
- <s:form action="merge" theme="simple">
- <s:hidden name="repoid" value="%{#attr.repository.id}"/>
- <%--<s:hidden name="repository" value="%{repository}"/>--%>
- <table>
- <tr>
- <td><s:submit id="Merge" value="Merge"/></td>
- </tr>
- </table>
- </s:form>
- </td>
- </tr>
- </redback:ifAuthorized>
-
-
- </c:if>
-
-
-
-</table>
-
-</div>
-</c:forEach>
-
-</c:otherwise>
-</c:choose>
-
-<div class="controls">
- <redback:ifAuthorized permission="archiva-manage-configuration">
- <s:url id="addRepositoryUrl" action="addRemoteRepository"/>
- <s:a href="%{addRepositoryUrl}">
- <img src="<c:url value="/images/icons/create.png" />" alt="" width="16" height="16"/>
- Add
- </s:a>
- </redback:ifAuthorized>
-</div>
-<h2>Remote Repositories</h2>
-
-<c:choose>
- <c:when test="${empty (remoteRepositories)}">
- <%-- No Remote Repositories. --%>
- <strong>There are no remote repositories configured yet.</strong>
- </c:when>
- <c:otherwise>
- <%-- Display the repositories. --%>
- <c:forEach items="${remoteRepositories}" var="repository" varStatus="i">
- <c:choose>
- <c:when test='${(i.index)%2 eq 0}'>
- <c:set var="rowColor" value="dark" scope="page"/>
- </c:when>
- <c:otherwise>
- <c:set var="rowColor" value="lite" scope="page"/>
- </c:otherwise>
- </c:choose>
-
- <div class="repository ${rowColor}">
-
- <div class="controls">
- <redback:ifAnyAuthorized permissions="archiva-manage-configuration">
- <s:url id="editRepositoryUrl" encode="true" action="editRemoteRepository">
- <s:param name="repoid" value="%{#attr.repository.id}"/>
- </s:url>
- <s:a href="%{editRepositoryUrl}">
- <img src="<c:url value="/images/icons/edit.png" />" alt="" width="16" height="16"/>
- Edit
- </s:a>
- <s:token/>
- <s:url id="deleteRepositoryUrl" encode="true" action="confirmDeleteRemoteRepository">
- <s:param name="repoid" value="%{#attr.repository.id}"/>
- <s:param name="struts.token.name">struts.token</s:param>
- <s:param name="struts.token"><s:property value="struts.token"/></s:param>
- </s:url>
- <s:a href="%{deleteRepositoryUrl}">
- <img src="<c:url value="/images/icons/delete.gif" />" alt="" width="16" height="16"/>
- Delete
- </s:a>
- </redback:ifAnyAuthorized>
- </div>
-
- <div style="float: left">
- <img src="<c:url value="/images/archiva-world.png"/>" alt="" width="32" height="32"/>
- </div>
-
- <h3 class="repository"><c:out value="${repository.name}" /></h3>
-
- <table class="infoTable">
- <tr>
- <th>Identifier</th>
- <td>
- <code><c:out value="${repository.id}" /></code>
- </td>
- </tr>
- <tr>
- <th>Name</th>
- <td>
- <code><c:out value="${repository.name}" /></code>
- </td>
- </tr>
- <tr>
- <th>URL</th>
- <td><c:out value="${repository.url}" /></td>
- </tr>
- <tr>
- <th>Type</th>
- <%-- TODO: can probably just use layout appended to a key prefix in i18n to simplify this --%>
- <td>
- <c:choose>
- <c:when test="${repository.layout == 'default'}">
- Maven 2.x Repository
- </c:when>
- <c:otherwise>
- Maven 1.x Repository
- </c:otherwise>
- </c:choose>
- </td>
- </tr>
- </table>
-
- </div>
- </c:forEach>
- </c:otherwise>
-</c:choose>
-
-</div>
-
-</div>
-
-</body>
-</html>
+++ /dev/null
-<%--
- ~ Licensed to the Apache Software Foundation (ASF) under one
- ~ or more contributor license agreements. See the NOTICE file
- ~ distributed with this work for additional information
- ~ regarding copyright ownership. The ASF licenses this file
- ~ to you under the Apache License, Version 2.0 (the
- ~ "License"); you may not use this file except in compliance
- ~ with the License. You may obtain a copy of the License at
- ~
- ~ http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing,
- ~ software distributed under the License is distributed on an
- ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- ~ KIND, either express or implied. See the License for the
- ~ specific language governing permissions and limitations
- ~ under the License.
- --%>
-
-<%@ page contentType="text/html; charset=UTF-8" %>
-<%@ taglib prefix="s" uri="/struts-tags" %>
-<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
-<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
-<%@ taglib prefix="redback" uri="/redback/taglib-1.0" %>
-<%@ taglib prefix="archiva" uri="/WEB-INF/tld/web-tags.tld" %>
-
-<html>
-<head>
- <title>Administration - Repository Groups</title>
- <s:head/>
-</head>
-
-<body>
-
-<h1>Administration - Repository Groups</h1>
-
-<c:url var="iconDeleteUrl" value="/images/icons/delete.gif"/>
-<c:url var="iconEditUrl" value="/images/icons/edit.png"/>
-<c:url var="iconCreateUrl" value="/images/icons/create.png"/>
-<c:url var="iconUpUrl" value="/images/icons/up.gif"/>
-<c:url var="iconDownUrl" value="/images/icons/down.gif"/>
-
-<div id="contentArea">
-
-<s:actionerror/>
-<s:actionmessage/>
-
-<div align="right">
- <redback:ifAnyAuthorized permissions="archiva-manage-configuration">
- <s:form name="addRepositoryGroup" action="addRepositoryGroup" namespace="/admin" validate="true">
- <s:textfield size="10" label="Identifier" name="repositoryGroup.id"/>
- <s:token/>
- <s:submit value="Add Group" cssClass="button"/>
- </s:form>
- </redback:ifAnyAuthorized>
-</div>
-
-<h2>Repository Groups</h2>
-
-<c:choose>
-<c:when test="${empty (repositoryGroups)}">
- <strong>No Repository Groups Defined.</strong>
-</c:when>
-<c:otherwise>
-
-<div class="admin">
-
-<c:forEach items="${repositoryGroups}" var="repositoryGroup" varStatus="i">
-
-<div class="repoGroup">
- <div class="managedRepo">
-
- <div style="float:right">
- <s:token/>
- <s:url id="deleteRepositoryGroupUrl" action="confirmDeleteRepositoryGroup">
- <s:param name="repoGroupId" value="%{#attr.repositoryGroup.key}" />
- <s:param name="struts.token.name">struts.token</s:param>
- <s:param name="struts.token"><s:property value="struts.token"/></s:param>
- </s:url>
- <s:a href="%{deleteRepositoryGroupUrl}" cssClass="delete">
- <img src="${iconDeleteUrl}"/>
- </s:a>
- </div>
-
- <img src="<c:url value="/images/archiva-splat-32.gif"/>"/>
- <p class="id">${repositoryGroup.key}</p>
- <p><a href="${baseUrl}/${repositoryGroup.key}/">${baseUrl}/${repositoryGroup.key}/</a></p>
- </div>
-
- <c:if test="${!empty (groupToRepositoryMap[repositoryGroup.key])}">
- <div class="repos">
- <s:form name="form%{#attr.i}" action="addRepositoryToGroup" namespace="/admin" validate="true">
- <s:hidden name="repoGroupId" value="%{#attr.repositoryGroup.key}"/>
- <s:select list="%{#attr.groupToRepositoryMap[#attr.repositoryGroup.key]}" name="repoId" theme="simple"/>
- <s:submit value="Add Repository" theme="simple" cssClass="button"/>
- </s:form>
- </div>
- </c:if>
-
- <c:set var="numberOfRepos" value="${fn:length(repositoryGroup.value.repositories)}" />
-
- <c:forEach items="${repositoryGroup.value.repositories}" var="repository" varStatus="r">
-
- <c:choose>
- <c:when test='${(r.index)%2 eq 0}'>
- <c:set var="rowColor" value="dark" scope="page"/>
- </c:when>
- <c:otherwise>
- <c:set var="rowColor" value="lite" scope="page"/>
- </c:otherwise>
- </c:choose>
-
- <div class="connector ${rowColor}">
- <div class="controls">
- <redback:ifAnyAuthorized permissions="archiva-manage-configuration">
- <s:url id="sortDownRepositoryUrl" action="sortDownRepositoryFromGroup">
- <s:param name="repoGroupId" value="%{#attr.repositoryGroup.key}"/>
- <s:param name="targetRepo" value="%{#attr.managedRepositories[#attr.repository].id}"/>
- </s:url>
- <s:url id="sortUpRepositoryUrl" action="sortUpRepositoryFromGroup">
- <s:param name="repoGroupId" value="%{#attr.repositoryGroup.key}"/>
- <s:param name="targetRepo" value="%{#attr.managedRepositories[#attr.repository].id}"/>
- </s:url>
- <s:url id="removeRepositoryUrl" action="removeRepositoryFromGroup">
- <s:param name="repoGroupId" value="%{#attr.repositoryGroup.key}"/>
- <s:param name="repoId" value="%{#attr.managedRepositories[#attr.repository].id}"/>
- </s:url>
- <c:if test="${r.count > 1}">
- <s:a href="%{sortUpRepositoryUrl}" cssClass="up" title="Move Repository Up">
- <img src="${iconUpUrl}"/>
- </s:a>
- </c:if>
- <c:if test="${r.count < numberOfRepos}">
- <s:a href="%{sortDownRepositoryUrl}" cssClass="down" title="Move Repository Down">
- <img src="${iconDownUrl}"/>
- </s:a>
- </c:if>
- <s:a href="%{removeRepositoryUrl}" cssClass="delete" title="Delete Repository">
- <img src="${iconDeleteUrl}"/>
- </s:a>
- </redback:ifAnyAuthorized>
- </div>
-
- <h4>Repository</h4>
-
- <div class="managedRepo">
- <img src="<c:url value="/images/archiva-splat-32.gif"/>"/>
- <p class="id">${repository}</p>
- <p class="name">${managedRepositories[repository].name}</p>
- <p class="url"><a href="${baseUrl}/${managedRepositories[repository].id}/">${baseUrl}/${managedRepositories[repository].id}</a></p>
- </div>
- </div> <%-- repository --%>
- </c:forEach>
-
-</div> <%-- repository group --%>
-</c:forEach>
-</div> <%-- admin --%>
-
-</c:otherwise>
-</c:choose>
-</div> <%-- content area --%>
-
-</body>
-</html>
-
+++ /dev/null
-<%--
- ~ Licensed to the Apache Software Foundation (ASF) under one
- ~ or more contributor license agreements. See the NOTICE file
- ~ distributed with this work for additional information
- ~ regarding copyright ownership. The ASF licenses this file
- ~ to you under the Apache License, Version 2.0 (the
- ~ "License"); you may not use this file except in compliance
- ~ with the License. You may obtain a copy of the License at
- ~
- ~ http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing,
- ~ software distributed under the License is distributed on an
- ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- ~ KIND, either express or implied. See the License for the
- ~ specific language governing permissions and limitations
- ~ under the License.
- --%>
-
-<%@ page contentType="text/html; charset=UTF-8" %>
-<%@ taglib prefix="s" uri="/struts-tags"%>
-<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
-<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
-<%@ taglib prefix="redback" uri="/redback/taglib-1.0" %>
-<%@ taglib prefix="archiva" uri="/WEB-INF/tld/web-tags.tld" %>
-
-<html>
-<head>
-<title>Administration - Repository Scanning</title>
-<s:head />
-</head>
-
-<body>
-
-<h1>Administration - Repository Scanning</h1>
-
-<div id="contentArea">
-
-<s:actionerror />
-<s:actionmessage />
-
-<c:url var="iconDeleteUrl" value="/images/icons/delete.gif" />
-<c:url var="iconCreateUrl" value="/images/icons/create.png" />
-<s:url id="removeFiletypePatternUrl" action="repositoryScanning" method="removeFiletypePattern"/>
-<s:url id="addFiletypePatternUrl" action="repositoryScanning" method="addFiletypePattern"/>
-
-<script type="text/javascript">
-<!--
- function removeFiletypePattern(action, filetypeId, pattern)
- {
- var f = document.getElementById('filetypeForm');
-
- f.action = action;
- f['pattern'].value = pattern;
- f['fileTypeId'].value = filetypeId;
- f.submit();
- }
-
- function addFiletypePattern(action, filetypeId, newPatternId)
- {
- var f = document.forms['filetypeForm'];
-
- f.action = action;
- f.elements['pattern'].value = document.getElementById(newPatternId).value;
- f.elements['fileTypeId'].value = filetypeId;
- f.submit();
- }
-//-->
-</script>
-
-<div class="admin">
-<h2>Repository Scanning - File Types</h2>
-
-<c:choose>
- <c:when test="${empty (fileTypeMap)}">
- <%-- No File Types. Eeek! --%>
- <strong>There are no file types configured.</strong>
- </c:when>
- <c:otherwise>
- <%-- Display the filetypes. --%>
-
- <s:form method="post" action="repositoryScanning"
- namespace="/admin" validate="false"
- id="filetypeForm" theme="simple">
- <s:token/>
- <input type="hidden" name="pattern" />
- <input type="hidden" name="fileTypeId" />
- </s:form>
-
- <c:forEach items="${fileTypeIds}" var="filetypeId" varStatus="j">
-
- <div class="filetype">
-
- <div class="controls"><%-- Does this even make sense for file types? --%></div>
-
- <h3 class="filetype">${filetypeId}</h3>
-
- <table>
- <c:forEach items="${fileTypeMap[filetypeId].patterns}" var="pattern" varStatus="i">
- <c:choose>
- <c:when test='${(i.index)%2 eq 0}'>
- <c:set var="bgcolor" value="even" scope="page" />
- </c:when>
- <c:otherwise>
- <c:set var="bgcolor" value="odd" scope="page" />
- </c:otherwise>
- </c:choose>
-
- <c:set var="escapedPattern" value="${fn:escapeXml(pattern)}" scope="page" />
-
- <tr>
- <td class="pattern ${bgcolor}">
- <code>${escapedPattern}</code>
- </td>
- <td class="controls ${bgcolor}">
- <s:a href="#" title="Remove [%{#attr.escapedPattern}] Pattern from [%{#attr.filetypeId}]"
- onclick="removeFiletypePattern( '%{#attr.removeFiletypePatternUrl}', '%{#attr.filetypeId}', '%{#attr.escapedPattern}' )"
- theme="simple">
- <img src="${iconDeleteUrl}" />
- </s:a>
- </td>
- </tr>
- </c:forEach>
- <tr>
- <td>
- <s:textfield size="40"
- id="newpattern_%{#attr.j.index}"
- theme="simple" />
- </td>
- <td>
- <s:a href="#"
- title="Add Pattern to [%{#attr.filetypeId}]"
- onclick="addFiletypePattern( '%{#attr.addFiletypePatternUrl}', '%{#attr.filetypeId}', 'newpattern_%{#attr.j.index}' )"
- theme="simple">
- <img src="${iconCreateUrl}" />
- </s:a>
- </td>
- </tr>
- </table>
-
- </div>
- </c:forEach>
-
- </c:otherwise>
-</c:choose>
-
-<h2>Repository Scanning - Consumers of Known Content</h2>
-
-<c:choose>
- <c:when test="${empty (knownContentConsumers)}">
- <%-- No Good Consumers. Eeek! --%>
- <strong>There are no consumers of known content available.</strong>
- </c:when>
- <c:otherwise>
- <%-- Display the consumers. --%>
-
- <s:form method="post" action="repositoryScanning!updateKnownConsumers"
- namespace="/admin" validate="false" theme="simple">
- <s:token/>
- <table class="consumers">
- <tr>
- <th> </th>
- <th>Enabled?</th>
- <th>ID</th>
- <th>Description</th>
- </tr>
- <c:forEach items="${knownContentConsumers}" var="consumer" varStatus="i">
- <c:choose>
- <c:when test='${(i.index)%2 eq 0}'>
- <c:set var="bgcolor" value="even" scope="page" />
- </c:when>
- <c:otherwise>
- <c:set var="bgcolor" value="odd" scope="page" />
- </c:otherwise>
- </c:choose>
-
- <tr>
- <td class="${bgcolor}">
- <input type="checkbox" name="enabledKnownContentConsumers" theme="simple" value="${consumer.id}" <c:if test="${consumer.enabled}">checked</c:if> />
- </td>
- <td class="${bgcolor}">
- <c:if test="${consumer.enabled}">
- <strong>enabled</strong>
- </c:if>
- </td>
- <td class="${bgcolor}">
- <code>${consumer.id}</code>
- </td>
- <td class="${bgcolor}">${consumer.description}</td>
- </tr>
- </c:forEach>
- <tr>
- <td colspan="4">
- <s:submit value="Update Consumers" />
- </td>
- </tr>
- </table>
- </s:form>
-
- </c:otherwise>
-</c:choose>
-
-
-<h2>Repository Scanning - Consumers of Invalid Content</h2>
-
-<c:choose>
- <c:when test="${empty (invalidContentConsumers)}">
- <%-- No Consumers. Eeek! --%>
- <strong>There are no consumers of invalid content available.</strong>
- </c:when>
- <c:otherwise>
- <%-- Display the consumers. --%>
-
- <s:form method="post" action="repositoryScanning!updateInvalidConsumers"
- namespace="/admin" validate="false" theme="simple">
- <s:token/>
- <table class="consumers">
- <tr>
- <th> </th>
- <th>Enabled?</th>
- <th>ID</th>
- <th>Description</th>
- </tr>
- <c:forEach items="${invalidContentConsumers}" var="consumer" varStatus="i">
- <c:choose>
- <c:when test='${(i.index)%2 eq 0}'>
- <c:set var="bgcolor" value="even" scope="page" />
- </c:when>
- <c:otherwise>
- <c:set var="bgcolor" value="odd" scope="page" />
- </c:otherwise>
- </c:choose>
-
- <tr>
- <td class="${bgcolor}">
- <input type="checkbox" name="enabledInvalidContentConsumers" theme="simple" value="${consumer.id}" <c:if test="${consumer.enabled}">checked</c:if> />
- </td>
- <td class="${bgcolor}">
- <c:if test="${consumer.enabled}">
- <strong>enabled</strong>
- </c:if>
- </td>
- <td class="${bgcolor}">
- <code>${consumer.id}</code>
- </td>
- <td class="${bgcolor}">${consumer.description}</td>
- </tr>
- </c:forEach>
- <tr>
- <td colspan="4">
- <s:submit value="Update Consumers" />
- </td>
- </tr>
- </table>
- </s:form>
-
- </c:otherwise>
-</c:choose></div>
-</div>
-</body>
-</html>
+++ /dev/null
-<%@ page import="java.util.Date" %>
-<%--
- ~ Licensed to the Apache Software Foundation (ASF) under one
- ~ or more contributor license agreements. See the NOTICE file
- ~ distributed with this work for additional information
- ~ regarding copyright ownership. The ASF licenses this file
- ~ to you under the Apache License, Version 2.0 (the
- ~ "License"); you may not use this file except in compliance
- ~ with the License. You may obtain a copy of the License at
- ~
- ~ http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing,
- ~ software distributed under the License is distributed on an
- ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- ~ KIND, either express or implied. See the License for the
- ~ specific language governing permissions and limitations
- ~ under the License.
- --%>
-
-<%@ page contentType="text/html; charset=UTF-8" %>
-<%@ taglib prefix="s" uri="/struts-tags" %>
-<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
-<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
-<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
-
-<html>
-<head>
- <title>Administration - System Status</title>
- <s:head/>
-</head>
-
-<body>
-
-<h1>Administration - System Status</h1>
-
-<div id="contentArea">
-
- <s:actionerror/>
- <s:actionmessage/>
-
- <h2>Queues</h2>
-
- <table>
- <tr>
- <th>Queue</th>
- <th>Size</th>
- </tr>
- <c:forEach var="queueEntry" items="${queues}">
- <c:set var="queue" value="${queueEntry.value.queueSnapshot}"/>
- <tr>
- <td>${queueEntry.key}</td>
- <td align="right">${fn:length(queue)}</td>
- </tr>
- </c:forEach>
- </table>
-
- <h2>Repository Scans Currently in Progress</h2>
-
- <c:choose>
- <c:when test="${!empty scanner.inProgressScans}">
- <table>
- <tr>
- <th>Repository</th>
- <th>Files processed</th>
- <th>New files</th>
- </tr>
- <c:forEach var="scan" items="${scanner.inProgressScans}">
- <tr>
- <td>${scan.repository.name} (${scan.repository.id})</td>
- <td align="right">${scan.stats.totalFileCount}</td>
- <td align="right">${scan.stats.newFileCount}</td>
- </tr>
- <tr>
- <td colspan="3">
- <table>
- <tr>
- <th>Name</th>
- <th>Total</th>
- <th>Average</th>
- <th>Invocations</th>
- </tr>
- <c:forEach var="entry" items="${scan.consumerTimings}">
- <tr>
- <c:set var="total" value="${scan.consumerCounts[entry.key]}"/>
- <td>${entry.key}</td>
- <td align="right">${entry.value}ms</td>
- <td align="right"><fmt:formatNumber value="${entry.value / total}" pattern="#"/>ms</td>
- <td align="right">${total}</td>
- </tr>
- </c:forEach>
- </table>
- </td>
- </tr>
- </c:forEach>
- </table>
- </c:when>
- <c:otherwise>
- <p>No scans in progress.</p>
- </c:otherwise>
- </c:choose>
-
- <h2>Caches</h2>
-
- <table>
- <tr>
- <th>Cache</th>
- <th>Size</th>
- <th>Hits</th>
- <th>Misses</th>
- <th>Hit Ratio</th>
- <th> </th>
- </tr>
- <c:forEach var="cacheEntry" items="${caches}">
- <c:set var="flushCacheUrl">
- <s:url action="flushCache">
- <s:param name="cacheKey">${cacheEntry.key}</s:param>
- </s:url>
- </c:set>
- <tr>
- <td>${cacheEntry.key}</td>
- <td align="right">${cacheEntry.value.statistics.size}</td>
- <td align="right">${cacheEntry.value.statistics.cacheHits}</td>
- <td align="right">${cacheEntry.value.statistics.cacheMiss}</td>
- <td align="right"><fmt:formatNumber value="${cacheEntry.value.statistics.cacheHitRate}" pattern="#%"/></td>
- <td><a href="${flushCacheUrl}">Flush</a></td>
- </tr>
- </c:forEach>
- </table>
-
- <h2>Memory Usage</h2>
-
- <p>${memoryStatus}</p>
-
- <h2>Current Time</h2>
-
- <p><%= new Date() %></p>
-
- <h2>Version Information</h2>
-
- Build number: <s:property value="archivaBuildNumber"/> - Build Timestamp: <s:property value="archivaBuildTimestampDateStr"/>
-
- </div>
-
-</body>
-</html>
+++ /dev/null
-<%--
- ~ Licensed to the Apache Software Foundation (ASF) under one
- ~ or more contributor license agreements. See the NOTICE file
- ~ distributed with this work for additional information
- ~ regarding copyright ownership. The ASF licenses this file
- ~ to you under the Apache License, Version 2.0 (the
- ~ "License"); you may not use this file except in compliance
- ~ with the License. You may obtain a copy of the License at
- ~
- ~ http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing,
- ~ software distributed under the License is distributed on an
- ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- ~ KIND, either express or implied. See the License for the
- ~ specific language governing permissions and limitations
- ~ under the License.
- --%>
-
-<%@ page contentType="text/html; charset=UTF-8" %>
-<%@ taglib prefix="s" uri="/struts-tags" %>
-<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
-
-<html>
-<head>
- <title>Security Alert Page</title>
- <s:head/>
-</head>
-
-<body>
-
-<div id="contentArea">
- <div id="searchBox">
- <div id="results">
- You are not authorized for this activity.
- </div>
- </div>
-</div>
-
-<div class="clear">
- <hr/>
-</div>
-
-</body>
-
-</html>
+++ /dev/null
-<%--
- ~ Licensed to the Apache Software Foundation (ASF) under one
- ~ or more contributor license agreements. See the NOTICE file
- ~ distributed with this work for additional information
- ~ regarding copyright ownership. The ASF licenses this file
- ~ to you under the Apache License, Version 2.0 (the
- ~ "License"); you may not use this file except in compliance
- ~ with the License. You may obtain a copy of the License at
- ~
- ~ http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing,
- ~ software distributed under the License is distributed on an
- ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- ~ KIND, either express or implied. See the License for the
- ~ specific language governing permissions and limitations
- ~ under the License.
- --%>
-
-<%@ page contentType="text/html; charset=UTF-8" %>
-<%@ taglib prefix="s" uri="/struts-tags" %>
-<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
-<%@ taglib prefix="archiva" uri="/WEB-INF/tld/web-tags.tld" %>
-<%@ taglib prefix="redback" uri="/redback/taglib-1.0" %>
-
-<html>
-<head>
- <title>Browse Repository</title>
- <s:head/>
-
- <script type="text/javascript" src="<c:url value='/js/jquery-1.6.1.min.js'/>"></script>
- <script type="text/javascript">
- $(document).ready(function(){
-
- $("table.infoTable").hide();
- $("a.expand").click(function(event){
- event.preventDefault();
- $(this).next().toggle("slow");
- });
- });
- </script>
-
-</head>
-
-<body>
-
-<h1>Browse Repository</h1>
-
-<div id="contentArea">
- <c:if test="${not empty groupId}">
- <p>
- <archiva:groupIdLink var="${groupId}" includeTop="true" />
- <c:if test="${not empty artifactId}">
- <strong>${artifactId}</strong>
- </c:if>
- </p>
- </c:if>
-
- <c:if test="${not empty namespaces}">
- <div id="nameColumn">
- <h2>Groups</h2>
- <ul>
- <c:forEach items="${namespaces}" var="groupId">
- <c:set var="url">
- <s:url action="browseGroup" namespace="/">
- <s:param name="groupId" value="%{#attr.groupId}"/>
- </s:url>
- </c:set>
- <li><a href="${url}">${groupId}/</a></li>
- </c:forEach>
- </ul>
- </div>
- </c:if>
-
- <c:if test="${not empty projectIds}">
- <div id="nameColumn">
- <h2>Artifacts</h2>
- <ul>
- <c:url var="rssFeedIconUrl" value="/images/icons/rss-feed.png"/>
- <c:forEach items="${projectIds}" var="artifactId">
- <c:set var="url">
- <s:url action="browseArtifact" namespace="/">
- <s:param name="groupId" value="%{#attr.groupId}"/>
- <s:param name="artifactId" value="%{#attr.artifactId}"/>
- </s:url>
- </c:set>
- <c:url var="rssUrl" value="/feeds/${groupId}/${artifactId}"/>
- <li>
- <a href="${url}">${artifactId}/</a>
- <a href="${rssUrl}">
- <img src="${rssFeedIconUrl}" />
- </a>
- </li>
- </c:forEach>
- </ul>
- </div>
- </c:if>
-
- <c:if test="${not empty projectVersions}">
- <%-- show shared project information (MRM-1041) TODO - share JSP code with artifactInfo.jspf --%>
-
- <c:set var="mavenFacet" value="${sharedModel.facets['org.apache.archiva.metadata.repository.storage.maven2.project']}" />
- <h2>Versions</h2>
- <div id="nameColumn" class="versions">
- <a class="expand" href="#">Artifact Info</a>
- <table class="infoTable">
- <tr>
- <th>Group ID</th>
- <td>${mavenFacet.groupId}</td>
- </tr>
- <tr>
- <th>Artifact ID</th>
- <td>${mavenFacet.artifactId}</td>
- </tr>
- <c:if test="${(mavenFacet.packaging != null) && (!empty mavenFacet.packaging)}">
- <tr>
- <th>Packaging</th>
- <td><code>${mavenFacet.packaging}</code></td>
- </tr>
- </c:if>
- <c:if test="${(sharedModel.name != null) && (!empty sharedModel.name)}">
- <tr>
- <th>Name</th>
- <td><code>${sharedModel.name}</code></td>
- </tr>
- </c:if>
- <c:if test="${sharedModel.organization != null}">
- <tr>
- <th>Organisation</th>
- <td>
- <c:choose>
- <c:when test="${(sharedModel.organization.url != null) && (!empty sharedModel.organization.url)}">
- <a href="${sharedModel.organization.url}">${sharedModel.organization.name}</a>
- </c:when>
- <c:otherwise>
- ${sharedModel.organization.name}
- </c:otherwise>
- </c:choose>
- </td>
- </tr>
- </c:if>
- <c:if test="${sharedModel.issueManagement != null}">
- <tr>
- <th>Issue Tracker</th>
- <td>
- <c:choose>
- <c:when test="${!empty (sharedModel.issueManagement.url)}">
- <a href="${sharedModel.issueManagement.url}">${sharedModel.issueManagement.system}</a>
- </c:when>
- <c:otherwise>
- ${sharedModel.issueManagement.system}
- </c:otherwise>
- </c:choose>
- </td>
- </tr>
- </c:if>
- <c:if test="${sharedModel.ciManagement != null}">
- <tr>
- <th>Continuous Integration</th>
- <td>
- <c:choose>
- <c:when test="${!empty (sharedModel.ciManagement.url)}">
- <a href="${sharedModel.ciManagement.url}">${sharedModel.ciManagement.system}</a>
- </c:when>
- <c:otherwise>
- ${sharedModel.ciManagement.system}
- </c:otherwise>
- </c:choose>
- </td>
- </tr>
- </c:if>
- </table>
- </div>
-
- <ul>
- <c:forEach items="${projectVersions}" var="version">
- <c:set var="url">
- <s:url action="showArtifact" namespace="/">
- <s:param name="groupId" value="%{#attr.groupId}"/>
- <s:param name="artifactId" value="%{#attr.artifactId}"/>
- <s:param name="version" value="%{#attr.version}"/>
- </s:url>
- </c:set>
- <li><a href="${url}">${version}/</a></li>
- </c:forEach>
- </ul>
- </c:if>
-
-</div>
-
-</body>
-</html>
+++ /dev/null
-<%--
- ~ Licensed to the Apache Software Foundation (ASF) under one
- ~ or more contributor license agreements. See the NOTICE file
- ~ distributed with this work for additional information
- ~ regarding copyright ownership. The ASF licenses this file
- ~ to you under the Apache License, Version 2.0 (the
- ~ "License"); you may not use this file except in compliance
- ~ with the License. You may obtain a copy of the License at
- ~
- ~ http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing,
- ~ software distributed under the License is distributed on an
- ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- ~ KIND, either express or implied. See the License for the
- ~ specific language governing permissions and limitations
- ~ under the License.
- --%>
-
-<%@ page contentType="text/html; charset=UTF-8" %>
-<%@ taglib uri="/struts-tags" prefix="s" %>
-<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
-<%@ taglib prefix="my" tagdir="/WEB-INF/tags" %>
-
-<div id="companyLogo">
- <s:set name="organisationLogo" value="organisationLogo"/>
- <c:choose>
- <c:when test="${!empty (organisationLogo)}">
- <s:set name="organisationUrl" value="organisationUrl"/>
- <c:choose>
- <c:when test="${!empty (organisationUrl)}">
- <a href='<c:out value="${organisationUrl}" />'>
- <img src='<c:out value="${organisationLogo}" />' title='<c:out value="${organisationName}" />'/>
- </a>
- </c:when>
- <c:otherwise>
- <img src='<c:out value="${organisationLogo}" />' title='<c:out value="${organisationName}" />'/>
- </c:otherwise>
- </c:choose>
- </c:when>
- <c:otherwise>
- <my:currentWWUrl action="index" namespace="/">
- <c:if test="${is19Sep}">
- <img src="<c:url value='/images/19Sep-logo.png' />"/>
- </c:if>
- <c:if test="${!is19Sep}">
- <img src="<c:url value='/images/archiva.png' />"/>
- </c:if>
- </my:currentWWUrl>
- </c:otherwise>
- </c:choose>
-</div>
\ No newline at end of file
+++ /dev/null
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-
-<%--
- ~ Licensed to the Apache Software Foundation (ASF) under one
- ~ or more contributor license agreements. See the NOTICE file
- ~ distributed with this work for additional information
- ~ regarding copyright ownership. The ASF licenses this file
- ~ to you under the Apache License, Version 2.0 (the
- ~ "License"); you may not use this file except in compliance
- ~ with the License. You may obtain a copy of the License at
- ~
- ~ http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing,
- ~ software distributed under the License is distributed on an
- ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- ~ KIND, either express or implied. See the License for the
- ~ specific language governing permissions and limitations
- ~ under the License.
- --%>
-
-<%@ page contentType="text/html; charset=UTF-8" %>
-<%@ taglib uri="http://www.opensymphony.com/sitemesh/decorator" prefix="decorator" %>
-<%@ taglib uri="/struts-tags" prefix="s" %>
-<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
-<%@ taglib prefix="my" tagdir="/WEB-INF/tags" %>
-<%@ taglib prefix="redback" uri="/redback/taglib-1.0" %>
-<%@ page import="java.util.Calendar" %>
-
-<html>
-<head>
- <title>Apache Archiva \
- <decorator:title default="Apache Archiva"/>
- </title>
-
- <link rel="stylesheet" href="<c:url value="/css/maven-base.css"/>" type="text/css" media="all"/>
- <link rel="stylesheet" href="<c:url value="/css/maven-theme.css"/>" type="text/css" media="all"/>
- <link rel="stylesheet" href="<c:url value="/css/redback/table.css"/>" type="text/css" media="all"/>
- <link rel="stylesheet" href="<c:url value="/css/site.css"/>" type="text/css" media="all"/>
- <link rel="stylesheet" href="<c:url value="/css/print.css"/>" type="text/css" media="print"/>
- <link rel="shortcut icon" href="<c:url value="/favicon.ico" />"/>
- <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
- <decorator:head />
-</head>
-
-<%
- int inceptionYear = 2005;
- Calendar cal = Calendar.getInstance();
- int currentYear = cal.get( Calendar.YEAR );
- String copyrightRange = String.valueOf( inceptionYear );
- if ( inceptionYear != currentYear )
- {
- copyrightRange = copyrightRange + "-" + String.valueOf( currentYear );
- }
-
- if ( cal.get( Calendar.MONTH ) == Calendar.SEPTEMBER && cal.get( Calendar.DAY_OF_MONTH ) == 19 )
- {
- request.setAttribute( "is19Sep", "true" );
- }
-%>
-
-<s:if test="%{#application['uiOptions'].disableEasterEggs}">
- <c:remove var="is19Sep" scope="request" />
-</s:if>
-
-<body onload="<decorator:getProperty property="body.onload" />" class="composite"
- <c:if test="${is19Sep}">
- style="background: url('<c:url value="/images/19Sep.png"/>') no-repeat bottom right"
- </c:if>
->
-<div id="breadcrumbs">
- <div class="xright">
- <%@ include file="/WEB-INF/jsp/redback/include/securityLinks.jsp" %>
- </div>
- <div class="clear">
- <hr/>
- </div>
-</div>
-
-
-<div id="topSearchBox">
- <s:form method="get" action="quickSearch" namespace="/" validate="true" id="quickSearchBoxForm">
- <s:textfield id="quickSearchBox" label="Search for" size="30" name="q"/>
- </s:form>
-</div>
-
-<div id="leftColumn">
- <div id="navcolumn">
- <s:action namespace="/components" name="companyInfo" executeResult="true"/>
- <h5>Find</h5>
- <ul>
- <li class="none">
- <my:currentWWUrl action="index" namespace="/" linkId="menuSearchLink">Search</my:currentWWUrl>
- </li>
-
- <s:if test="%{#application['uiOptions'].showFindArtifacts}">
- <li class="none">
- <my:currentWWUrl action="findArtifact" namespace="/" linkId="menuFindArtifactLink">Find Artifact</my:currentWWUrl>
- </li>
- </s:if>
-
- <li class="none">
- <my:currentWWUrl action="browse" namespace="/" linkId="menuBrowseLink">Browse</my:currentWWUrl>
- </li>
- </ul>
-
- <redback:ifAnyAuthorized permissions="archiva-upload-repository,archiva-delete-artifact,archiva-manage-users,archiva-access-reports,archiva-manage-configuration,archiva-view-audit-logs">
- <h5>Manage</h5>
- <ul>
- <redback:ifAuthorized permission="archiva-access-reports">
- <li class="none">
- <my:currentWWUrl action="pickReport" namespace="/report">Reports</my:currentWWUrl>
- </li>
- </redback:ifAuthorized>
- <redback:ifAuthorized permission="archiva-view-audit-logs">
- <li class="none">
- <my:currentWWUrl action="queryAuditLogReport" namespace="/report">Audit Log Report</my:currentWWUrl>
- </li>
- </redback:ifAuthorized>
- <redback:ifAuthorized permission="archiva-manage-users">
- <li class="none">
- <my:currentWWUrl action="userlist" namespace="/security">User Management</my:currentWWUrl>
- </li>
- </redback:ifAuthorized>
- <redback:ifAuthorized permission="archiva-manage-users">
- <li class="none">
- <my:currentWWUrl action="roles" namespace="/security">User Roles</my:currentWWUrl>
- </li>
- </redback:ifAuthorized>
- <redback:ifAuthorized permission="archiva-manage-configuration">
- <li class="none">
- <my:currentWWUrl action="configureAppearance" namespace="/admin">Appearance</my:currentWWUrl>
- </li>
- </redback:ifAuthorized>
- <redback:ifAuthorized permission="archiva-upload-repository">
- <li class="none">
- <my:currentWWUrl action="upload" namespace="/">Upload Artifact</my:currentWWUrl>
- </li>
- </redback:ifAuthorized>
- <redback:ifAuthorized permission="archiva-delete-artifact">
- <li class="none">
- <my:currentWWUrl action="deleteArtifact" namespace="/">Delete Artifact</my:currentWWUrl>
- </li>
- </redback:ifAuthorized>
- <%-- TODO: future options here.
- * Repository Statistics.
- * Web Services Statistics.
- --%>
- </ul>
- </redback:ifAnyAuthorized>
-
- <redback:ifAuthorized permission="archiva-manage-configuration">
- <h5>Administration</h5>
- <ul>
- <li class="none">
- <my:currentWWUrl action="repositoryGroups" namespace="/admin">Repository Groups</my:currentWWUrl>
- </li>
- <li class="none">
- <my:currentWWUrl action="repositories" namespace="/admin">Repositories</my:currentWWUrl>
- </li>
- <li class="none">
- <my:currentWWUrl action="proxyConnectors" namespace="/admin">Proxy Connectors</my:currentWWUrl>
- </li>
- <li class="none">
- <my:currentWWUrl action="legacyArtifactPath" namespace="/admin">Legacy Support</my:currentWWUrl>
- </li>
- <li class="none">
- <my:currentWWUrl action="networkProxies" namespace="/admin">Network Proxies</my:currentWWUrl>
- </li>
- <li class="none">
- <my:currentWWUrl action="repositoryScanning" namespace="/admin">Repository Scanning</my:currentWWUrl>
- </li>
- <li class="none">
- <my:currentWWUrl action="systemStatus" namespace="/admin">System Status</my:currentWWUrl>
- </li>
- <li class="none">
- <my:currentWWUrl action="editNetworkConfiguration" namespace="/admin">Network Configuration</my:currentWWUrl>
- </li>
- <%-- TODO: future options here.
- * Repository Syncing Connectors. (rsync, ftp, scp, etc...)
- * Web Services (enable / disable), role based?
- --%>
- </ul>
- </redback:ifAuthorized>
-
- </div>
-</div>
-
-<div id="bodyColumn">
- <div id="contentBox">
- <decorator:body/>
- </div>
-</div>
-
-<div class="clear">
- <hr/>
-</div>
-
-<div id="footer">
- <div class="xleft">
- <a target="_blank" href="http://archiva.apache.org/">Apache Ar<c:if test="${is19Sep}">rr</c:if>chiva - <s:property value="archivaVersion"/></a>
- </div>
- <div class="xright">
- Copyright © <%= copyrightRange%> <a target="_blank" href="http://www.apache.org/">The Apache Software Foundation</a>
- </div>
-
- <div class="clear">
- <hr/>
-
- </div>
-</div>
-</body>
-</html>
+++ /dev/null
-<%--
- ~ Licensed to the Apache Software Foundation (ASF) under one
- ~ or more contributor license agreements. See the NOTICE file
- ~ distributed with this work for additional information
- ~ regarding copyright ownership. The ASF licenses this file
- ~ to you under the Apache License, Version 2.0 (the
- ~ "License"); you may not use this file except in compliance
- ~ with the License. You may obtain a copy of the License at
- ~
- ~ http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing,
- ~ software distributed under the License is distributed on an
- ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- ~ KIND, either express or implied. See the License for the
- ~ specific language governing permissions and limitations
- ~ under the License.
- --%>
-
-<%@ page contentType="text/html; charset=UTF-8" %>
-<%@ taglib prefix="s" uri="/struts-tags" %>
-<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
-
-<html>
-<head>
- <title>Delete Artifact</title>
- <s:head/>
-</head>
-
-<body>
-<h1>Delete Artifact</h1>
-
- <%-- changed the structure of displaying errorMessages & actionMessages in order for them to be escaped. --%>
- <s:if test="hasActionErrors()">
- <ul>
- <s:iterator value="actionErrors">
- <li><span class="errorMessage"><s:property escape="true" /></span></li>
- </s:iterator>
- </ul>
- </s:if>
- <s:if test="hasActionMessages()">
- <ul>
- <s:iterator value="actionMessages">
- <li><span class="actionMessage"><s:property escape="true" /></span></li>
- </s:iterator>
- </ul>
- </s:if>
-
- <div id="contentArea">
- <s:form action="deleteArtifact!doDelete" namespace="/" method="post" validate="true">
- <%@ include file="/WEB-INF/jsp/include/deleteArtifactForm.jspf" %>
- <s:token/>
- <s:submit/>
- </s:form>
- </div>
-
-</body>
-</html>
+++ /dev/null
-<%--
- ~ Licensed to the Apache Software Foundation (ASF) under one
- ~ or more contributor license agreements. See the NOTICE file
- ~ distributed with this work for additional information
- ~ regarding copyright ownership. The ASF licenses this file
- ~ to you under the Apache License, Version 2.0 (the
- ~ "License"); you may not use this file except in compliance
- ~ with the License. You may obtain a copy of the License at
- ~
- ~ http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing,
- ~ software distributed under the License is distributed on an
- ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- ~ KIND, either express or implied. See the License for the
- ~ specific language governing permissions and limitations
- ~ under the License.
- --%>
-
-<%@ page contentType="text/html; charset=UTF-8" %>
-<%@ taglib prefix="s" uri="/struts-tags" %>
-
-<html>
-<head>
- <title>Find Artifact</title>
- <s:head/>
-</head>
-
-<body onload="document.checksumSearch.f.disabled = false">
-
-<h1>Find Artifact</h1>
-
-<div id="contentArea">
- <div id="searchBox">
- <s:if test="%{#application['uiOptions'].appletFindEnabled}">
- <script src="js/md5.js"></script>
- <script type="text/javascript">
- function handleChecksum()
- {
- var f = document.checksumSearch.f
- if ( f.value )
- {
- if ( f.value.indexOf("/") >= 0 || f.value.indexOf("\\") >= 0)
- {
- var s = document.ChecksumApplet.generateMd5( f.value );
- // If there is a space, it's an error message, not a checksum
- if ( s.indexOf(" ") >= 0 )
- {
- alert(s);
- }
- else
- {
- document.checksumSearch.q.value = s;
- }
- }
- else if ( f.files[0].getAsBinary )
- {
- document.checksumSearch.q.value = hex_md5(f.files[0].getAsBinary());
- }
- else
- {
- alert('This browser is not supported');
- }
- }
- }
- </script>
-
- <noscript>
- <span class="errorMessage">JavaScript is disabled: using the file browser will not work.</span>
- </noscript>
-
- <s:form method="POST" action="checksumSearch" namespace="/" onsubmit="this.f.disabled = true; return true;">
- <tr>
- <td class="tdLabel"><label for="checksumSearch_file" class="label">Search for:</label></td>
- <td>
- <input type="file" name="f" size="50" value="" id="checksumSearch_f" onchange="handleChecksum();"/>
- </td>
- </tr>
- <s:textfield label="Checksum" size="50" name="q"/>
- <s:submit value="Search"/>
- </s:form>
-
- <p>
- This allows you to search the repository using the checksum of an artifact that you are trying to identify.
- You can either specify the checksum to look for directly, or scan a local artifact file.
- </p>
-
- <p>
- To scan a local file, select the file you would like to locate in the remote repository.
- The entire file will
- <b>not</b>
- be uploaded to the server. See the progress bar below for progress of
- locally creating a checksum that is uploaded to the server after you hit "Search".
- <s:actionerror/>
- </p>
-
- <p>
- <applet code="org/apache/archiva/applet/ChecksumApplet.class"
- archive="archiva-applet.jar"
- width="400" height="20" name="ChecksumApplet">
- </applet>
- </p>
- </s:if>
- <s:else>
- <s:form method="POST" action="checksumSearch" namespace="/">
- <s:textfield label="Checksum" size="50" name="q"/>
- <s:submit value="Search"/>
- </s:form>
-
- <p>
- <s:actionerror/>
- </p>
- </s:else>
- </div>
-</div>
-
-</body>
-</html>
+++ /dev/null
-<%--
- ~ Licensed to the Apache Software Foundation (ASF) under one
- ~ or more contributor license agreements. See the NOTICE file
- ~ distributed with this work for additional information
- ~ regarding copyright ownership. The ASF licenses this file
- ~ to you under the Apache License, Version 2.0 (the
- ~ "License"); you may not use this file except in compliance
- ~ with the License. You may obtain a copy of the License at
- ~
- ~ http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing,
- ~ software distributed under the License is distributed on an
- ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- ~ KIND, either express or implied. See the License for the
- ~ specific language governing permissions and limitations
- ~ under the License.
- --%>
-
-<%@ page contentType="text/html; charset=UTF-8" %>
-<%@ taglib prefix="s" uri="/struts-tags" %>
-<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
-
-<html>
-<head>
- <title>Error Occurred</title>
- <s:head/>
-</head>
-
-<body>
-
-<h1>Error Occurred</h1>
-
-<s:actionerror/>
-
-</body>
-</html>
+++ /dev/null
-<%--
- ~ Licensed to the Apache Software Foundation (ASF) under one
- ~ or more contributor license agreements. See the NOTICE file
- ~ distributed with this work for additional information
- ~ regarding copyright ownership. The ASF licenses this file
- ~ to you under the Apache License, Version 2.0 (the
- ~ "License"); you may not use this file except in compliance
- ~ with the License. You may obtain a copy of the License at
- ~
- ~ http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing,
- ~ software distributed under the License is distributed on an
- ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- ~ KIND, either express or implied. See the License for the
- ~ specific language governing permissions and limitations
- ~ under the License.
- --%>
-
-<%@ page contentType="text/html; charset=UTF-8" %>
-<%@ taglib prefix="s" uri="/struts-tags" %>
-<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
-<%@ taglib prefix="my" tagdir="/WEB-INF/tags" %>
-
-<%-- TODO: paginate [MRM-491] --%>
-<c:forEach items="${dependencies}" var="dependency">
- <h3 class="artifact-title">
- <my:showArtifactTitle groupId="${dependency.groupId}" artifactId="${dependency.artifactId}"
- version="${dependency.version}"/>
-
- </h3>
-
- <p>
- <my:showArtifactLink groupId="${dependency.groupId}" artifactId="${dependency.artifactId}"
- version="${dependency.version}" scope="${dependency.scope}"
- classifier="${dependency.classifier}"/>
- </p>
-</c:forEach>
-<c:if test="${empty (dependencies)}">
- <strong>No results</strong>
-</c:if>
+++ /dev/null
-<%--
- ~ Licensed to the Apache Software Foundation (ASF) under one
- ~ or more contributor license agreements. See the NOTICE file
- ~ distributed with this work for additional information
- ~ regarding copyright ownership. The ASF licenses this file
- ~ to you under the Apache License, Version 2.0 (the
- ~ "License"); you may not use this file except in compliance
- ~ with the License. You may obtain a copy of the License at
- ~
- ~ http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing,
- ~ software distributed under the License is distributed on an
- ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- ~ KIND, either express or implied. See the License for the
- ~ specific language governing permissions and limitations
- ~ under the License.
- --%>
-
-<%@ page contentType="text/html; charset=UTF-8" %>
-<%@ taglib prefix="s" uri="/struts-tags" %>
-<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
-<%@ taglib prefix="archiva" uri="/WEB-INF/tld/web-tags.tld" %>
-
-<p>
- <archiva:groupIdLink var="${groupId}" includeTop="true" />
-
- <c:set var="url">
- <s:url action="browseArtifact" namespace="/">
- <s:param name="groupId" value="%{#attr.groupId}"/>
- <s:param name="artifactId" value="%{#attr.artifactId}"/>
- </s:url>
- </c:set>
- <a href="${url}">${artifactId}</a> /
- <strong>${version}</strong>
-
- <%-- TODO: new versions?
- (<strong class="statusFailed">Newer version available:</strong>
- <a href="artifact.html">2.0.3</a>)
- --%>
-</p>
-
-<c:if test="${!empty (model.description)}">
- <blockquote>${model.description}</blockquote>
-</c:if>
-
-<c:set var="mavenFacet" value="${model.facets['org.apache.archiva.metadata.repository.storage.maven2.project']}" />
-<table class="infoTable">
- <tr>
- <th>Repository</th>
- <td>${repositoryId}</td>
- </tr>
- <tr>
- <th>Group ID</th>
- <td>${mavenFacet.groupId}</td>
- </tr>
- <tr>
- <th>Artifact ID</th>
- <td>${mavenFacet.artifactId}</td>
- </tr>
- <tr>
- <th>Version</th>
- <td>${model.version}</td>
- </tr>
- <tr>
- <th>Packaging</th>
- <td><code>${mavenFacet.packaging}</code></td>
- </tr>
- <c:if test="${mavenFacet.parent != null}">
- <tr>
- <th>Parent</th>
- <td>
- ${mavenFacet.parent.groupId} ${mavenFacet.parent.artifactId} ${mavenFacet.parent.version}
- <c:set var="url">
- <s:url action="showArtifact" namespace="/">
- <s:param name="groupId" value="%{#attr.mavenFacet.parent.groupId}"/>
- <s:param name="artifactId" value="%{#attr.mavenFacet.parent.artifactId}"/>
- <s:param name="version" value="%{#attr.mavenFacet.parent.version}"/>
- </s:url>
- </c:set>
- (<a href="${url}">View</a>)
- </td>
- </tr>
- </c:if>
- <%-- TODO: deployment timestamp
- <tr>
- <th>Deployment Date</th>
- <td>
- 15 Jan 2006, 20:38:00 +1000
- </td>
- </tr>
- --%>
- <%-- TODO: origin
- <tr>
- <th>Origin</th>
- <td>
- <a href="...">Apache Repository</a>
- </td>
- </tr>
- --%>
-</table>
-
-<c:if test="${mavenFacet.packaging != 'pom'}">
- <h2>POM Snippet</h2>
- <c:choose>
- <c:when test="${mavenFacet.packaging == 'maven-plugin'}">
-<pre class="pom">
- <plugin>
- <groupId>${mavenFacet.groupId}</groupId>
- <artifactId>${mavenFacet.artifactId}</artifactId>
- <version>${version}</version>
- </plugin>
-</pre>
- </c:when>
- <c:otherwise>
-<pre class="pom">
- <dependency>
- <groupId>${mavenFacet.groupId}</groupId>
- <artifactId>${mavenFacet.artifactId}</artifactId>
- <version>${version}</version><c:if test="${mavenFacet.packaging != 'jar'}">
- <type>${mavenFacet.packaging}</type></c:if>
- </dependency>
-</pre>
- </c:otherwise>
- </c:choose>
-</c:if>
-
-<c:if test="${!empty (model.url) || model.organization != null || !empty (model.licenses)
- || model.issueManagement != null || model.ciManagement != null}">
-
- <h2>Other Details</h2>
- <table class="infoTable">
- <c:if test="${!empty (model.url)}">
- <tr>
- <th>URL</th>
- <td>
- <a href="${model.url}">${model.url}</a>
- </td>
- </tr>
- </c:if>
- <c:if test="${model.organization != null}">
- <tr>
- <th>Organisation</th>
- <td>
- <c:choose>
- <c:when test="${model.organization.url != null}">
- <a href="${model.organization.url}">${model.organization.name}</a>
- </c:when>
- <c:otherwise>
- ${model.organization.name}
- </c:otherwise>
- </c:choose>
- </td>
- </tr>
- </c:if>
- <c:if test="${!empty (model.licenses)}">
- <c:forEach items="${model.licenses}" var="license">
- <tr>
- <th>License</th>
- <td>
- <c:choose>
- <c:when test="${!empty (license.url)}">
- <a href="${license.url}">${license.name}</a>
- </c:when>
- <c:otherwise>
- ${license.name}
- </c:otherwise>
- </c:choose>
- </td>
- </tr>
- </c:forEach>
- </c:if>
- <c:if test="${model.issueManagement != null}">
- <tr>
- <th>Issue Tracker</th>
- <td>
- <c:choose>
- <c:when test="${!empty (model.issueManagement.url)}">
- <a href="${model.issueManagement.url}">${model.issueManagement.system}</a>
- </c:when>
- <c:otherwise>
- ${model.issueManagement.system}
- </c:otherwise>
- </c:choose>
- </td>
- </tr>
- </c:if>
- <c:if test="${model.ciManagement != null}">
- <tr>
- <th>Continuous Integration</th>
- <td>
- <c:choose>
- <c:when test="${!empty (model.ciManagement.url)}">
- <a href="${model.ciManagement.url}">${model.ciManagement.system}</a>
- </c:when>
- <c:otherwise>
- ${model.ciManagement.system}
- </c:otherwise>
- </c:choose>
- </td>
- </tr>
- </c:if>
- </table>
-</c:if>
-
-<c:if test="${model.scm != null}">
- <h2>SCM</h2>
- <table class="infoTable">
- <c:if test="${!empty (model.scm.connection)}">
- <tr>
- <th>Connection</th>
- <td>
- <code>${model.scm.connection}</code>
- </td>
- </tr>
- </c:if>
- <c:if test="${!empty (model.scm.developerConnection)}">
- <tr>
- <th>Dev. Connection</th>
- <td>
- <code>${model.scm.developerConnection}</code>
- </td>
- </tr>
- </c:if>
- <c:if test="${!empty (model.scm.url)}">
- <tr>
- <th>Viewer</th>
- <td>
- <a href="${model.scm.url}">${model.scm.url}</a>
- </td>
- </tr>
- </c:if>
- </table>
-</c:if>
-
+++ /dev/null
-<%--
- ~ Licensed to the Apache Software Foundation (ASF) under one
- ~ or more contributor license agreements. See the NOTICE file
- ~ distributed with this work for additional information
- ~ regarding copyright ownership. The ASF licenses this file
- ~ to you under the Apache License, Version 2.0 (the
- ~ "License"); you may not use this file except in compliance
- ~ with the License. You may obtain a copy of the License at
- ~
- ~ http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing,
- ~ software distributed under the License is distributed on an
- ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- ~ KIND, either express or implied. See the License for the
- ~ specific language governing permissions and limitations
- ~ under the License.
- --%>
-
-<%@ page contentType="text/html; charset=UTF-8" %>
-<%@ taglib prefix="s" uri="/struts-tags" %>
-<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
-<%@ taglib prefix="my" tagdir="/WEB-INF/tags" %>
-
-<c:forEach items="${reports}" var="report">
- <h3>
- ${report.groupId} : ${report.artifactId} : ${report.version} : ${report.classifier} : ${report.type}
- </h3>
- <ul>
- <c:forEach items="${repor.results}" var="result">
- <li>
- <b>${result.reason}</b>
- </li>
- </c:forEach>
- </ul>
-</c:forEach>
-<c:if test="${empty (reports)}">
- <strong>No reports for this artifact.</strong>
-</c:if>
+++ /dev/null
-<%--
- ~ Licensed to the Apache Software Foundation (ASF) under one
- ~ or more contributor license agreements. See the NOTICE file
- ~ distributed with this work for additional information
- ~ regarding copyright ownership. The ASF licenses this file
- ~ to you under the Apache License, Version 2.0 (the
- ~ "License"); you may not use this file except in compliance
- ~ with the License. You may obtain a copy of the License at
- ~
- ~ http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing,
- ~ software distributed under the License is distributed on an
- ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- ~ KIND, either express or implied. See the License for the
- ~ specific language governing permissions and limitations
- ~ under the License.
- --%>
-
-<%@ page contentType="text/html; charset=UTF-8" %>
-<%@ taglib prefix="s" uri="/struts-tags" %>
-<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
-
-<s:textfield name="groupId" label="Group Id" size="50" required="true"/>
-<s:textfield name="artifactId" label="Artifact Id" size="50" required="true"/>
-<s:textfield name="version" label="Version" size="50" required="true"/>
-<s:textfield name="classifier" label="Classifier" size="60" required="false"/>
-<s:textfield name="type" label="Type (mandatory when using classifier)" size="60" required="false" />
-<s:select name="repositoryId" list="managedRepos" label="Repository Id"/>
+++ /dev/null
-<%--
- ~ Licensed to the Apache Software Foundation (ASF) under one
- ~ or more contributor license agreements. See the NOTICE file
- ~ distributed with this work for additional information
- ~ regarding copyright ownership. The ASF licenses this file
- ~ to you under the Apache License, Version 2.0 (the
- ~ "License"); you may not use this file except in compliance
- ~ with the License. You may obtain a copy of the License at
- ~
- ~ http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing,
- ~ software distributed under the License is distributed on an
- ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- ~ KIND, either express or implied. See the License for the
- ~ specific language governing permissions and limitations
- ~ under the License.
- --%>
-
-<%@ page contentType="text/html; charset=UTF-8" %>
-<%@ taglib prefix="my" tagdir="/WEB-INF/tags" %>
-<%@ taglib prefix="archiva" uri="/WEB-INF/tld/web-tags.tld" %>
-
-<archiva:dependency-tree groupId="${groupId}" artifactId="${artifactId}" version="${version}"
- modelVersion="${model.version}" nodevar="node">
- <my:showArtifactLink groupId="${node.groupId}" artifactId="${node.artifactId}"
- version="${node.version}"/>
-</archiva:dependency-tree>
+++ /dev/null
-<%--
- ~ Licensed to the Apache Software Foundation (ASF) under one
- ~ or more contributor license agreements. See the NOTICE file
- ~ distributed with this work for additional information
- ~ regarding copyright ownership. The ASF licenses this file
- ~ to you under the Apache License, Version 2.0 (the
- ~ "License"); you may not use this file except in compliance
- ~ with the License. You may obtain a copy of the License at
- ~
- ~ http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing,
- ~ software distributed under the License is distributed on an
- ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- ~ KIND, either express or implied. See the License for the
- ~ specific language governing permissions and limitations
- ~ under the License.
- --%>
-
-<%@ page contentType="text/html; charset=UTF-8" %>
-<%@ taglib prefix="s" uri="/struts-tags" %>
-<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
-<%@ taglib prefix="my" tagdir="/WEB-INF/tags" %>
-
-<script type="text/javascript">
- $(function() {
- $("#accordion2").accordion();
- });
-</script>
-
-<table class="infoTable">
- <tr>
- <td>
- <div id="accordion2">
-
- <c:forEach items="${mailingLists}" var="mailingList">
- <h2>
- <a href="#">${mailingList.name}</a>
- </h2>
- <%-- TODO: description
- <p>
- Description blah blah blah
- </p>
- --%>
- <ul>
- <c:if test="${!empty (mailingList.subscribeAddress)}">
- <li>
- <b>Subscribe:</b>
- <a href="mailto:${mailingList.subscribeAddress}">${mailingList.subscribeAddress}</a>
- </li>
- </c:if>
- <c:if test="${!empty (mailingList.postAddress)}">
- <li>
- <b>Post:</b>
- <a href="mailto:${mailingList.postAddress}">${mailingList.postAddress}</a>
- </li>
- </c:if>
- <c:if test="${!empty (mailingList.unsubscribeAddress)}">
- <li>
- <b>Unsubscribe:</b>
- <a href="mailto:${mailingList.unsubscribeAddress}">${mailingList.unsubscribeAddress}</a>
- </li>
- </c:if>
- <%-- TODO: not in the POM yet
- <li>
- <b>List owner:</b>
- <a href="mailto:${mailingList.owner}">${mailingList.owner}</a>
- </li>
- --%>
- <c:if test="${!empty (mailingList.mainArchiveUrl)}">
- <li>
- <b>Archive:</b>
- <ul>
- <li>
- <a href="${mailingList.mainArchiveUrl}">${mailingList.mainArchiveUrl}</a>
- </li>
- </ul>
- </li>
- </c:if>
- <%-- <c:if test="${!empty (mailingList.otherArchives)}">
- <li>
- <b>Other Archives:</b>
- <ul>
- <c:forEach items="${mailingList.otherArchives}" var="archive">
- <li>
- <a href="${archive}">${archive}</a>
- </li>
- </c:forEach>
- </ul>
- </li>
- </c:if> --%>
- </ul>
- </c:forEach>
- </div>
-
- <c:if test="${empty (mailingLists)}">
- <strong>No mailing lists</strong>
- </c:if>
-
- </td>
- </tr>
-</table>
+++ /dev/null
-<%--
- ~ Licensed to the Apache Software Foundation (ASF) under one
- ~ or more contributor license agreements. See the NOTICE file
- ~ distributed with this work for additional information
- ~ regarding copyright ownership. The ASF licenses this file
- ~ to you under the Apache License, Version 2.0 (the
- ~ "License"); you may not use this file except in compliance
- ~ with the License. You may obtain a copy of the License at
- ~
- ~ http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing,
- ~ software distributed under the License is distributed on an
- ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- ~ KIND, either express or implied. See the License for the
- ~ specific language governing permissions and limitations
- ~ under the License.
- --%>
-
-<%-- http://www.opensymphony.com/webwork/wikidocs/File%20Upload%20Interceptor.html --%>
-
-<%@ page contentType="text/html; charset=UTF-8" %>
-<%@ taglib prefix="s" uri="/struts-tags" %>
-<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
-
-<s:hidden name="repository.id"/>
- <s:label label="ID" name="repository.id" />
-
-<s:textfield name="repository.name" label="Name" size="50" required="true"/>
-<s:textfield name="repository.location" label="Directory" size="50" required="true"/>
-<s:textfield name="repository.indexDir" label="Index Directory" size="50"/>
-<s:select list="#@java.util.LinkedHashMap@{'default' : 'Maven 2.x Repository', 'legacy' : 'Maven 1.x Repository'}"
- name="repository.layout" label="Type"/>
-<s:textfield name="repository.cronExpression" label="Cron" size="40" required="true"/>
-<s:textfield name="repository.daysOlder" label="Repository Purge By Days Older Than" size="5"/>
-<s:textfield name="repository.retentionCount" label="Repository Purge By Retention Count" size="5"/>
-<s:checkbox name="repository.releases" value="repository.releases" label="Releases Included"/>
-<s:checkbox name="repository.blockRedeployments" value="repository.blockRedeployments" label="Block Re-deployment of Released Artifacts"/>
-<s:checkbox name="repository.snapshots" value="repository.snapshots" label="Snapshots Included"/>
-<s:checkbox name="repository.scanned" value="repository.scanned" label="Scannable"/>
-<s:checkbox name="repository.deleteReleasedSnapshots" value="repository.deleteReleasedSnapshots"
- label="Delete Released Snapshots"/>
\ No newline at end of file
+++ /dev/null
-<%--
- ~ Licensed to the Apache Software Foundation (ASF) under one
- ~ or more contributor license agreements. See the NOTICE file
- ~ distributed with this work for additional information
- ~ regarding copyright ownership. The ASF licenses this file
- ~ to you under the Apache License, Version 2.0 (the
- ~ "License"); you may not use this file except in compliance
- ~ with the License. You may obtain a copy of the License at
- ~
- ~ http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing,
- ~ software distributed under the License is distributed on an
- ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- ~ KIND, either express or implied. See the License for the
- ~ specific language governing permissions and limitations
- ~ under the License.
- --%>
-
-<%@ page contentType="text/html; charset=UTF-8" %>
-<%@ taglib prefix="s" uri="/struts-tags" %>
-<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
-<%@ taglib prefix="my" tagdir="/WEB-INF/tags" %>
-
-<%-- TODO: paginate [MRM-491] --%>
-<c:forEach items="${dependees}" var="project">
- <h3 class="artifact-title">
- <my:showArtifactTitle groupId="${project.namespace}" artifactId="${project.projectId}"
- version="${project.projectVersion}"/>
-
- </h3>
-
- <p>
- <my:showArtifactLink groupId="${project.namespace}" artifactId="${project.projectId}"
- version="${project.projectVersion}"/>
- </p>
-</c:forEach>
-<c:if test="${empty (dependees)}">
- <strong>No results</strong>
-</c:if>
+++ /dev/null
-<%--
- ~ Licensed to the Apache Software Foundation (ASF) under one
- ~ or more contributor license agreements. See the NOTICE file
- ~ distributed with this work for additional information
- ~ regarding copyright ownership. The ASF licenses this file
- ~ to you under the Apache License, Version 2.0 (the
- ~ "License"); you may not use this file except in compliance
- ~ with the License. You may obtain a copy of the License at
- ~
- ~ http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing,
- ~ software distributed under the License is distributed on an
- ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- ~ KIND, either express or implied. See the License for the
- ~ specific language governing permissions and limitations
- ~ under the License.
- --%>
-
-<%@ page contentType="text/html; charset=UTF-8" %>
-<%@ taglib prefix="s" uri="/struts-tags" %>
-<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
-<%@ taglib prefix="archiva" uri="/WEB-INF/tld/web-tags.tld" %>
-
-<div>
-
- <redback:ifAuthorized permission="archiva-add-metadata" resource="${repositoryId}">
- <div id="effect" class="ui-widget-content ui-corner-all">
- <h3 class="ui-widget-header ui-corner-all">Add Property</h3>
-
- <s:form action="addMetadataProperty" namespace="/" method="post" validate="true" theme="simple">
- <s:hidden name="groupId" value="%{groupId}" />
- <s:hidden name="artifactId" value="%{artifactId}" />
- <s:hidden name="version" value="%{version}" />
- <s:hidden name="repositoryId" value="%{repositoryId}" />
- <table>
- <tr>
- <td align="center"><strong>Property Name</strong></td>
- <td align="center"><strong>Property Value</strong></td>
- <td/>
- </tr>
- <tr>
- <td>
- <s:textfield name="propertyName" size="30" required="true"/>
- </td>
- <td>
- <s:textfield name="propertyValue" size="30" required="true"/>
- </td>
- <td align="right">
- <s:submit value="Add"/>
- </td>
- </tr>
- </table>
- </s:form>
- </div>
- </redback:ifAuthorized>
-
- <div>
- <c:if test="${empty genericMetadata}">
- <p>
- <strong>No metadata content.</strong>
- </p>
- </c:if>
-
- <c:if test="${!empty genericMetadata}">
- <ul>
- <c:forEach var="prop" items="${genericMetadata}">
- <c:url var="deletePropertyUrl" value="showProjectMetadata!deleteMetadataEntry.action">
- <c:param name="groupId" value="${groupId}"/>
- <c:param name="artifactId" value="${artifactId}"/>
- <c:param name="version" value="${version}"/>
- <c:param name="deleteItem" value="${prop.key}"/>
- </c:url>
- <li>${prop.key}=${prop.value}
- <redback:ifAuthorized permission="archiva-delete-metadata" resource="${repositoryId}">
- <a href="${deletePropertyUrl}">
- <img src="<c:url value="/images/icons/delete.gif" />" alt="Delete" width="12" length="12"/>
- </a>
- </redback:ifAuthorized>
- </li>
- </c:forEach>
- </ul>
- </c:if>
- </div>
-
-</div>
+++ /dev/null
-<%--
- ~ Licensed to the Apache Software Foundation (ASF) under one
- ~ or more contributor license agreements. See the NOTICE file
- ~ distributed with this work for additional information
- ~ regarding copyright ownership. The ASF licenses this file
- ~ to you under the Apache License, Version 2.0 (the
- ~ "License"); you may not use this file except in compliance
- ~ with the License. You may obtain a copy of the License at
- ~
- ~ http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing,
- ~ software distributed under the License is distributed on an
- ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- ~ KIND, either express or implied. See the License for the
- ~ specific language governing permissions and limitations
- ~ under the License.
- --%>
-
-<%-- http://www.opensymphony.com/webwork/wikidocs/File%20Upload%20Interceptor.html --%>
-
-<%@ page contentType="text/html; charset=UTF-8" %>
-<%@ taglib prefix="s" uri="/struts-tags" %>
-<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
-
-<s:textfield name="groupId" label="Group Id" size="50" required="true"/>
-<s:textfield name="artifactId" label="Artifact Id" size="50" required="true"/>
-<s:textfield name="version" label="Version" size="50" required="true"/>
-<s:textfield name="packaging" label="Packaging" size="50" required="true"/>
-<s:textfield name="classifier" label="Classifier" size="50" required="false"/>
-<s:checkbox name="generatePom" value="generatePom" label="Generate Maven 2 POM"/>
-<s:file name="artifact" label="Artifact File" required="true"/>
-<s:file name="pom" label="POM File"/>
-<s:select name="repositoryId" list="managedRepoIdList" label="Repository Id"/>
+++ /dev/null
-<%--
- ~ Licensed to the Apache Software Foundation (ASF) under one
- ~ or more contributor license agreements. See the NOTICE file
- ~ distributed with this work for additional information
- ~ regarding copyright ownership. The ASF licenses this file
- ~ to you under the Apache License, Version 2.0 (the
- ~ "License"); you may not use this file except in compliance
- ~ with the License. You may obtain a copy of the License at
- ~
- ~ http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing,
- ~ software distributed under the License is distributed on an
- ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- ~ KIND, either express or implied. See the License for the
- ~ specific language governing permissions and limitations
- ~ under the License.
- --%>
-
-<%@ page contentType="text/html; charset=UTF-8" %>
-<%@ taglib prefix="s" uri="/struts-tags" %>
-<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
-<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
-
-<html>
-<head>
- <title>Quick Search</title>
- <s:head/>
- <script type="text/javascript">
- function addSearchField(fieldText, field, divName)
- {
- var element = document.getElementById( field );
- if( element != null )
- {
- alert( "Cannot add field! Field has already been added." );
- return 0;
- }
-
- var table = document.getElementById( "dynamicTable" );
- var row = document.createElement( "TR" );
- var label = document.createElement("TD");
- label.innerHTML = fieldText + ": ";
-
- var textfield = document.createElement( "TD" );
- var inp1 = document.createElement( "INPUT" );
- inp1.setAttribute( "type", "text" );
- inp1.setAttribute( "size", "30" );
- inp1.setAttribute( "id", field );
- inp1.setAttribute( "name", field );
- textfield.appendChild( inp1 );
-
- row.appendChild( label );
- row.appendChild( textfield );
- table.tBodies[0].appendChild( row );
-
- }
- </script>
-
- <script type="text/javascript" src="<c:url value='/js/jquery-1.6.1.min.js'/>"></script>
- <script type="text/javascript">
- $(document).ready(function(){
-
- $("table.settings").hide();
- $("a.expand").click(function(event){
- event.preventDefault();
- $(this).next().toggle("slow");
- });
- });
- </script>
-
- <%-- advanced search --%>
- <script type="text/javascript">
- $(document).ready(function(){
-
- $("table.settings-search").hide();
- $("a.expand-search").click(function(event){
- event.preventDefault();
- $(this).next().toggle("slow");
- });
- });
- </script>
-</head>
-
-<s:if test="%{infoMessage != null}">
- <p>${infoMessage}</p>
-</s:if>
-
-<body>
-
-<h1>Search</h1>
-
-<div id="contentArea">
-<div id="searchBox">
-
- <c:url var="iconCreateUrl" value="/images/icons/create.png" />
-
- <s:form method="get" id="quickSearch" action="quickSearch" validate="true">
- <s:textfield label="Search for" size="50" name="q" id="quickSearchValue"/>
- <s:hidden name="completeQueryString" value="%{completeQueryString}"/>
- <s:submit value="Search" id="quickSearchSubmit"/>
- </s:form>
- <p>
- <s:actionerror/>
- </p>
- <a class="expand-search" href="#"><strong>Advanced Search >></strong></a>
- <table class="settings-search">
- <tr>
- <td>
- <b>*</b> To do a filtered or advanced search, select the criteria from the list below and click the <img src="${iconCreateUrl}"/> icon. Specify the term you want to be matched in the created text field.
- </td>
- </tr>
- <tr>
- <td>
- <s:form id="filteredSearch" method="get" action="filteredSearch" validate="true">
- <label><strong>Advanced Search Fields: </strong></label><s:select name="searchField" list="searchFields" theme="simple"/>
- <s:a href="#" title="Add Search Field" onclick="addSearchField( document.filteredSearch.searchField.options[document.filteredSearch.searchField.selectedIndex].text, document.filteredSearch.searchField.value, 'dynamicFields' )" theme="simple">
- <img src="${iconCreateUrl}" />
- </s:a>
- <table id="dynamicTable">
- <tbody>
- <tr>
- <td><label>Repository: </td>
- <td><s:select name="repositoryId" list="managedRepositoryList" theme="simple"/></td>
- </tr>
- <tr>
- <td/>
- <td/>
- </tr>
- </tbody>
- </table>
- <s:submit value="Search" theme="simple"/>
- </s:form>
- </td>
- </tr>
- </table>
-</div>
-
-<div id="searchHint">
- Enter your search terms. A variety of data will be searched for your keywords. <a class="expand" href="#"><img src="<c:url value="/images/icon_info_sml.gif"/>" /></a>
-
- <table class="settings">
- <tr>
- <td>
- <b>*</b> To perform a boolean <code>NOT</code> search, use the keyword <code>NOT</code> after your search
- term, followed by the term you want to exclude. For example, to exclude artifacts with
- a dependency on the artifact you are searching for from showing up in the search results:
- <code>myQueryTerm NOT dependency</code>
- </td>
- </tr>
- </table>
-</div>
-
-</div>
-</body>
-</html>
+++ /dev/null
-<%--
- ~ Licensed to the Apache Software Foundation (ASF) under one
- ~ or more contributor license agreements. See the NOTICE file
- ~ distributed with this work for additional information
- ~ regarding copyright ownership. The ASF licenses this file
- ~ to you under the Apache License, Version 2.0 (the
- ~ "License"); you may not use this file except in compliance
- ~ with the License. You may obtain a copy of the License at
- ~
- ~ http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing,
- ~ software distributed under the License is distributed on an
- ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- ~ KIND, either express or implied. See the License for the
- ~ specific language governing permissions and limitations
- ~ under the License.
- --%>
-
-<%@ taglib prefix="s" uri="/struts-tags" %>
-<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
-<%@ taglib uri="http://www.extremecomponents.org" prefix="ec" %>
-
-<html>
-<head>
-
- <title>Audit Log Report</title>
- <s:head theme="xhtml" />
-
- <link rel="stylesheet" href="<c:url value='/css/no-theme/jquery.ui-1.8.14.theme.css'/>" type="text/css" />
- <script type="text/javascript" src="<c:url value='/js/jquery-1.6.1.min.js'/>"></script>
- <script type="text/javascript" src="<c:url value='/js/jquery-ui-1.8.14.custom.min.js'/>"></script>
- <script type="text/javascript" charset="utf-8">
- $(document).ready(function()
- {
- $('#startDate').datepicker()
- $('#endDate').datepicker()
- });
- </script>
-</head>
-
-<body>
-<h1>Audit Log Report</h1>
-
-<div id="contentArea">
-
- <s:form action="viewAuditLogReport" namespace="/report" validate="false">
-
- <s:hidden name="initial"/>
-
- <div id="auditLogReport">
- <table id="auditLogFieds">
- <tbody>
- <tr>
- <td>Repository: </td>
- <td><s:select name="repository" list="repositories" theme="simple"/></td>
- </tr>
- <tr>
- <td>Group ID: </td>
- <td><s:textfield id="groupId" name="groupId" theme="simple"/></td>
- </tr>
- <tr>
- <td>Artifact ID: </td>
- <td><s:textfield id="artifactId" name="artifactId" theme="simple"/></td>
- </tr>
- <tr>
- <td>Start Date: </td>
- <td><s:textfield id="startDate" name="startDate" theme="simple"/></td>
- </tr>
- <tr>
- <td>End Date: </td>
- <td><s:textfield id="endDate" name="endDate" theme="simple"/></td>
- </tr>
- <tr>
- <td>Row Count: </td>
- <td><s:textfield name="rowCount" theme="simple"/></td>
- </tr>
- <tr>
- <td/>
- <td style="text-align: right"><s:submit value="View Audit Log" theme="simple"/></td>
- </tr>
- </tbody>
- </table>
- </div>
-
- <p/>
-
- <div class="auditLogReportResults">
-
- <h2>${headerName}</h2>
- <p>
- <s:actionerror/>
- </p>
-
- <c:if test="${not empty (auditLogs)}">
- <table class="auditlogs" cellspacing="0">
- <tr>
- <th>Event</th>
- <th>Repository</th>
- <th>Resource</th>
- <th>Event Date</th>
- <th>Username</th>
- </tr>
-
- <c:forEach items="${auditLogs}" var="auditLog" varStatus="i">
- <tr>
- <td>${auditLog.action}</td>
- <td>${auditLog.repositoryId}</td>
- <td>${auditLog.resource}</td>
- <td>${auditLog.timestamp}</td>
- <td>${auditLog.userId}</td>
- </tr>
- </c:forEach>
- </table>
-
- <c:set var="prevPageUrl">
- <s:url action="viewAuditLogReport" namespace="/report">
- <s:param name="repository" value="%{#attr.repository}" />
- <s:param name="groupId" value="%{#attr.groupId}" />
- <s:param name="artifactId" value="%{#attr.artifactId}" />
- <s:param name="rowCount" value="%{#attr.rowCount}" />
- <s:param name="page" value="%{#attr.page - 1}"/>
- <s:param name="startDate" value="%{#attr.startDate}"/>
- <s:param name="endDate" value="%{#attr.endDate}" />
- </s:url>
- </c:set>
- <c:set var="nextPageUrl">
- <s:url action="viewAuditLogReport" namespace="/report">
- <s:param name="repository" value="%{#attr.repository }" />
- <s:param name="groupId" value="%{#attr.groupId}" />
- <s:param name="artifactId" value="%{#attr.artifactId }" />
- <s:param name="rowCount" value="%{#attr.rowCount}" />
- <s:param name="page" value="%{#attr.page + 1}"/>
- <s:param name="startDate" value="%{#attr.startDate}"/>
- <s:param name="endDate" value="%{#attr.endDate}" />
- </s:url>
- </c:set>
-
- <s:set name="page" value="page"/>
- <c:if test="${page gt 1}"><a href="${prevPageUrl}"><<</a></c:if>
- <strong>Page: </strong>${page}
- <s:set name="isLastPage" value="isLastPage"/>
- <c:if test="${!isLastPage}"><a href="${nextPageUrl}">>></a></c:if>
-
- </c:if>
- </div>
-
- </s:form>
-
-</div>
-
-</body>
-</html>
+++ /dev/null
-<%--
- ~ Licensed to the Apache Software Foundation (ASF) under one
- ~ or more contributor license agreements. See the NOTICE file
- ~ distributed with this work for additional information
- ~ regarding copyright ownership. The ASF licenses this file
- ~ to you under the Apache License, Version 2.0 (the
- ~ "License"); you may not use this file except in compliance
- ~ with the License. You may obtain a copy of the License at
- ~
- ~ http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing,
- ~ software distributed under the License is distributed on an
- ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- ~ KIND, either express or implied. See the License for the
- ~ specific language governing permissions and limitations
- ~ under the License.
- --%>
-
-<%@ page contentType="text/html; charset=UTF-8" %>
-<%@ taglib prefix="s" uri="/struts-tags" %>
-<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
-<%@ taglib prefix="archiva" uri="/WEB-INF/tld/web-tags.tld" %>
-
-<html>
-<head>
- <title>Reports</title>
- <s:head/>
-</head>
-
-<body>
-<h1>Reports</h1>
-
-<div id="contentArea">
-
- <c:forEach var="repository" items="${repositoriesMap}">
- <strong>Repository: ${repository.key}</strong>
- <c:forEach var="report" items='${repository.value}'>
- <p>
- <archiva:groupIdLink var="${report.namespace}" includeTop="true"/>
- <c:set var="url">
- <s:url action="browseArtifact" namespace="/">
- <s:param name="groupId" value="%{#attr.report.namespace}"/>
- <s:param name="artifactId" value="%{#attr.report.project}"/>
- </s:url>
- </c:set>
- <a href="${url}">${report.project}</a> /
- <strong>${report.version}</strong>
- </p>
-
- <blockquote><c:out value="${report.message}" /></blockquote>
- </c:forEach>
- </c:forEach>
-
- <c:set var="prevPageUrl">
- <s:url action="generateReport" namespace="/report">
- <s:param name="groupId" value="%{#attr.groupId}" />
- <s:param name="repositoryId" value="%{#attr.repositoryId }" />
- <s:param name="rowCount" value="%{#attr.rowCount}" />
- <s:param name="page" value="%{#attr.page - 1}"/>
- </s:url>
- </c:set>
- <c:set var="nextPageUrl">
- <s:url action="generateReport" namespace="/report">
- <s:param name="groupId" value="%{#attr.groupId}" />
- <s:param name="repositoryId" value="%{#attr.repositoryId }" />
- <s:param name="rowCount" value="%{#attr.rowCount}" />
- <s:param name="page" value="%{#attr.page + 1}"/>
- </s:url>
- </c:set>
- <s:set name="page" value="page" />
- <c:if test="${page gt 1}"><a href="${prevPageUrl}"><<</a></c:if>
- Page: ${page}
- <s:set name="lastPage" value="lastPage"/>
- <c:if test="${!lastPage}"><a href="${nextPageUrl}">>></a></c:if>
-
-</div>
-</body>
-</html>
+++ /dev/null
-<%--
- ~ Licensed to the Apache Software Foundation (ASF) under one
- ~ or more contributor license agreements. See the NOTICE file
- ~ distributed with this work for additional information
- ~ regarding copyright ownership. The ASF licenses this file
- ~ to you under the Apache License, Version 2.0 (the
- ~ "License"); you may not use this file except in compliance
- ~ with the License. You may obtain a copy of the License at
- ~
- ~ http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing,
- ~ software distributed under the License is distributed on an
- ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- ~ KIND, either express or implied. See the License for the
- ~ specific language governing permissions and limitations
- ~ under the License.
- --%>
-
-<%@ page contentType="text/html; charset=UTF-8" %>
-<%@ taglib prefix="s" uri="/struts-tags" %>
-
-<html>
-<head>
- <title>Reports</title>
- <s:head/>
-</head>
-
-<body>
-<h1>Reports</h1>
-
-<div id="contentArea">
-
- <s:text name="The operation generated an empty report."/>
-
-</div>
-</body>
-</html>
+++ /dev/null
-<%--
- ~ Licensed to the Apache Software Foundation (ASF) under one
- ~ or more contributor license agreements. See the NOTICE file
- ~ distributed with this work for additional information
- ~ regarding copyright ownership. The ASF licenses this file
- ~ to you under the Apache License, Version 2.0 (the
- ~ "License"); you may not use this file except in compliance
- ~ with the License. You may obtain a copy of the License at
- ~
- ~ http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing,
- ~ software distributed under the License is distributed on an
- ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- ~ KIND, either express or implied. See the License for the
- ~ specific language governing permissions and limitations
- ~ under the License.
- --%>
-
-<%@ page contentType="text/html; charset=UTF-8" %>
-<%@ taglib prefix="s" uri="/struts-tags" %>
-<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
-
-<html>
-<head>
-
- <title>Reports</title>
- <s:head theme="xhtml" />
-
- <link rel="stylesheet" href="<c:url value='/css/no-theme/jquery.ui-1.8.14.theme.css'/>" type="text/css" />
- <script type="text/javascript" src="<c:url value='/js/jquery-1.6.1.min.js'/>"></script>
- <script type="text/javascript" src="<c:url value='/js/jquery-ui-1.8.14.custom.min.js'/>"></script>
- <script type="text/javascript" charset="utf-8">
- $(document).ready(function()
- {
- $('#startDate').datepicker();
- $('#endDate').datepicker();
- });
- </script>
-</head>
-
-<body>
-<h1>Reports</h1>
-
-<div id="contentArea">
-
- <h2>Repository Statistics</h2>
- <s:form action="generateStatisticsReport" namespace="/report" validate="false">
-
- <s:optiontransferselect label="Repositories To Be Compared" name="availableRepositories"
- list="availableRepositories" doubleName="selectedRepositories"
- doubleList="selectedRepositories" size="8" doubleSize="8"
- addAllToRightOnclick="selectAllOptions(document.getElementById('generateStatisticsReport_availableRepositories'));selectAllOptions(document.getElementById('generateStatisticsReport_selectedRepositories'));"
- addToRightOnclick="selectAllOptions(document.getElementById('generateStatisticsReport_availableRepositories'));selectAllOptions(document.getElementById('generateStatisticsReport_selectedRepositories'));"
- addAllToLeftOnclick="selectAllOptions(document.getElementById('generateStatisticsReport_availableRepositories'));selectAllOptions(document.getElementById('generateStatisticsReport_selectedRepositories'));"
- addToLeftOnclick="selectAllOptions(document.getElementById('generateStatisticsReport_availableRepositories'));selectAllOptions(document.getElementById('generateStatisticsReport_selectedRepositories'));"
- />
-
- <s:textfield label="Row Count" name="rowCount" />
-
- <s:textfield label="Start Date" id="startDate" name="startDate"/>
-
- <s:textfield label="End Date" id="endDate" name="endDate"/>
-
- <s:submit value="View Statistics"/>
- </s:form>
-
- <h2>Repository Health</h2>
- <s:form namespace="/report" action="generateReport" validate="true">
- <s:textfield label="Row Count" name="rowCount" />
- <s:textfield label="Group ID" name="groupId"/>
- <s:select label="Repository ID" name="repositoryId" list="repositoryIds"/>
-
- <s:submit value="Show Report"/>
- </s:form>
-
-</div>
-
-</body>
-</html>
+++ /dev/null
-<%--
- ~ Licensed to the Apache Software Foundation (ASF) under one
- ~ or more contributor license agreements. See the NOTICE file
- ~ distributed with this work for additional information
- ~ regarding copyright ownership. The ASF licenses this file
- ~ to you under the Apache License, Version 2.0 (the
- ~ "License"); you may not use this file except in compliance
- ~ with the License. You may obtain a copy of the License at
- ~
- ~ http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing,
- ~ software distributed under the License is distributed on an
- ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- ~ KIND, either express or implied. See the License for the
- ~ specific language governing permissions and limitations
- ~ under the License.
- --%>
-
-<%@ page contentType="text/html; charset=UTF-8" %>
-<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
-<%@ taglib prefix="archiva" uri="/WEB-INF/tld/web-tags.tld" %>
-<%@ taglib prefix="s" uri="/struts-tags" %>
-
-<html>
-<head>
- <title>Reports</title>
- <s:head/>
-</head>
-
-<body>
-<h1>Statistics Report</h1>
-
-<c:url var="imgNextPageUrl" value="/images/icon_next_page.gif"/>
-<c:url var="imgPrevPageUrl" value="/images/icon_prev_page.gif"/>
-<c:url var="imgPrevPageDisabledUrl" value="/images/icon_prev_page_disabled.gif"/>
-<c:url var="imgNextPageDisabledUrl" value="/images/icon_next_page_disabled.gif"/>
-
-<div id="contentArea">
-
- <%-- TODO: fix problem in date format! --%>
-
- <%-- Pagination - start --%>
- <p>
-
- <%-- Set Prev & Next icons --%>
- <c:set var="prevPageUrl">
- <s:url action="generateStatisticsReport" namespace="/report">
- <s:param name="selectedRepositories" value="%{#attr.selectedRepositories}"/>
- <s:param name="rowCount" value="%{#attr.rowCount}"/>
- <s:param name="startDate" value="%{#attr.startDate}"/>
- <s:param name="endDate" value="%{#attr.endDate}"/>
- <s:param name="page" value="%{#attr.page - 1}"/>
- </s:url>
- </c:set>
- <c:set var="nextPageUrl">
- <s:url action="generateStatisticsReport" namespace="/report">
- <s:param name="selectedRepositories" value="%{#attr.selectedRepositories}"/>
- <s:param name="rowCount" value="%{#attr.rowCount}"/>
- <s:param name="startDate" value="%{#attr.startDate}"/>
- <s:param name="endDate" value="%{#attr.endDate}"/>
- <s:param name="page" value="%{#attr.page + 1}"/>
- </s:url>
- </c:set>
-
- <c:choose>
- <c:when test="${page == 1}">
- <img src="${imgPrevPageDisabledUrl}"/>
- </c:when>
- <c:otherwise>
- <a href="${prevPageUrl}">
- <img src="${imgPrevPageUrl}"/>
- </a>
- </c:otherwise>
- </c:choose>
-
- <%-- Google-style pagination --%>
- <c:choose>
- <c:when test="${numPages > 11}">
- <c:choose>
- <c:when test="${(page - 5) < 0}">
- <c:set var="beginVal">0</c:set>
- <c:set var="endVal">10</c:set>
- </c:when>
- <c:when test="${(page + 5) > (numPages - 1)}">
- <c:set var="beginVal">${(numPages - 1) - 10}</c:set>
- <c:set var="endVal">${numPages - 1}</c:set>
- </c:when>
- <c:otherwise>
- <c:set var="beginVal">${page - 5}</c:set>
- <c:set var="endVal">${page + 5}</c:set>
- </c:otherwise>
- </c:choose>
- </c:when>
- <c:otherwise>
- <c:set var="beginVal">0</c:set>
- <c:set var="endVal">${numPages - 1}</c:set>
- </c:otherwise>
- </c:choose>
-
- <c:forEach var="i" begin="${beginVal}" end="${endVal}">
- <c:choose>
- <c:when test="${i != (page - 1)}">
- <c:set var="specificPageUrl">
- <s:url action="generateStatisticsReport" namespace="/report">
- <s:param name="selectedRepositories" value="%{#attr.selectedRepositories}"/>
- <s:param name="rowCount" value="%{#attr.rowCount}"/>
- <s:param name="startDate" value="%{#attr.startDate}"/>
- <s:param name="endDate" value="%{#attr.endDate}"/>
- <s:param name="page" value="%{#attr.page + 1}"/>
- </s:url>
- </c:set>
- <a href="${specificPageUrl}">${i + 1}</a>
- </c:when>
- <c:otherwise>
- <b>${i + 1}</b>
- </c:otherwise>
- </c:choose>
- </c:forEach>
-
- <c:choose>
- <c:when test="${page == numPages}">
- <img src="${imgNextPageDisabledUrl}"/>
- </c:when>
- <c:otherwise>
- <a href="${nextPageUrl}">
- <img src="${imgNextPageUrl}"/>
- </a>
- </c:otherwise>
- </c:choose>
- </p>
- <%-- Pagination - end --%>
-
- <%-- Export to CSV link --%>
- <s:url id="downloadStatsReportUrl" action="downloadStatsReport" namespace="/report">
- <s:param name="selectedRepositories" value="%{#attr.selectedRepositories}"/>
- <s:param name="startDate" value="%{#attr.startDate}"/>
- <s:param name="endDate" value="%{#attr.endDate}"/>
- </s:url>
- <s:a href="%{downloadStatsReportUrl}">Export to CSV</s:a>
-
- <c:choose>
- <c:when test="${repositoryId == null}">
-
- <h1>Latest Statistics Comparison Report</h1>
- <table class="infoTable" border="1">
- <tr>
- <th>Repository</th>
- <th>Total File Count</th>
- <th>Total Size</th>
- <th>Artifact Count</th>
- <th>Group Count</th>
- <th>Project Count</th>
- <th>Plugins</th>
- <th>Archetypes</th>
- <th>Jars</th>
- <th>Wars</th>
- <th>Ears</th>
- <th>Exes</th>
- <th>Dlls</th>
- <th>Zips</th>
- </tr>
-
- <c:forEach var="stats" items="${repositoryStatistics}" varStatus="i">
- <tr>
- <td>${selectedRepositories[i.count-1]}</td>
- <td align="right">${stats.totalFileCount}</td>
- <td align="right">${stats.totalArtifactFileSize}</td>
- <td align="right">${stats.totalArtifactCount}</td>
- <td align="right">${stats.totalGroupCount}</td>
- <td align="right">${stats.totalProjectCount}</td>
- <td align="right">${stats.totalCountForType['maven-plugin']}</td>
- <td align="right">${stats.totalCountForType['maven-archetype']}</td>
- <td align="right">${stats.totalCountForType['jar']}</td>
- <td align="right">${stats.totalCountForType['war']}</td>
- <td align="right">${stats.totalCountForType['ear']}</td>
- <td align="right">${stats.totalCountForType['exe']}</td>
- <td align="right">${stats.totalCountForType['dll']}</td>
- <td align="right">${stats.totalCountForType['zip']}</td>
- </tr>
- </c:forEach>
- </table>
- </c:when>
- <c:otherwise>
-
- <h1>Statistics for Repository '${repositoryId}'</h1>
- <table class="infoTable" border="1">
- <tr>
- <th>Date of Scan</th>
- <th>Total File Count</th>
- <th>Total Size</th>
- <th>Artifact Count</th>
- <th>Group Count</th>
- <th>Project Count</th>
- <th>Plugins</th>
- <th>Archetypes</th>
- <th>Jars</th>
- <th>Wars</th>
- <th>Ears</th>
- <th>Exes</th>
- <th>Dlls</th>
- <th>Zips</th>
- </tr>
-
- <c:forEach var="stats" items="${repositoryStatistics}">
- <tr>
- <td align="right">${stats.scanStartTime}</td>
- <td align="right">${stats.totalFileCount}</td>
- <td align="right">${stats.totalArtifactFileSize}</td>
- <td align="right">${stats.totalArtifactCount}</td>
- <td align="right">${stats.totalGroupCount}</td>
- <td align="right">${stats.totalProjectCount}</td>
- <td align="right">${stats.totalCountForType['maven-plugin']}</td>
- <td align="right">${stats.totalCountForType['maven-archetype']}</td>
- <td align="right">${stats.totalCountForType['jar']}</td>
- <td align="right">${stats.totalCountForType['war']}</td>
- <td align="right">${stats.totalCountForType['ear']}</td>
- <td align="right">${stats.totalCountForType['exe']}</td>
- <td align="right">${stats.totalCountForType['dll']}</td>
- <td align="right">${stats.totalCountForType['zip']}</td>
- </tr>
- </c:forEach>
- </table>
-
- </c:otherwise>
- </c:choose>
-
-</div>
-</body>
-</html>
+++ /dev/null
-<%--
- ~ Licensed to the Apache Software Foundation (ASF) under one
- ~ or more contributor license agreements. See the NOTICE file
- ~ distributed with this work for additional information
- ~ regarding copyright ownership. The ASF licenses this file
- ~ to you under the Apache License, Version 2.0 (the
- ~ "License"); you may not use this file except in compliance
- ~ with the License. You may obtain a copy of the License at
- ~
- ~ http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing,
- ~ software distributed under the License is distributed on an
- ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- ~ KIND, either express or implied. See the License for the
- ~ specific language governing permissions and limitations
- ~ under the License.
- --%>
-
-<%@ page contentType="text/html; charset=UTF-8" %>
-<%@ taglib uri="/struts-tags" prefix="s" %>
-<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
-<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
-<%@ taglib prefix="archiva" tagdir="/WEB-INF/tags" %>
-
-<html>
-<head>
- <title>Search Results</title>
- <s:head/>
- <script type="text/javascript">
- function addSearchField(fieldText, field, divName)
- {
- var element = document.getElementById( field );
- if( element != null )
- {
- alert( "Cannot add field! Field has already been added." );
- return 0;
- }
-
- var table = document.getElementById( "dynamicTable" );
- var row = document.createElement( "TR" );
- var label = document.createElement("TD");
- label.innerHTML = fieldText + ": ";
-
- var textfield = document.createElement( "TD" );
- var inp1 = document.createElement( "INPUT" );
- inp1.setAttribute( "type", "text" );
- inp1.setAttribute( "size", "30" );
- inp1.setAttribute( "id", field );
- inp1.setAttribute( "name", field );
- textfield.appendChild( inp1 );
-
- row.appendChild( label );
- row.appendChild( textfield );
- table.appendChild( row );
- }
- </script>
-</head>
-
-<body>
-
-<c:url var="iconCreateUrl" value="/images/icons/create.png" />
-
-<c:if test="${fromFilterSearch == true}">
- <h1>Advanced Search</h1>
-</c:if>
-<c:if test="${fromFilterSearch == false}">
- <h1>Search</h1>
-</c:if>
-
-<c:url var="imgNextPageUrl" value="/images/icon_next_page.gif"/>
-<c:url var="imgPrevPageUrl" value="/images/icon_prev_page.gif"/>
-<c:url var="imgPrevPageDisabledUrl" value="/images/icon_prev_page_disabled.gif"/>
-<c:url var="imgNextPageDisabledUrl" value="/images/icon_next_page_disabled.gif"/>
-
-<div id="contentArea">
- <div id="searchBoxResults">
-
- <c:if test="${fromFilterSearch == true}">
- <table>
- <tr>
- <td>
- <b>*</b> To do a filtered or advanced search, select the criteria from the list below and click the <img src="${iconCreateUrl}"/> icon. Specify the term you want to be matched in the created text field.
- </td>
- </tr>
- <tr>
- <td>
- <s:form id="filteredSearch" method="get" action="filteredSearch" validate="true">
- <s:hidden name="fromFilterSearch" value="%{#attr.fromFilterSearch}" theme="simple"/>
- <label><strong>Advanced Search Fields: </strong></label><s:select name="searchField" list="searchFields" theme="simple"/>
- <s:a href="#" title="Add Search Field" onclick="addSearchField( document.filteredSearch.searchField.options[document.filteredSearch.searchField.selectedIndex].text, document.filteredSearch.searchField.value, 'dynamicFields' )" theme="simple">
- <img src="${iconCreateUrl}" />
- </s:a>
- <table id="dynamicTable">
- <tr>
- <td><label>Repository: </td>
- <td><s:select name="repositoryId" list="managedRepositoryList" theme="simple"/></td>
- </tr>
- <tr>
- <td/>
- <td/>
- </tr>
- </table>
- <s:submit value="Search" theme="simple"/>
- </s:form>
- </td>
- </tr>
- </table>
- </c:if>
- <c:if test="${fromFilterSearch == false}">
- <s:form method="get" action="quickSearch" validate="true">
- <s:textfield label="Search for" size="50" name="q"/>
- <s:checkbox label="Search within results" name="searchResultsOnly"/>
- <s:hidden name="completeQueryString" value="%{#attr.completeQueryString}"/>
- <s:submit label="Go!"/>
- </s:form>
- <script type="text/javascript">
- document.getElementById("quickSearchValue").focus();
- </script>
- </c:if>
-
- <p>
- <s:actionerror/>
- </p>
- </div>
-
- <h1>Results</h1>
-
- <div id="resultsBox">
- <c:choose>
-
- <%-- search was made from the indices --%>
- <c:when test="${databaseResults == null}">
- <c:set var="hitsNum">${fn:length(results.hits) + (currentPage * results.limits.pageSize)}</c:set>
- <c:choose>
- <c:when test="${results.totalHits > results.limits.pageSize}">
- <c:choose>
- <c:when test="${fn:length(results.hits) < rowCount}">
- <p>Hits: ${(rowCount * currentPage) + 1} to ${hitsNum} of ${results.totalHitsMapSize}</p>
- </c:when>
- <c:otherwise>
- <p>Hits: ${(hitsNum - results.limits.pageSize) + 1} to ${hitsNum} of ${results.totalHitsMapSize}</p>
- </c:otherwise>
- </c:choose>
- </c:when>
- <c:otherwise>
- <p>Hits: 1 to ${hitsNum} of ${results.totalHits}</p>
- </c:otherwise>
- </c:choose>
- <c:choose>
- <c:when test="${empty results.hits}">
- <p>No results</p>
- </c:when>
- <c:otherwise>
-
- <%-- Pagination start --%>
- <p>
- <%-- Prev & Next icons --%>
- <c:if test="${fromFilterSearch == false}">
- <c:set var="prevPageUrl">
- <s:url action="quickSearch" namespace="/">
- <s:param name="q" value="%{#attr.q}"/>
- <s:param name="currentPage" value="%{#attr.currentPage - 1}"/>
- </s:url>
- </c:set>
- <c:set var="nextPageUrl">
- <s:url action="quickSearch" namespace="/">
- <s:param name="q" value="%{#attr.q}"/>
- <s:param name="currentPage" value="%{#attr.currentPage + 1}"/>
- </s:url>
- </c:set>
- </c:if>
-
- <c:if test="${fromFilterSearch == true}">
- <c:set var="prevPageUrl">
- <s:url action="filteredSearch" namespace="/">
- <s:param name="rowCount" value="%{#attr.rowCount}"/>
- <s:param name="groupId" value="%{#attr.groupId}"/>
- <s:param name="artifactId" value="%{#attr.artifactId}"/>
- <s:param name="version" value="%{#attr.version}"/>
- <s:param name="className" value="%{#attr.className}"/>
- <s:param name="repositoryId" value="%{#attr.repositoryId}"/>
- <s:param name="filterSearch" value="%{#attr.filterSearch}"/>
- <s:param name="fromResultsPage" value="true"/>
- <s:param name="currentPage" value="%{#attr.currentPage - 1}"/>
- <s:param name="searchResultsOnly" value="%{#attr.searchResultsOnly}"/>
- <s:param name="completeQueryString" value="%{#attr.completeQueryString}"/>
- </s:url>
- </c:set>
- <c:set var="nextPageUrl">
- <s:url action="filteredSearch" namespace="/">
- <s:param name="rowCount" value="%{#attr.rowCount}"/>
- <s:param name="groupId" value="%{#attr.groupId}"/>
- <s:param name="artifactId" value="%{#attr.artifactId}"/>
- <s:param name="version" value="%{#attr.version}"/>
- <s:param name="className" value="%{#attr.className}"/>
- <s:param name="repositoryId" value="%{#attr.repositoryId}"/>
- <s:param name="filterSearch" value="%{#attr.filterSearch}"/>
- <s:param name="fromResultsPage" value="true"/>
- <s:param name="currentPage" value="%{#attr.currentPage + 1}"/>
- <s:param name="searchResultsOnly" value="%{#attr.searchResultsOnly}"/>
- <s:param name="completeQueryString" value="%{#attr.completeQueryString}"/>
- </s:url>
- </c:set>
- </c:if>
-
- <c:choose>
- <c:when test="${currentPage == 0}">
- <img src="${imgPrevPageDisabledUrl}"/>
- </c:when>
- <c:otherwise>
- <a href="${prevPageUrl}">
- <img src="${imgPrevPageUrl}"/>
- </a>
- </c:otherwise>
- </c:choose>
-
- <%-- Google-style pagination --%>
- <c:choose>
- <c:when test="${totalPages > 11}">
- <c:choose>
- <c:when test="${(currentPage - 5) < 0}">
- <c:set var="beginVal">0</c:set>
- <c:set var="endVal">10</c:set>
- </c:when>
- <c:when test="${(currentPage + 5) > (totalPages - 1)}">
- <c:set var="beginVal">${(totalPages -1) - 10}</c:set>
- <c:set var="endVal">${totalPages - 1}</c:set>
- </c:when>
- <c:otherwise>
- <c:set var="beginVal">${currentPage - 5}</c:set>
- <c:set var="endVal">${currentPage + 5}</c:set>
- </c:otherwise>
- </c:choose>
- </c:when>
- <c:otherwise>
- <c:set var="beginVal">0</c:set>
- <c:set var="endVal">${totalPages - 1}</c:set>
- </c:otherwise>
- </c:choose>
-
- <c:forEach var="i" begin="${beginVal}" end="${endVal}">
- <c:if test="${fromFilterSearch == false}">
- <c:choose>
- <c:when test="${i != currentPage}">
- <c:set var="specificPageUrl">
- <s:url action="quickSearch" namespace="/">
- <s:param name="q" value="%{#attr.q}"/>
- <s:param name="currentPage" value="%{#attr.i}"/>
- <s:param name="searchResultsOnly" value="%{#attr.searchResultsOnly}"/>
- <s:param name="completeQueryString" value="%{#attr.completeQueryString}"/>
- </s:url>
- </c:set>
- <a href="${specificPageUrl}">${i + 1}</a>
- </c:when>
- <c:otherwise>
- <b>${i + 1}</b>
- </c:otherwise>
- </c:choose>
- </c:if>
-
- <c:if test="${fromFilterSearch == true}">
- <c:choose>
- <c:when test="${i != currentPage}">
- <c:set var="specificPageUrl">
- <s:url action="filteredSearch" namespace="/">
- <s:param name="rowCount" value="%{#attr.rowCount}"/>
- <s:param name="groupId" value="%{#attr.groupId}"/>
- <s:param name="artifactId" value="%{#attr.artifactId}"/>
- <s:param name="version" value="%{#attr.version}"/>
- <s:param name="className" value="%{#attr.className}"/>
- <s:param name="repositoryId" value="%{#attr.repositoryId}"/>
- <s:param name="filterSearch" value="%{#attr.filterSearch}"/>
- <s:param name="fromResultsPage" value="true"/>
- <s:param name="currentPage" value="%{#attr.i}"/>
- <s:param name="searchResultsOnly" value="%{#attr.searchResultsOnly}"/>
- <s:param name="completeQueryString" value="%{#attr.completeQueryString}"/>
- </s:url>
- </c:set>
- <a href="${specificPageUrl}">${i + 1}</a>
- </c:when>
- <c:otherwise>
- <b>${i + 1}</b>
- </c:otherwise>
- </c:choose>
- </c:if>
- </c:forEach>
-
- <c:choose>
- <c:when test="${currentPage == (totalPages - 1)}">
- <img src="${imgNextPageDisabledUrl}"/>
- </c:when>
- <c:otherwise>
- <a href="${nextPageUrl}">
- <img src="${imgNextPageUrl}"/>
- </a>
- </c:otherwise>
- </c:choose>
- </p>
- <%-- Pagination end --%>
-
- <c:forEach items="${results.hits}" var="record" varStatus="i">
- <c:choose>
- <c:when test="${not empty (record.groupId)}">
- <h3 class="artifact-title">
- <archiva:showArtifactTitle groupId="${record.groupId}" artifactId="${record.artifactId}"/>
- </h3>
- <p>
- <archiva:showArtifactLink groupId="${record.groupId}" artifactId="${record.artifactId}"
- versions="${record.versions}" repositoryId="${record.repositoryId}"/>
- </p>
- </c:when>
- <c:otherwise>
- <p>
- <c:url var="hiturl" value="/repository/${record.url}" />
- <a href="${hiturl}">${record.urlFilename}</a>
- </p>
- </c:otherwise>
- </c:choose>
- </c:forEach>
- </c:otherwise>
- </c:choose>
- </c:when>
-
- <%-- search was made from the database (find artifact)--%>
- <c:otherwise>
- <p>Hits: ${fn:length(databaseResults)}</p>
-
- <c:choose>
- <c:when test="${empty databaseResults}">
- <p>No results</p>
- </c:when>
- <c:otherwise>
- <c:forEach items="${databaseResults}" var="artifactModel" varStatus="i">
- <c:choose>
- <c:when test="${not empty (artifactModel.namespace)}">
- <h3 class="artifact-title">
- <archiva:showArtifactTitle groupId="${artifactModel.namespace}"
- artifactId="${artifactModel.project}"
- version="${artifactModel.version}"/>
-
- </h3>
- <p>
- <archiva:showArtifactLink groupId="${artifactModel.namespace}"
- artifactId="${artifactModel.project}"
- version="${artifactModel.version}"/>
-
- </p>
- </c:when>
- <c:otherwise>
- <p>
- <c:url var="hiturl" value="/repository/${artifactModel.repositoryId}" />
- <a href="${hiturl}">${artifactModel.repositoryId}</a>
- </p>
- </c:otherwise>
- </c:choose>
- </c:forEach>
- </c:otherwise>
- </c:choose>
-
- </c:otherwise>
- </c:choose>
- </div>
-</div>
-</body>
-</html>
+++ /dev/null
-<%--
- ~ Licensed to the Apache Software Foundation (ASF) under one
- ~ or more contributor license agreements. See the NOTICE file
- ~ distributed with this work for additional information
- ~ regarding copyright ownership. The ASF licenses this file
- ~ to you under the Apache License, Version 2.0 (the
- ~ "License"); you may not use this file except in compliance
- ~ with the License. You may obtain a copy of the License at
- ~
- ~ http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing,
- ~ software distributed under the License is distributed on an
- ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- ~ KIND, either express or implied. See the License for the
- ~ specific language governing permissions and limitations
- ~ under the License.
- --%>
-
-<%@ page contentType="text/html; charset=UTF-8" %>
-<%@ taglib prefix="s" uri="/struts-tags" %>
-<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
-<%@ taglib prefix="my" tagdir="/WEB-INF/tags" %>
-<%@ taglib prefix="archiva" uri="/WEB-INF/tld/web-tags.tld" %>
-<%@ taglib prefix="redback" uri="/redback/taglib-1.0" %>
-
-<html>
-<head>
- <title>Browse Repository</title>
- <s:head/>
- <script type="text/javascript" src="<c:url value='/js/jquery-1.6.1.min.js'/>"></script>
- <script type="text/javascript" src="<c:url value='/js/jquery-ui-1.8.14.custom.min.js'/>"></script>
- <script type="text/javascript">
- $(function() {
- $("#accordion").accordion({autoHeight:false});
- });
- </script>
- <link rel="stylesheet" href="<c:url value='/css/no-theme/jquery.ui-1.8.14.theme.css'/>" type="text/css" media="all"/>
-</head>
-
-<body>
-
-<s:set name="model" value="model"/>
-<c:set var="mavenFacet" value="${model.facets['org.apache.archiva.metadata.repository.storage.maven2.project']}" />
-
-<c:choose>
- <c:when test="${mavenFacet.packaging == 'maven-plugin'}">
- <c:url var="imageUrl" value="/images/mavenplugin.gif"/>
- <c:set var="packageName">Maven Plugin</c:set>
- </c:when>
- <c:when test="${mavenFacet.packaging == 'pom'}">
- <c:url var="imageUrl" value="/images/pom.gif"/>
- <c:set var="packageName">POM</c:set>
- </c:when>
- <%-- These types aren't usually set in the POM yet, so we fudge them for the well known ones --%>
- <c:when test="${mavenFacet.packaging == 'maven-archetype' or mavenFacet.groupId == 'org.apache.maven.archetypes'}">
- <c:url var="imageUrl" value="/images/archetype.gif"/>
- <c:set var="packageName">Maven Archetype</c:set>
- </c:when>
- <c:when test="${mavenFacet.packaging == 'maven-skin' or mavenFacet.groupId == 'org.apache.maven.skins'}">
- <c:url var="imageUrl" value="/images/skin.gif"/>
- <c:set var="packageName">Maven Skin</c:set>
- </c:when>
- <%-- Must be last so that the above get picked up if possible --%>
- <c:when test="${mavenFacet.packaging == 'jar'}">
- <c:url var="imageUrl" value="/images/jar.gif"/>
- <c:set var="packageName">JAR</c:set>
- </c:when>
- <c:otherwise>
- <c:url var="imageUrl" value="/images/other.gif"/>
- <c:set var="packageName"></c:set>
- </c:otherwise>
-</c:choose>
-<img src="${imageUrl}" width="66" height="66" alt="${packageName}" title="${packageName}" style="float: left"/>
-
-<h1>
- <c:choose>
- <c:when test="${empty (model.name)}">
- ${mavenFacet.artifactId}
- </c:when>
- <c:otherwise>
- ${model.name}
- </c:otherwise>
- </c:choose>
-</h1>
-
-<div id="contentArea">
- <div id="tabs">
- <span>
- <c:set var="url">
- <s:url action="showArtifact">
- <s:param name="groupId" value="%{groupId}"/>
- <s:param name="artifactId" value="%{artifactId}"/>
- <s:param name="version" value="%{version}"/>
- </s:url>
- </c:set>
- <my:currentWWUrl url="${url}" useParams="true">Info</my:currentWWUrl>
- <c:set var="url">
- <s:url action="showArtifactDependencies">
- <s:param name="groupId" value="%{groupId}"/>
- <s:param name="artifactId" value="%{artifactId}"/>
- <s:param name="version" value="%{version}"/>
- </s:url>
- </c:set>
- <my:currentWWUrl url="${url}" useParams="true">Dependencies</my:currentWWUrl>
- <c:set var="url">
- <s:url action="showArtifactDependencyTree">
- <s:param name="groupId" value="%{groupId}"/>
- <s:param name="artifactId" value="%{artifactId}"/>
- <s:param name="version" value="%{version}"/>
- </s:url>
- </c:set>
- <my:currentWWUrl url="${url}" useParams="true">Dependency Tree</my:currentWWUrl>
- <c:set var="url">
- <s:url action="showArtifactDependees">
- <s:param name="groupId" value="%{groupId}"/>
- <s:param name="artifactId" value="%{artifactId}"/>
- <s:param name="version" value="%{version}"/>
- </s:url>
- </c:set>
- <my:currentWWUrl url="${url}" useParams="true">Used By</my:currentWWUrl>
- <c:set var="url">
- <s:url action="showArtifactMailingLists">
- <s:param name="groupId" value="%{groupId}"/>
- <s:param name="artifactId" value="%{artifactId}"/>
- <s:param name="version" value="%{version}"/>
- </s:url>
- </c:set>
- <my:currentWWUrl url="${url}" useParams="true">Mailing Lists</my:currentWWUrl>
- <c:set var="url">
- <s:url action="showProjectMetadata">
- <s:param name="groupId" value="%{groupId}"/>
- <s:param name="artifactId" value="%{artifactId}"/>
- <s:param name="version" value="%{version}"/>
- </s:url>
- </c:set>
- <my:currentWWUrl url="${url}" useParams="true">Metadata</my:currentWWUrl>
- <%-- TODO
- <redback:ifAnyAuthorized permissions="archiva-access-reports">
- <c:set var="url">
- <s:url action="showArtifactReports">
- <s:param name="groupId" value="%{groupId}"/>
- <s:param name="artifactId" value="%{artifactId}"/>
- <s:param name="version" value="%{version}"/>
- </s:url>
- </c:set>
- <my:currentWWUrl url="${url}" useParams="true">Reports</my:currentWWUrl>
- </redback:ifAnyAuthorized>
- --%>
-
- </span>
- </div>
-
- <div id="download">
- <h2>Download</h2>
-
- <div id="accordion">
- <c:forEach items="${snapshotVersions}" var="v">
- <p><a href="#">${v}</a></p>
- <div>
- <table cellpadding="0" cellspacing="0" border="0" width="100%">
- <tbody>
- <c:forEach items="${artifacts[v]}" var="a">
- <c:choose>
- <c:when test="${a.type == 'maven-plugin'}">
- <c:url var="imageUrl" value="/images/download-type-maven-plugin.png"/>
- <c:set var="packageName">Maven Plugin</c:set>
- </c:when>
- <c:when test="${a.type == 'pom'}">
- <c:url var="imageUrl" value="/images/download-type-pom.png"/>
- <c:set var="packageName">POM</c:set>
- </c:when>
- <%-- These types aren't usually set in the POM yet, so we fudge them for the well known ones --%>
- <c:when test="${a.type == 'maven-archetype' or a.groupId == 'org.apache.maven.archetypes'}">
- <c:url var="imageUrl" value="/images/download-type-archetype.png"/>
- <c:set var="packageName">Maven Archetype</c:set>
- </c:when>
- <c:when test="${a.type == 'maven-skin' or a.groupId == 'org.apache.maven.skins'}">
- <c:url var="imageUrl" value="/images/download-type-skin.png"/>
- <c:set var="packageName">Maven Skin</c:set>
- </c:when>
- <c:when test="${a.type == 'java-source'}">
- <c:url var="imageUrl" value="/images/download-type-jar.png"/>
- <c:set var="packageName">Java Sources</c:set>
- </c:when>
- <c:when test="${a.type == 'javadoc'}">
- <c:url var="imageUrl" value="/images/download-type-other.png"/>
- <c:set var="packageName">JavaDoc Archive</c:set>
- </c:when>
- <c:when test="${a.type == 'library' || a.type == 'dotnet-library'}">
- <c:url var="imageUrl" value="/images/download-type-other.png"/>
- <c:set var="packageName">.NET Library</c:set>
- </c:when>
- <%-- TODO: other NPanday types, and move this code into the plugin somehow --%>
- <%-- Must be last so that the above get picked up if possible --%>
- <c:when test="${a.type == 'jar'}">
- <c:url var="imageUrl" value="/images/download-type-jar.png"/>
- <c:if test="${a.classifier != null}">
- <c:set var="packageName">JAR - <c:out value="${a.classifier}"/></c:set>
- </c:if>
- <c:if test="${a.classifier == null}">
- <c:set var="packageName">JAR</c:set>
- </c:if>
- </c:when>
- <c:otherwise>
- <c:url var="imageUrl" value="/images/download-type-other.png"/>
- <c:set var="packageName">${a.type}</c:set>
- </c:otherwise>
- </c:choose>
- <c:url var="url" value="/repository/${a.repositoryId}/${a.path}" />
- <tr>
- <td>
- <a href="${url}" title="Download ${a.artifactId}"><img src="${imageUrl}" alt="" width="24" height="24"/></a>
- </td>
- <td class="type"><a href="${url}" title="Download ${a.artifactId}">${packageName}</a></td>
- <td class="size">${a.size}</td>
- </tr>
- </c:forEach>
- </tbody>
- </table>
- </div>
- </c:forEach>
- </div>
- </div>
-
- <%-- TODO: perhaps using ajax? --%>
- <%-- TODO: panels? this is ugly as is --%>
- <div id="tabArea">
- <c:choose>
- <c:when test="${genericMetadata != null}">
- <%@ include file="/WEB-INF/jsp/include/projectMetadata.jspf" %>
- </c:when>
- <c:when test="${dependencies != null}">
- <%@ include file="/WEB-INF/jsp/include/artifactDependencies.jspf" %>
- </c:when>
- <c:when test="${dependencyTree}">
- <%@ include file="/WEB-INF/jsp/include/dependencyTree.jspf" %>
- </c:when>
- <c:when test="${dependees != null}">
- <%@ include file="/WEB-INF/jsp/include/projectDependees.jspf" %>
- </c:when>
- <c:when test="${mailingLists != null}">
- <%@ include file="/WEB-INF/jsp/include/mailingLists.jspf" %>
- </c:when>
- <c:when test="${reports != null}">
- <%@ include file="/WEB-INF/jsp/include/artifactReports.jspf" %>
- </c:when>
- <c:otherwise>
- <%@ include file="/WEB-INF/jsp/include/artifactInfo.jspf" %>
- </c:otherwise>
-
- </c:choose>
-
- <s:if test="hasActionMessages()">
- <div id="messagesinfo">
- <s:actionmessage />
- </div>
- </s:if>
- <s:if test="hasActionErrors()">
- <div id="messages">
- <s:actionerror/>
- </div>
- </s:if>
- </div>
-</div>
-</body>
-</html>
+++ /dev/null
-<%--
- ~ Licensed to the Apache Software Foundation (ASF) under one
- ~ or more contributor license agreements. See the NOTICE file
- ~ distributed with this work for additional information
- ~ regarding copyright ownership. The ASF licenses this file
- ~ to you under the Apache License, Version 2.0 (the
- ~ "License"); you may not use this file except in compliance
- ~ with the License. You may obtain a copy of the License at
- ~
- ~ http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing,
- ~ software distributed under the License is distributed on an
- ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- ~ KIND, either express or implied. See the License for the
- ~ specific language governing permissions and limitations
- ~ under the License.
- --%>
-
-<%-- http://www.opensymphony.com/webwork/wikidocs/File%20Upload%20Interceptor.html --%>
-
-<%@ page contentType="text/html; charset=UTF-8" %>
-<%@ taglib prefix="s" uri="/struts-tags" %>
-<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
-
-<html>
-<head>
- <title>Upload Artifact</title>
- <s:head/>
-</head>
-
-<body>
-<h1>Upload Artifact</h1>
-
-<div id="contentArea">
-
- <s:actionerror/>
- <s:actionmessage/>
-
- <s:form action="upload!doUpload" method="post" enctype="multipart/form-data" validate="true">
- <%@ include file="/WEB-INF/jsp/include/uploadForm.jspf" %>
- <s:submit id="uploadSubmit"/>
- </s:form>
-</div>
-
-</body>
-</html>
+++ /dev/null
-<%--\r
- ~ Licensed to the Apache Software Foundation (ASF) under one\r
- ~ or more contributor license agreements. See the NOTICE file\r
- ~ distributed with this work for additional information\r
- ~ regarding copyright ownership. The ASF licenses this file\r
- ~ to you under the Apache License, Version 2.0 (the\r
- ~ "License"); you may not use this file except in compliance\r
- ~ with the License. You may obtain a copy of the License at\r
- ~\r
- ~ http://www.apache.org/licenses/LICENSE-2.0\r
- ~\r
- ~ Unless required by applicable law or agreed to in writing,\r
- ~ software distributed under the License is distributed on an\r
- ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r
- ~ KIND, either express or implied. See the License for the\r
- ~ specific language governing permissions and limitations\r
- ~ under the License.\r
- --%>\r
-\r
-<%@ taglib uri="/struts-tags" prefix="s" %>\r
-<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>\r
-<%@ attribute name="action" %>\r
-<%@ attribute name="namespace" %>\r
-<%@ attribute name="linkId" required="false" %>\r
-<%@ attribute name="url" %>\r
-<%@ attribute name="useParams" required="false" %>\r
-\r
-<c:set var="currentUrl">\r
- <s:url>\r
- <c:if test="${useParams}">\r
- <s:param name="groupId" value="%{groupId}"/>\r
- <s:param name="artifactId" value="%{artifactId}"/>\r
- <s:param name="version" value="%{version}"/>\r
- </c:if>\r
- </s:url>\r
-</c:set>\r
-<c:if test="${!empty (action) && !empty (namespace)}">\r
- <c:set var="url">\r
- <s:url action="%{#attr.action}" namespace="%{#attr.namespace}"/>\r
- </c:set>\r
-</c:if>\r
-\r
-<c:set var="text">\r
- <jsp:doBody/>\r
-</c:set>\r
-<!--URL: <c:out value="${url}"/>\r
-Current URL: <c:out value="${currentUrl}"/>\r
--->\r
-<c:choose>\r
- <c:when test="${currentUrl == url}">\r
- <b>\r
- ${text}\r
- </b>\r
- </c:when>\r
- <c:otherwise>\r
- <a href="${url}">\r
- ${text}\r
- </a>\r
- </c:otherwise>\r
-</c:choose>\r
+++ /dev/null
-<%--
- ~ Licensed to the Apache Software Foundation (ASF) under one
- ~ or more contributor license agreements. See the NOTICE file
- ~ distributed with this work for additional information
- ~ regarding copyright ownership. The ASF licenses this file
- ~ to you under the Apache License, Version 2.0 (the
- ~ "License"); you may not use this file except in compliance
- ~ with the License. You may obtain a copy of the License at
- ~
- ~ http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing,
- ~ software distributed under the License is distributed on an
- ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- ~ KIND, either express or implied. See the License for the
- ~ specific language governing permissions and limitations
- ~ under the License.
- --%>
-
-<%-- TODO: this could perhaps just be a i18n call --%>
-<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
-<%@ attribute name="policy" required="true" %>
-<%@ attribute name="interval" %>
-
-<c:choose>
- <c:when test="${policy == 'disabled'}">
- Disabled
- </c:when>
- <c:when test="${policy == 'always'}">
- Updated every request
- </c:when>
- <c:when test="${policy == 'hourly'}">
- Updated hourly
- </c:when>
- <c:when test="${policy == 'daily'}">
- Updated daily
- </c:when>
- <c:when test="${policy == 'interval'}">
- Updated every ${interval} minutes
- </c:when>
-</c:choose>
\ No newline at end of file
+++ /dev/null
-<%--
- ~ Licensed to the Apache Software Foundation (ASF) under one
- ~ or more contributor license agreements. See the NOTICE file
- ~ distributed with this work for additional information
- ~ regarding copyright ownership. The ASF licenses this file
- ~ to you under the Apache License, Version 2.0 (the
- ~ "License"); you may not use this file except in compliance
- ~ with the License. You may obtain a copy of the License at
- ~
- ~ http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing,
- ~ software distributed under the License is distributed on an
- ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- ~ KIND, either express or implied. See the License for the
- ~ specific language governing permissions and limitations
- ~ under the License.
- --%>
-
-<%@ taglib prefix="s" uri="/struts-tags" %>
-<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
-<%@ taglib prefix="archiva" uri="/WEB-INF/tld/web-tags.tld" %>
-
-<%@ attribute name="groupId" required="true" %>
-<%@ attribute name="artifactId" %>
-<%@ attribute name="version" %>
-<%@ attribute name="classifier" %>
-<%@ attribute name="scope" %>
-<%@ attribute name="versions" type="java.util.List" %>
-<%@ attribute name="repositoryId" %>
-
-<span class="artifact-link">
- <archiva:groupIdLink var="${groupId}" includeTop="false" />
- <c:if test="${!empty (artifactId)}">
- <c:set var="url">
- <s:url action="browseArtifact" namespace="/">
- <s:param name="groupId" value="%{#attr.groupId}"/>
- <s:param name="artifactId" value="%{#attr.artifactId}"/>
- </s:url>
- </c:set>
- <a href="${url}">${artifactId}</a>
- </c:if>
- | <strong>Version(s):</strong>
- <c:choose>
- <c:when test="${!empty (version)}">
- <c:set var="url">
- <s:url action="showArtifact" namespace="/">
- <s:param name="groupId" value="%{#attr.groupId}"/>
- <s:param name="artifactId" value="%{#attr.artifactId}"/>
- <c:if test="${!empty (version)}">
- <s:param name="version" value="%{#attr.version}"/>
- </c:if>
- </s:url>
- </c:set>
- <a href="${url}">${version}</a>
- </c:when>
- <c:otherwise>
- <c:forEach items="${versions}" var="v" varStatus="i">
- <c:set var="url">
- <s:url action="showArtifact" namespace="/">
- <s:param name="groupId" value="%{#attr.groupId}"/>
- <s:param name="artifactId" value="%{#attr.artifactId}"/>
- <s:param name="version" value="%{#attr.v}"/>
- </s:url>
- </c:set>
- <a href="${url}">${v}</a>
- <c:if test="${!i.last}">,</c:if>
- </c:forEach>
- </c:otherwise>
- </c:choose>
- <c:if test="${!empty (scope)}">
- | <strong>Scope:</strong> ${scope}
- </c:if>
- <c:if test="${!empty (classifier)}">
- | <strong>Classifier:</strong> ${classifier}
- </c:if>
-</span>
+++ /dev/null
-<%--\r
- ~ Licensed to the Apache Software Foundation (ASF) under one\r
- ~ or more contributor license agreements. See the NOTICE file\r
- ~ distributed with this work for additional information\r
- ~ regarding copyright ownership. The ASF licenses this file\r
- ~ to you under the Apache License, Version 2.0 (the\r
- ~ "License"); you may not use this file except in compliance\r
- ~ with the License. You may obtain a copy of the License at\r
- ~\r
- ~ http://www.apache.org/licenses/LICENSE-2.0\r
- ~\r
- ~ Unless required by applicable law or agreed to in writing,\r
- ~ software distributed under the License is distributed on an\r
- ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r
- ~ KIND, either express or implied. See the License for the\r
- ~ specific language governing permissions and limitations\r
- ~ under the License.\r
- --%>\r
-\r
-<%@ taglib prefix="s" uri="/struts-tags" %>\r
-<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>\r
-<%@ attribute name="groupId" required="true" %>\r
-<%@ attribute name="artifactId" %>\r
-<%@ attribute name="version" %>\r
-\r
- <span class="artifact-title">\r
- <c:set var="url">\r
- <c:choose>\r
- <c:when test="${!empty (version)}">\r
- <s:url action="showArtifact" namespace="/">\r
- <s:param name="groupId" value="%{#attr.groupId}"/>\r
- <s:param name="artifactId" value="%{#attr.artifactId}"/>\r
- <s:param name="version" value="%{#attr.version}"/>\r
- </s:url>\r
- </c:when>\r
- <c:otherwise>\r
- <s:url action="browseArtifact" namespace="/">\r
- <s:param name="groupId" value="%{#attr.groupId}"/>\r
- <s:param name="artifactId" value="%{#attr.artifactId}"/>\r
- </s:url>\r
- </c:otherwise>\r
- </c:choose>\r
- </c:set>\r
- <%-- TODO: showing the name and description would be nice, but that would require loading the POMs --%>\r
- <a href="${url}">${artifactId}</a>\r
- </span>\r
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-
-<!--
- ~ Licensed to the Apache Software Foundation (ASF) under one
- ~ or more contributor license agreements. See the NOTICE file
- ~ distributed with this work for additional information
- ~ regarding copyright ownership. The ASF licenses this file
- ~ to you under the Apache License, Version 2.0 (the
- ~ "License"); you may not use this file except in compliance
- ~ with the License. You may obtain a copy of the License at
- ~
- ~ http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing,
- ~ software distributed under the License is distributed on an
- ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- ~ KIND, either express or implied. See the License for the
- ~ specific language governing permissions and limitations
- ~ under the License.
- -->
-
-<taglib xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.0" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd">
- <description><![CDATA[Archiva taglibs.]]></description>
- <display-name>Archiva Taglib</display-name>
- <tlib-version>2.2.3</tlib-version>
- <short-name>archiva</short-name>
- <uri>/archiva-web-tag</uri>
- <tag>
- <description><![CDATA[Render a copy paste snippet for the provided object]]></description>
- <name>copy-paste-snippet</name>
- <tag-class>org.apache.archiva.web.tags.CopyPasteSnippetTag</tag-class>
- <body-content>empty</body-content>
- <attribute>
- <description><![CDATA[The Object to Render]]></description>
- <name>object</name>
- <required>true</required>
- <rtexprvalue>true</rtexprvalue>
- </attribute>
- <attribute>
- <description><![CDATA[The wrapper type to use, can be 'pre' or 'toggle']]></description>
- <name>wrapper</name>
- <required>false</required>
- <rtexprvalue>true</rtexprvalue>
- </attribute>
- <dynamic-attributes>false</dynamic-attributes>
- </tag>
- <tag>
- <description><![CDATA[Render a dependency tree for the provided project.]]></description>
- <name>dependency-tree</name>
- <tag-class>org.apache.archiva.web.tags.DependencyTreeTag</tag-class>
- <body-content>JSP</body-content>
- <attribute>
- <description><![CDATA[The artifactId]]></description>
- <name>artifactId</name>
- <required>true</required>
- <rtexprvalue>true</rtexprvalue>
- </attribute>
- <attribute>
- <description><![CDATA[The groupId]]></description>
- <name>groupId</name>
- <required>true</required>
- <rtexprvalue>true</rtexprvalue>
- </attribute>
- <attribute>
- <description><![CDATA[The version of the project model. Used to verify the dependency graph for generic snapshots not yet in the repo.]]></description>
- <name>modelVersion</name>
- <required>false</required>
- <rtexprvalue>true</rtexprvalue>
- </attribute>
- <attribute>
- <description><![CDATA[The variable name for the node.]]></description>
- <name>nodevar</name>
- <required>false</required>
- <rtexprvalue>true</rtexprvalue>
- </attribute>
- <attribute>
- <description><![CDATA[The version]]></description>
- <name>version</name>
- <required>true</required>
- <rtexprvalue>true</rtexprvalue>
- </attribute>
- <dynamic-attributes>false</dynamic-attributes>
- </tag>
- <tag>
- <description><![CDATA[Render a groupId as a set of Links]]></description>
- <name>groupIdLink</name>
- <tag-class>org.apache.archiva.web.tags.GroupIdLinkTag</tag-class>
- <body-content>empty</body-content>
- <attribute>
- <description><![CDATA[Boolean indicating if 'top' link should be created or not.]]></description>
- <name>includeTop</name>
- <required>false</required>
- <rtexprvalue>true</rtexprvalue>
- </attribute>
- <attribute>
- <description><![CDATA[The GroupID String]]></description>
- <name>var</name>
- <required>true</required>
- <rtexprvalue>true</rtexprvalue>
- </attribute>
- <dynamic-attributes>false</dynamic-attributes>
- </tag>
-</taglib>
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- ~ Licensed to the Apache Software Foundation (ASF) under one
- ~ or more contributor license agreements. See the NOTICE file
- ~ distributed with this work for additional information
- ~ regarding copyright ownership. The ASF licenses this file
- ~ to you under the Apache License, Version 2.0 (the
- ~ "License"); you may not use this file except in compliance
- ~ with the License. You may obtain a copy of the License at
- ~
- ~ http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing,
- ~ software distributed under the License is distributed on an
- ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- ~ KIND, either express or implied. See the License for the
- ~ specific language governing permissions and limitations
- ~ under the License.
- -->
-
-<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
-
- <display-name>Apache Archiva</display-name>
-
- <filter>
- <filter-name>webwork-cleanup</filter-name>
- <filter-class>org.apache.struts2.dispatcher.ActionContextCleanUp</filter-class>
- </filter>
-
- <filter>
- <filter-name>sitemesh</filter-name>
- <filter-class>com.opensymphony.sitemesh.webapp.SiteMeshFilter</filter-class>
- </filter>
-
- <filter>
- <filter-name>struts2</filter-name>
- <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
- </filter>
-
- <filter>
- <filter-name>encodingFilter</filter-name>
- <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
- <init-param>
- <param-name>encoding</param-name>
- <param-value>UTF-8</param-value>
- </init-param>
- <init-param>
- <param-name>forceEncoding</param-name>
- <param-value>true</param-value>
- </init-param>
- </filter>
-
- <filter-mapping>
- <filter-name>encodingFilter</filter-name>
- <url-pattern>/*</url-pattern>
- </filter-mapping>
-
- <!-- this must be before the sitemesh filter -->
- <filter-mapping>
- <filter-name>webwork-cleanup</filter-name>
- <url-pattern>/*</url-pattern>
- </filter-mapping>
-
- <filter-mapping>
- <filter-name>sitemesh</filter-name>
- <url-pattern>/*</url-pattern>
- </filter-mapping>
-
- <filter-mapping>
- <filter-name>struts2</filter-name>
- <url-pattern>/*</url-pattern>
- </filter-mapping>
-
- <listener>
- <listener-class>
- org.springframework.web.context.ContextLoaderListener
- </listener-class>
- </listener>
- <listener>
- <!-- TODO: some Spring technique for this? -->
- <listener-class>
- org.apache.archiva.web.startup.ArchivaStartup
- </listener-class>
- </listener>
-
- <listener>
- <listener-class>net.sf.ehcache.constructs.web.ShutdownListener</listener-class>
- </listener>
-
- <!-- to cleanup temporary group index created during a session -->
- <listener>
- <listener-class>org.apache.archiva.webdav.util.TemporaryGroupIndexSessionCleaner</listener-class>
- </listener>
-
- <context-param>
- <param-name>contextConfigLocation</param-name>
- <param-value>
- classpath*:META-INF/spring-context.xml
- /WEB-INF/applicationContext.xml
- </param-value>
- </context-param>
-
- <servlet>
- <servlet-name>RepositoryServlet</servlet-name>
- <servlet-class>
- org.apache.archiva.webdav.RepositoryServlet
- </servlet-class>
- <!-- Loading this on startup so as to take advantage of configuration listeners -->
- <load-on-startup>1</load-on-startup>
- </servlet>
-
-
- <servlet>
- <servlet-name>RssFeedServlet</servlet-name>
- <servlet-class>
- org.apache.archiva.web.rss.RssFeedServlet
- </servlet-class>
- </servlet>
-
- <servlet-mapping>
- <servlet-name>RssFeedServlet</servlet-name>
- <url-pattern>/feeds/*</url-pattern>
- </servlet-mapping>
-
- <servlet-mapping>
- <servlet-name>RepositoryServlet</servlet-name>
- <url-pattern>/repository/*</url-pattern>
- </servlet-mapping>
-
-
-
- <resource-ref>
- <res-ref-name>jdbc/users</res-ref-name>
- <res-type>javax.sql.DataSource</res-type>
- <res-auth>Container</res-auth>
- <res-sharing-scope>Shareable</res-sharing-scope>
- </resource-ref>
- <resource-ref>
- <res-ref-name>mail/Session</res-ref-name>
- <res-type>javax.mail.Session</res-type>
- <res-auth>Container</res-auth>
- <res-sharing-scope>Shareable</res-sharing-scope>
- </resource-ref>
-
- <servlet>
- <servlet-name>CXFServlet</servlet-name>
- <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
- <load-on-startup>1</load-on-startup>
- </servlet>
-
- <servlet-mapping>
- <servlet-name>CXFServlet</servlet-name>
- <url-pattern>/restServices/*</url-pattern>
- </servlet-mapping>
-
- <welcome-file-list>
- <welcome-file>index.jsp</welcome-file>
- </welcome-file-list>
-
- <session-config>
- <!-- 30 minutes session timeout -->
- <session-timeout>30</session-timeout>
- </session-config>
-
-</web-app>
+++ /dev/null
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-body {
- margin: 0px;
- padding: 0px;
-}
-
-img {
- border: none;
-}
-
-table {
- padding: 0px;
- width: 100%;
- margin-left: -2px;
- margin-right: -2px;
-}
-
-acronym {
- cursor: help;
- border-bottom: 1px dotted #feb;
-}
-
-table.bodyTable th, table.bodyTable td {
- padding: 2px 4px 2px 4px;
- vertical-align: top;
-}
-
-div.clear {
- clear: both;
- visibility: hidden;
-}
-
-div.clear hr {
- display: none;
-}
-
-#bannerLeft, #bannerRight {
- font-size: xx-large;
- font-weight: bold;
-}
-
-#bannerLeft img, #bannerRight img {
- margin: 0px;
-}
-
-.xleft, #bannerLeft img {
- float: left;
-}
-
-.xright, #bannerRight img {
- float: right;
-}
-
-.composite {
-}
-
-#banner {
- padding: 0px;
-}
-
-#banner img {
- border: none;
-}
-
-#breadcrumbs {
- padding: 3px 10px 3px 10px;
-}
-
-#leftColumn {
- width: 170px;
- float: left;
- overflow: auto;
-}
-
-#bodyColumn {
- margin-right: 1.5em;
- margin-left: 197px;
- min-height: 575px
-}
-
-#legend {
- padding: 8px 0 8px 0;
-}
-
-#navcolumn {
- padding: 8px 4px 0 8px;
-}
-
-#navcolumn h5 {
- margin: 0;
- padding: 0;
- font-size: small;
-}
-
-#navcolumn ul {
- margin: 0;
- padding: 0;
- font-size: small;
-}
-
-#navcolumn li {
- list-style-type: none;
- background-image: none;
- background-repeat: no-repeat;
- background-position: 0 0.4em;
- padding-left: 16px;
- list-style-position: outside;
- line-height: 1.2em;
- font-size: smaller;
-}
-
-#navcolumn li.expanded {
- background-image: url( ../images/expanded.gif );
-}
-
-#navcolumn li.collapsed {
- background-image: url( ../images/collapsed.gif );
-}
-
-#poweredBy {
- text-align: center;
-}
-
-#navcolumn img {
- margin-top: 10px;
- margin-bottom: 3px;
-}
-
-#poweredBy img {
- display: block;
- margin: 20px 0 20px 17px;
- border: 1px solid black;
- width: 90px;
- height: 30px;
-}
-
-#search img {
- margin: 0px;
- display: block;
-}
-
-#search #q, #search #btnG {
- border: 1px solid #999;
- margin-bottom: 10px;
-}
-
-#search form {
- margin: 0px;
-}
-
-#lastPublished {
- font-size: x-small;
-}
-
-.navSection {
- margin-bottom: 2px;
- padding: 8px;
-}
-
-.navSectionHead {
- font-weight: bold;
- font-size: x-small;
-}
-
-.section {
- padding: 4px;
-}
-
-#footer {
- padding: 3px 10px 3px 10px;
- font-size: x-small;
-}
-
-#breadcrumbs {
- font-size: x-small;
- margin: 0pt;
-}
-
-.source {
- padding: 12px;
- margin: 1em 7px 1em 7px;
-}
-
-.source pre {
- margin: 0px;
- padding: 0px;
-}
+++ /dev/null
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-body {
- padding: 0 0 10px 0;
-}
-
-body, td, th, select, input, li {
- font-family: Verdana, Helvetica, Arial, sans-serif;
- font-size: 9pt;
-}
-
-select, input {
- font-size: 0.9em;
- border: 1px solid #AAAAAA;
-}
-
-select {
- padding-left: 3px;
- height: auto;
- width: auto;
-}
-
-input {
- padding: 2px;
-}
-
-label .required {
- color: red;
- font-weight: bold;
-}
-
-th {
- text-align: right;
- padding-right: 1em;
- font-size: x-small;
- vertical-align: top;
-}
-
-.infoTable th {
- width: 15em;
-}
-
-#contentBox h1 {
- background-image: url( ../images/arrow.gif );
- background-repeat: no-repeat;
- background-position: left bottom;
- border-bottom: 1px solid #DFDEDE;
- padding: 0 0 1px 23px;
- margin-bottom: 0.5em;
- color: #333;
- voice-family: inherit;
- font-size: medium !important;
-}
-
-#contentBox h2 {
- border-bottom: 1px solid #DFDEDE;
- padding: 0 0 1px 0;
- margin-bottom: 0.5em;
- color: #333;
- voice-family: inherit;
- font-size: small !important;
-}
-
-#contentBox h3 {
- border-bottom: 1px solid #DFDEDE;
- padding: 0 0 1px 0;
- margin-bottom: 0.5em;
- color: #333;
- voice-family: inherit;
- font-size: small !important;
- margin-left: 2em;
-}
-
-table {
- width: auto;
-}
-
-code {
- font-family: Courier, monospace;
- font-size: 13px;
-}
-
-#legend li.externalLink {
- background: url( ../images/external.png ) left top no-repeat;
- padding-left: 18px;
-}
-
-a.externalLink, a.externalLink:link, a.externalLink:visited, a.externalLink:active, a.externalLink:hover {
- background: url( ../images/external.png ) right center no-repeat;
- padding-right: 18px;
-}
-
-#legend li.newWindow {
- background: url( ../images/newwindow.png ) left top no-repeat;
- padding-left: 18px;
-}
-
-a.newWindow, a.newWindow:link, a.newWindow:visited, a.newWindow:active, a.newWindow:hover {
- background: url( ../images/newwindow.png ) right center no-repeat;
- padding-right: 18px;
-}
-
-p {
- line-height: 1.3em;
- font-size: small;
-}
-
-#breadcrumbs {
- background-image: url(../images/breadcrumbs.jpg);
- padding: 2px 8px;
-}
-
-#navcolumn h5 {
- color: gray;
- font-weight: bold;
- font-size: 11px;
- padding: 10px 0 1px 19px;
-}
-
-.source {
- border: 1px solid #999;
-}
-
-#companyLogo {
- display: block;
- margin-left: auto;
- margin-right: auto;
- text-align: center;
-}
-
-dl {
- padding: 4px 4px 4px 6px;
- border: 1px solid #aaa;
- background-color: #ffc;
-}
-
-dt {
- color: #900;
-}
-
-#organizationLogo img, #projectLogo img, #projectLogo span {
- margin: 8px;
-}
-
-#banner {
- border-bottom: 1px solid #fff;
- padding: 8px;
-}
-
-#breadcrumbs a:link {
- text-decoration: none;
-}
-
-#breadcrumbs a:visited {
- text-decoration: none;
- color: #333
-}
-
-#breadcrumbs a:hover {
- text-decoration: none;
- color: white
-}
-
-.errormark, .warningmark, .donemark, .infomark {
- background: url( ../images/icon_error_sml.gif ) no-repeat;
-}
-
-.warningmark {
- background-image: url( ../images/icon_warning_sml.gif );
-}
-
-.donemark {
- background-image: url( ../images/icon_success_sml.gif );
-}
-
-.infomark {
- background-image: url( ../images/icon_info_sml.gif );
-}
-
-.booleanIcon {
- padding-left: 20px;
- height: 20px;
-}
-
-pre.pom {
- font-size: 0.9em;
- border: 1px solid #ddddff;
- background-color: #f8f8ff;
- padding: 5px;
-}
-
-pre.pom code {
- font-size: 0.9em;
-}
-
-#leftColumn {
- padding: 4px 4px 4px 4px;
- overflow: hidden;
-}
-
-#navcolumn {
- padding: 6px 0 0 2px;
-}
-
-#navcolumn li {
- font-size: 9px;
- text-indent: 19px;
- line-height: 24px;
- height: 25px;
- width: 161px;
- background-image: url( ../images/super.gif );
- background-position: 0 0;
- background-repeat: no-repeat;
- display: block;
- padding-left: 0;
-}
-
-#navcolumn li li {
- padding-left: 16px;
- background: none;
- display: block;
-}
-
-#navcolumn li li a:hover {
- color: black !important;
- background: none;
- display: block;
-}
-
-#navcolumn li li a:active {
- color: red !important;
- background: none;
- display: block;
-}
-
-#navcolumn li.collapsed {
- background-image: url( ../images/super.gif );
-}
-
-#navcolumn li.expanded {
- background-image: url( ../images/super.gif );
- height: inherit;
-}
-
-#navcolumn li a:link {
- color: #666;
- display: block;
-}
-
-#navcolumn li a:hover {
- color: #fff !important;
- background: url( ../images/super_hl.gif ) 0 -25px no-repeat;
- display: block;
-}
-
-#navcolumn li a:active {
- color: #fff !important;
- background: url( ../images/super_hl.gif ) 0 -50px no-repeat;
- display: block;
-}
-
-#navcolumn li a:visited {
- color: #666;
- display: block;
-}
-
-#navcolumn li ul li {
- color: #333 !important;
- text-indent: 30px !important;
- line-height: 20px !important;
- height: 20px !important;
- background-image: url( ../images/supersub.gif ) !important;
- font-size: 9px;
- width: 161px;
- background-repeat: no-repeat;
- display: block;
- padding-left: 0;
-}
-
-#navcolumn li ul li a:hover {
- color: #fff !important;
- background: url( ../images/super_hl_sub.gif ) 0 -20px no-repeat;
- background-position: right;
- width: 161px;
- display: block;
-}
-
-#footer {
- border-top: 1px solid #CCCCCC;
- padding: 14px 4px 12px 4px;
- color: #333333;
- margin-top: 2em;
-}
-
-a:link, a:visited {
- color: #333;
-}
-
-#navcolumn a {
- text-decoration: none;
-}
-
-a:active, a:hover {
- color: #f30;
-}
-
-blockquote {
- border-left: 1px solid #DFDEDE;
- padding-left: 1em;
-}
-
-.missing {
- background-color: red;
- color: white;
- font-weight: bold;
- padding: 4px;
- margin-left: 20px;
- margin-right: 20px;
-
-}
-
-#searchBox {
- margin: 5%;
-}
-
-#searchHint {
- margin: 5%;
-}
-
-#topSearchBox {
- float: right;
- padding: 2px 8px;
-}
+++ /dev/null
-/*
- * jQuery UI CSS Framework 1.8.14
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Theming/API
- *
- * To view and modify this theme, visit http://jqueryui.com/themeroller/
- */
-
-
-/* Component containers
-----------------------------------*/
-.ui-widget { font-family: Verdana,Arial,sans-serif/*{ffDefault}*/; font-size: 1.1em/*{fsDefault}*/; }
-.ui-widget .ui-widget { font-size: 1em; }
-.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Verdana,Arial,sans-serif/*{ffDefault}*/; font-size: 1em; }
-.ui-widget-content { border: 1px solid #aaaaaa/*{borderColorContent}*/; background: #ffffff/*{bgColorContent}*/ url(images/ui-bg_flat_75_ffffff_40x100.png)/*{bgImgUrlContent}*/ 50%/*{bgContentXPos}*/ 50%/*{bgContentYPos}*/ repeat-x/*{bgContentRepeat}*/; color: #222222/*{fcContent}*/; }
-.ui-widget-content a { color: #222222/*{fcContent}*/; }
-.ui-widget-header { border: 1px solid #aaaaaa/*{borderColorHeader}*/; background: #cccccc/*{bgColorHeader}*/ url(images/ui-bg_highlight-soft_75_cccccc_1x100.png)/*{bgImgUrlHeader}*/ 50%/*{bgHeaderXPos}*/ 50%/*{bgHeaderYPos}*/ repeat-x/*{bgHeaderRepeat}*/; color: #222222/*{fcHeader}*/; font-weight: bold; }
-.ui-widget-header a { color: #222222/*{fcHeader}*/; }
-
-/* Interaction states
-----------------------------------*/
-.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { border: 1px solid #d3d3d3/*{borderColorDefault}*/; background: #e6e6e6/*{bgColorDefault}*/ url(images/ui-bg_glass_75_e6e6e6_1x400.png)/*{bgImgUrlDefault}*/ 50%/*{bgDefaultXPos}*/ 50%/*{bgDefaultYPos}*/ repeat-x/*{bgDefaultRepeat}*/; font-weight: normal/*{fwDefault}*/; color: #555555/*{fcDefault}*/; }
-.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #555555/*{fcDefault}*/; text-decoration: none; }
-.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus { border: 1px solid #999999/*{borderColorHover}*/; background: #dadada/*{bgColorHover}*/ url(images/ui-bg_glass_75_dadada_1x400.png)/*{bgImgUrlHover}*/ 50%/*{bgHoverXPos}*/ 50%/*{bgHoverYPos}*/ repeat-x/*{bgHoverRepeat}*/; font-weight: normal/*{fwDefault}*/; color: #212121/*{fcHover}*/; }
-.ui-state-hover a, .ui-state-hover a:hover { color: #212121/*{fcHover}*/; text-decoration: none; }
-.ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border: 1px solid #aaaaaa/*{borderColorActive}*/; background: #ffffff/*{bgColorActive}*/ url(images/ui-bg_glass_65_ffffff_1x400.png)/*{bgImgUrlActive}*/ 50%/*{bgActiveXPos}*/ 50%/*{bgActiveYPos}*/ repeat-x/*{bgActiveRepeat}*/; font-weight: normal/*{fwDefault}*/; color: #212121/*{fcActive}*/; }
-.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #212121/*{fcActive}*/; text-decoration: none; }
-.ui-widget :active { outline: none; }
-
-/* Interaction Cues
-----------------------------------*/
-.ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight {border: 1px solid #fcefa1/*{borderColorHighlight}*/; background: #fbf9ee/*{bgColorHighlight}*/ url(images/ui-bg_glass_55_fbf9ee_1x400.png)/*{bgImgUrlHighlight}*/ 50%/*{bgHighlightXPos}*/ 50%/*{bgHighlightYPos}*/ repeat-x/*{bgHighlightRepeat}*/; color: #363636/*{fcHighlight}*/; }
-.ui-state-highlight a, .ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a { color: #363636/*{fcHighlight}*/; }
-.ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error {border: 1px solid #cd0a0a/*{borderColorError}*/; background: #fef1ec/*{bgColorError}*/ url(images/ui-bg_glass_95_fef1ec_1x400.png)/*{bgImgUrlError}*/ 50%/*{bgErrorXPos}*/ 50%/*{bgErrorYPos}*/ repeat-x/*{bgErrorRepeat}*/; color: #cd0a0a/*{fcError}*/; }
-.ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { color: #cd0a0a/*{fcError}*/; }
-.ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { color: #cd0a0a/*{fcError}*/; }
-.ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary { font-weight: bold; }
-.ui-priority-secondary, .ui-widget-content .ui-priority-secondary, .ui-widget-header .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; }
-.ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; }
-
-/* Icons
-----------------------------------*/
-
-/* states and images */
-.ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_222222_256x240.png)/*{iconsContent}*/; }
-.ui-widget-content .ui-icon {background-image: url(images/ui-icons_222222_256x240.png)/*{iconsContent}*/; }
-.ui-widget-header .ui-icon {background-image: url(images/ui-icons_222222_256x240.png)/*{iconsHeader}*/; }
-.ui-state-default .ui-icon { background-image: url(images/ui-icons_888888_256x240.png)/*{iconsDefault}*/; }
-.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_454545_256x240.png)/*{iconsHover}*/; }
-.ui-state-active .ui-icon {background-image: url(images/ui-icons_454545_256x240.png)/*{iconsActive}*/; }
-.ui-state-highlight .ui-icon {background-image: url(images/ui-icons_2e83ff_256x240.png)/*{iconsHighlight}*/; }
-.ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_cd0a0a_256x240.png)/*{iconsError}*/; }
-
-/* positioning */
-.ui-icon-carat-1-n { background-position: 0 0; }
-.ui-icon-carat-1-ne { background-position: -16px 0; }
-.ui-icon-carat-1-e { background-position: -32px 0; }
-.ui-icon-carat-1-se { background-position: -48px 0; }
-.ui-icon-carat-1-s { background-position: -64px 0; }
-.ui-icon-carat-1-sw { background-position: -80px 0; }
-.ui-icon-carat-1-w { background-position: -96px 0; }
-.ui-icon-carat-1-nw { background-position: -112px 0; }
-.ui-icon-carat-2-n-s { background-position: -128px 0; }
-.ui-icon-carat-2-e-w { background-position: -144px 0; }
-.ui-icon-triangle-1-n { background-position: 0 -16px; }
-.ui-icon-triangle-1-ne { background-position: -16px -16px; }
-.ui-icon-triangle-1-e { background-position: -32px -16px; }
-.ui-icon-triangle-1-se { background-position: -48px -16px; }
-.ui-icon-triangle-1-s { background-position: -64px -16px; }
-.ui-icon-triangle-1-sw { background-position: -80px -16px; }
-.ui-icon-triangle-1-w { background-position: -96px -16px; }
-.ui-icon-triangle-1-nw { background-position: -112px -16px; }
-.ui-icon-triangle-2-n-s { background-position: -128px -16px; }
-.ui-icon-triangle-2-e-w { background-position: -144px -16px; }
-.ui-icon-arrow-1-n { background-position: 0 -32px; }
-.ui-icon-arrow-1-ne { background-position: -16px -32px; }
-.ui-icon-arrow-1-e { background-position: -32px -32px; }
-.ui-icon-arrow-1-se { background-position: -48px -32px; }
-.ui-icon-arrow-1-s { background-position: -64px -32px; }
-.ui-icon-arrow-1-sw { background-position: -80px -32px; }
-.ui-icon-arrow-1-w { background-position: -96px -32px; }
-.ui-icon-arrow-1-nw { background-position: -112px -32px; }
-.ui-icon-arrow-2-n-s { background-position: -128px -32px; }
-.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
-.ui-icon-arrow-2-e-w { background-position: -160px -32px; }
-.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
-.ui-icon-arrowstop-1-n { background-position: -192px -32px; }
-.ui-icon-arrowstop-1-e { background-position: -208px -32px; }
-.ui-icon-arrowstop-1-s { background-position: -224px -32px; }
-.ui-icon-arrowstop-1-w { background-position: -240px -32px; }
-.ui-icon-arrowthick-1-n { background-position: 0 -48px; }
-.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
-.ui-icon-arrowthick-1-e { background-position: -32px -48px; }
-.ui-icon-arrowthick-1-se { background-position: -48px -48px; }
-.ui-icon-arrowthick-1-s { background-position: -64px -48px; }
-.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
-.ui-icon-arrowthick-1-w { background-position: -96px -48px; }
-.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
-.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
-.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
-.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
-.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
-.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
-.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
-.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
-.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
-.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
-.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
-.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
-.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
-.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
-.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
-.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
-.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
-.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
-.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
-.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
-.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
-.ui-icon-arrow-4 { background-position: 0 -80px; }
-.ui-icon-arrow-4-diag { background-position: -16px -80px; }
-.ui-icon-extlink { background-position: -32px -80px; }
-.ui-icon-newwin { background-position: -48px -80px; }
-.ui-icon-refresh { background-position: -64px -80px; }
-.ui-icon-shuffle { background-position: -80px -80px; }
-.ui-icon-transfer-e-w { background-position: -96px -80px; }
-.ui-icon-transferthick-e-w { background-position: -112px -80px; }
-.ui-icon-folder-collapsed { background-position: 0 -96px; }
-.ui-icon-folder-open { background-position: -16px -96px; }
-.ui-icon-document { background-position: -32px -96px; }
-.ui-icon-document-b { background-position: -48px -96px; }
-.ui-icon-note { background-position: -64px -96px; }
-.ui-icon-mail-closed { background-position: -80px -96px; }
-.ui-icon-mail-open { background-position: -96px -96px; }
-.ui-icon-suitcase { background-position: -112px -96px; }
-.ui-icon-comment { background-position: -128px -96px; }
-.ui-icon-person { background-position: -144px -96px; }
-.ui-icon-print { background-position: -160px -96px; }
-.ui-icon-trash { background-position: -176px -96px; }
-.ui-icon-locked { background-position: -192px -96px; }
-.ui-icon-unlocked { background-position: -208px -96px; }
-.ui-icon-bookmark { background-position: -224px -96px; }
-.ui-icon-tag { background-position: -240px -96px; }
-.ui-icon-home { background-position: 0 -112px; }
-.ui-icon-flag { background-position: -16px -112px; }
-.ui-icon-calendar { background-position: -32px -112px; }
-.ui-icon-cart { background-position: -48px -112px; }
-.ui-icon-pencil { background-position: -64px -112px; }
-.ui-icon-clock { background-position: -80px -112px; }
-.ui-icon-disk { background-position: -96px -112px; }
-.ui-icon-calculator { background-position: -112px -112px; }
-.ui-icon-zoomin { background-position: -128px -112px; }
-.ui-icon-zoomout { background-position: -144px -112px; }
-.ui-icon-search { background-position: -160px -112px; }
-.ui-icon-wrench { background-position: -176px -112px; }
-.ui-icon-gear { background-position: -192px -112px; }
-.ui-icon-heart { background-position: -208px -112px; }
-.ui-icon-star { background-position: -224px -112px; }
-.ui-icon-link { background-position: -240px -112px; }
-.ui-icon-cancel { background-position: 0 -128px; }
-.ui-icon-plus { background-position: -16px -128px; }
-.ui-icon-plusthick { background-position: -32px -128px; }
-.ui-icon-minus { background-position: -48px -128px; }
-.ui-icon-minusthick { background-position: -64px -128px; }
-.ui-icon-close { background-position: -80px -128px; }
-.ui-icon-closethick { background-position: -96px -128px; }
-.ui-icon-key { background-position: -112px -128px; }
-.ui-icon-lightbulb { background-position: -128px -128px; }
-.ui-icon-scissors { background-position: -144px -128px; }
-.ui-icon-clipboard { background-position: -160px -128px; }
-.ui-icon-copy { background-position: -176px -128px; }
-.ui-icon-contact { background-position: -192px -128px; }
-.ui-icon-image { background-position: -208px -128px; }
-.ui-icon-video { background-position: -224px -128px; }
-.ui-icon-script { background-position: -240px -128px; }
-.ui-icon-alert { background-position: 0 -144px; }
-.ui-icon-info { background-position: -16px -144px; }
-.ui-icon-notice { background-position: -32px -144px; }
-.ui-icon-help { background-position: -48px -144px; }
-.ui-icon-check { background-position: -64px -144px; }
-.ui-icon-bullet { background-position: -80px -144px; }
-.ui-icon-radio-off { background-position: -96px -144px; }
-.ui-icon-radio-on { background-position: -112px -144px; }
-.ui-icon-pin-w { background-position: -128px -144px; }
-.ui-icon-pin-s { background-position: -144px -144px; }
-.ui-icon-play { background-position: 0 -160px; }
-.ui-icon-pause { background-position: -16px -160px; }
-.ui-icon-seek-next { background-position: -32px -160px; }
-.ui-icon-seek-prev { background-position: -48px -160px; }
-.ui-icon-seek-end { background-position: -64px -160px; }
-.ui-icon-seek-start { background-position: -80px -160px; }
-/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
-.ui-icon-seek-first { background-position: -80px -160px; }
-.ui-icon-stop { background-position: -96px -160px; }
-.ui-icon-eject { background-position: -112px -160px; }
-.ui-icon-volume-off { background-position: -128px -160px; }
-.ui-icon-volume-on { background-position: -144px -160px; }
-.ui-icon-power { background-position: 0 -176px; }
-.ui-icon-signal-diag { background-position: -16px -176px; }
-.ui-icon-signal { background-position: -32px -176px; }
-.ui-icon-battery-0 { background-position: -48px -176px; }
-.ui-icon-battery-1 { background-position: -64px -176px; }
-.ui-icon-battery-2 { background-position: -80px -176px; }
-.ui-icon-battery-3 { background-position: -96px -176px; }
-.ui-icon-circle-plus { background-position: 0 -192px; }
-.ui-icon-circle-minus { background-position: -16px -192px; }
-.ui-icon-circle-close { background-position: -32px -192px; }
-.ui-icon-circle-triangle-e { background-position: -48px -192px; }
-.ui-icon-circle-triangle-s { background-position: -64px -192px; }
-.ui-icon-circle-triangle-w { background-position: -80px -192px; }
-.ui-icon-circle-triangle-n { background-position: -96px -192px; }
-.ui-icon-circle-arrow-e { background-position: -112px -192px; }
-.ui-icon-circle-arrow-s { background-position: -128px -192px; }
-.ui-icon-circle-arrow-w { background-position: -144px -192px; }
-.ui-icon-circle-arrow-n { background-position: -160px -192px; }
-.ui-icon-circle-zoomin { background-position: -176px -192px; }
-.ui-icon-circle-zoomout { background-position: -192px -192px; }
-.ui-icon-circle-check { background-position: -208px -192px; }
-.ui-icon-circlesmall-plus { background-position: 0 -208px; }
-.ui-icon-circlesmall-minus { background-position: -16px -208px; }
-.ui-icon-circlesmall-close { background-position: -32px -208px; }
-.ui-icon-squaresmall-plus { background-position: -48px -208px; }
-.ui-icon-squaresmall-minus { background-position: -64px -208px; }
-.ui-icon-squaresmall-close { background-position: -80px -208px; }
-.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
-.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
-.ui-icon-grip-solid-vertical { background-position: -32px -224px; }
-.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
-.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
-.ui-icon-grip-diagonal-se { background-position: -80px -224px; }
-
-
-/* Misc visuals
-----------------------------------*/
-
-/* Corner radius */
-.ui-corner-all, .ui-corner-top, .ui-corner-left, .ui-corner-tl { -moz-border-radius-topleft: 4px/*{cornerRadius}*/; -webkit-border-top-left-radius: 4px/*{cornerRadius}*/; -khtml-border-top-left-radius: 4px/*{cornerRadius}*/; border-top-left-radius: 4px/*{cornerRadius}*/; }
-.ui-corner-all, .ui-corner-top, .ui-corner-right, .ui-corner-tr { -moz-border-radius-topright: 4px/*{cornerRadius}*/; -webkit-border-top-right-radius: 4px/*{cornerRadius}*/; -khtml-border-top-right-radius: 4px/*{cornerRadius}*/; border-top-right-radius: 4px/*{cornerRadius}*/; }
-.ui-corner-all, .ui-corner-bottom, .ui-corner-left, .ui-corner-bl { -moz-border-radius-bottomleft: 4px/*{cornerRadius}*/; -webkit-border-bottom-left-radius: 4px/*{cornerRadius}*/; -khtml-border-bottom-left-radius: 4px/*{cornerRadius}*/; border-bottom-left-radius: 4px/*{cornerRadius}*/; }
-.ui-corner-all, .ui-corner-bottom, .ui-corner-right, .ui-corner-br { -moz-border-radius-bottomright: 4px/*{cornerRadius}*/; -webkit-border-bottom-right-radius: 4px/*{cornerRadius}*/; -khtml-border-bottom-right-radius: 4px/*{cornerRadius}*/; border-bottom-right-radius: 4px/*{cornerRadius}*/; }
-
-/* Overlays */
-.ui-widget-overlay { background: #aaaaaa/*{bgColorOverlay}*/ url(images/ui-bg_flat_0_aaaaaa_40x100.png)/*{bgImgUrlOverlay}*/ 50%/*{bgOverlayXPos}*/ 50%/*{bgOverlayYPos}*/ repeat-x/*{bgOverlayRepeat}*/; opacity: .3;filter:Alpha(Opacity=30)/*{opacityOverlay}*/; }
-.ui-widget-shadow { margin: -8px/*{offsetTopShadow}*/ 0 0 -8px/*{offsetLeftShadow}*/; padding: 8px/*{thicknessShadow}*/; background: #aaaaaa/*{bgColorShadow}*/ url(images/ui-bg_flat_0_aaaaaa_40x100.png)/*{bgImgUrlShadow}*/ 50%/*{bgShadowXPos}*/ 50%/*{bgShadowYPos}*/ repeat-x/*{bgShadowRepeat}*/; opacity: .3;filter:Alpha(Opacity=30)/*{opacityShadow}*/; -moz-border-radius: 8px/*{cornerRadiusShadow}*/; -khtml-border-radius: 8px/*{cornerRadiusShadow}*/; -webkit-border-radius: 8px/*{cornerRadiusShadow}*/; border-radius: 8px/*{cornerRadiusShadow}*/; }
\ No newline at end of file
+++ /dev/null
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#banner, #footer, #leftcol, #breadcrumbs, .docs #toc, .docs .courtesylinks, #leftColumn, #navColumn {
- display: none !important;
-}
-
-#bodyColumn, body.docs div.docs {
- margin: 0 !important;
- border: none !important
-}
+++ /dev/null
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#download {
- float: right;
-}
-
-#download a {
- text-decoration: none;
-}
-
-#download td.type {
- padding-right: 1em;
- white-space: nowrap;
-}
-
-#download td.size {
- text-align: right;
-}
-
-#contentArea {
- /* margin-right: 15em; */
- padding: 1em;
-}
-
-#tabs b {
- border: 1px #DFDEDE solid;
- padding-left: 1em;
- padding-right: 1em;
-}
-
-#tabs a {
- border: 1px #DFDEDE solid;
- padding-left: 1em;
- padding-right: 1em;
- text-decoration: none;
-}
-
-#tabArea {
- border-top: 1px solid #DFDEDE;
- padding: 1em;
-}
-
-#searchTypes {
- text-align: right;
- font-size: xx-small;
-}
-
-.statusFailed {
- color: red;
- font-weight: bold;
-}
-
-/* WebWork validation failures */
-.errorMessage {
- color: red;
- font-weight: bold;
-}
-
-.actionMessage {
- font-size: 1.0em;
- font-weight: bold;
- color: blue;
-}
-
-.errorBullet {
- list-style-image: url( "../images/icon_error_sml.gif" );
-}
-
-.warningBullet {
- list-style-image: url( "../images/icon_warning_sml.gif" );
-}
-
-.infoBullet {
- list-style-image: url( "../images/icon_info_sml.gif" );
-}
-
-.artifact-link {
- font-size: x-small;
- padding-left: 5em;
-}
-
-.artifact-title {
-
-}
-
-ul.dependencyTree {
- margin-left: 50px;
-}
-
-ul.dependencyTree span.artifact-link {
- padding-left: 0px;
-}
-
-.eXtremeTable tr.filter {
- padding: 1px;
-}
-
-.eXtremeTable .tableRegion,.eXtremeTable .statusBar {
- width: 100%;
-}
-
-.eXtremeTable .tableRegion .tableHeader {
- background-color: None;
- background-image: url(../images/breadcrumbs.jpg);
- color: gray;
-}
-
-.eXtremeTable .tableRegion .tableHeaderSort {
- background-color: #FFBF5F;
-}
-
-.eXtremeTable .compactToolbar td {
- white-space: nowrap;
-}
-
-.tools {
- border-color: gray !important;
-}
-
-table.tools th.toolHeading
-{
- color: gray;
-}
-
-.tools .toolHeading {
- padding: 0px 3px 0px 3px;
- margin: 0px !important;
- font-size: 11px !important;
- background-color: red;
- background-image: url(../images/breadcrumbs.jpg);
-}
-
-div.repository h3 {
- border-bottom: 0px !important;
- padding-left: 15px !important;
-}
-
-div.repository {
- border-bottom: 1px solid #DFDEDE;
-}
-
-div.proxyConfig,
-div.repoGroup {
- border: 1px dashed #DFDEDE;
- margin-bottom: 15px;
- padding: 5px;
-}
-
-div.proxyConfig div.managedRepo,
-div.proxyConfig div.remoteRepo,
-div.repoGroup div.managedRepo {
- border: 1px dotted gray;
- padding: 5px;
- background-color: white;
-}
-
-div.proxyConfig div.remoteRepo {
- margin: 5px;
-}
-
-div.proxyConfig div.managedRepo img,
-div.proxyConfig div.remoteRepo img,
-div.repoGroup div.managedRepo img {
- float: left;
- border: 0px;
-}
-
-div.proxyConfig div.managedRepo p,
-div.proxyConfig div.remoteRepo p {
- margin: 0px;
- margin-left: 40px;
- padding: 0px;
-}
-
-div.repoGroup div.managedRepo p {
- margin: 8px;
- margin-left: 40px;
- padding: 0px;
-}
-
-div.proxyConfig div.managedRepo p.id,
-div.proxyConfig div.remoteRepo p.id,
-div.repoGroup div.managedRepo p.id {
- font-family: monospace;
-}
-
-div.proxyConfig div.connector,
-div.repoGroup div.connector {
- border: 1px solid #aaaaff;
- margin-top: 10px;
- margin-left: 40px !important;
-}
-
-div.proxyConfig a.expand {
- font-size: 7pt;
- color: gray;
-}
-
-div.proxyConfig div.controls,
-div.repoGroup div.controls {
- float: right;
-}
-
-div.proxyConfig div.connector h4,
-div.repoGroup div.connector h4 {
- padding: 3px;
- font-size: 8pt;
- margin: 0px;
-}
-
-div.proxyConfig div.connector table.settings {
- border: 0px;
- background-color: transparent;
- font-size: 8pt;
- margin-left: 10px;
-}
-
-div.proxyConfig div.connector table.settings th,
-div.proxyConfig div.connector table.settings td {
- font-size: 8pt;
-}
-
-div.proxyConfig div.connector table.settings table.policies {
- border: 1px dotted gray;
-}
-
-div.proxyConfig div.connector table p {
- margin: 0px;
- padding: 0px;
-}
-
-div.repoGroup div.repos {
- text-align: right;
- padding: 4px 0px 0px 0px;
-}
-
-div.admin div.dark,
-div.admin div.lite {
- border: 1px solid #aaaaaa;
- font-size: 11pt;
- margin-left: 15px;
- margin-right: 15px;
- margin-bottom: 5px;
- padding: 5px;
-}
-
-div.admin div.lite {
- background-color: white;
-}
-
-div.admin div.dark {
- background-color: #eeeeee;
-}
-
-div.admin div.controls {
- float: right;
- font-size: 8pt !important;
-}
-
-div.admin div.filetype table {
- margin-left: 25px;
- border: 1px solid gray;
-}
-
-div.filetype table td.controls {
- width: 5%;
-}
-
-div.filetype table td.odd,
-div.admin table.consumers td.odd {
- background-color: #dddddd;
-}
-
-div.filetype table td.even,
-div.admin table.consumers td.even {
- background-color: white;
-}
-
-div.admin table.consumers {
- margin-left: 15px;
- border: 1px solid gray;
-}
-
-div.admin table.consumers th {
- font-size: 1.0em;
- background-color: #cccccc;
- text-align: left;
-}
-
-div.admin table.consumers td strong {
- font-size: 0.8em;
-}
-
-div.warningbox {
- margin: 20px 40px 20px 40px;
- border: 1px solid #CC0000;
- background-color: #FFCCCC;
- color: #000000;
- font-size: 15pt;
- padding: 20px;
-}
-
-div.infobox {
- margin: 20px 40px 20px 40px;
- border: 1px solid #0000CC;
- background-color: #EEEEFF;
- font-size: 9pt;
- padding: 20px;
-}
-
-div.buttons {
- text-align: center;
-}
-
-div.versions {
- border: 1px dashed #DFDEDE;
- margin-bottom: 15px;
- padding: 5px;
-}
-
-div.versions a.expand {
- font-size: 7pt;
- color: gray;
-}
-
-#messages {
- background-color: yellow;
- border: 1px solid orange;
- margin-top: 2em;
-}
-
-#messages ul {
- list-style-image: url(../images/icon_warning_sml.gif)
-}
-
-#messagesinfo {
- background-color: yellow;
- border: 1px solid orange;
- margin-top: 2em;
-}
-
-#messagesinfo ul {
- list-style-image: url(../images/icon_success_sml.gif)
-}
-
-table.auditlogs {
- text-align: center;
- font-family: Verdana, Geneva, Arial, Helvetica, sans-serif ;
- font-weight: normal;
- font-size: 11px;
- color: #fff;
- width: 100%;
- background-color: #666;
- border: 0px;
- border-collapse: collapse;
- border-spacing: 0px;
-}
-
-table.auditlogs th {
- background-color: #666;
- color: #fff;
- padding: 4px;
- text-align: center;
- border-bottom: 2px #fff solid;
- font-size: 12px;
- font-weight: bold;
-}
-
-table.auditlogs td {
- background-color: #CCC;
- color: #000;
- padding: 4px;
- text-align: center;
- border: 1px #fff solid;
-}
-
-div.auditLogReportResults {
- border: 1px dashed #DFDEDE;
- margin-bottom: 15px;
- margin-left: 2px;
- padding: 5px;
-}
+++ /dev/null
-<%--
- ~ Licensed to the Apache Software Foundation (ASF) under one
- ~ or more contributor license agreements. See the NOTICE file
- ~ distributed with this work for additional information
- ~ regarding copyright ownership. The ASF licenses this file
- ~ to you under the Apache License, Version 2.0 (the
- ~ "License"); you may not use this file except in compliance
- ~ with the License. You may obtain a copy of the License at
- ~
- ~ http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing,
- ~ software distributed under the License is distributed on an
- ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- ~ KIND, either express or implied. See the License for the
- ~ specific language governing permissions and limitations
- ~ under the License.
- --%>
-
-<%response.sendRedirect( request.getContextPath() + "/index.action" );%>
\ No newline at end of file
+++ /dev/null
-/*!
- * jQuery JavaScript Library v1.6.1
- * http://jquery.com/
- *
- * Copyright 2011, John Resig
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * Includes Sizzle.js
- * http://sizzlejs.com/
- * Copyright 2011, The Dojo Foundation
- * Released under the MIT, BSD, and GPL Licenses.
- *
- * Date: Thu May 12 15:04:36 2011 -0400
- */
-(function(a,b){function cy(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cv(a){if(!cj[a]){var b=f("<"+a+">").appendTo("body"),d=b.css("display");b.remove();if(d==="none"||d===""){ck||(ck=c.createElement("iframe"),ck.frameBorder=ck.width=ck.height=0),c.body.appendChild(ck);if(!cl||!ck.createElement)cl=(ck.contentWindow||ck.contentDocument).document,cl.write("<!doctype><html><body></body></html>");b=cl.createElement(a),cl.body.appendChild(b),d=f.css(b,"display"),c.body.removeChild(ck)}cj[a]=d}return cj[a]}function cu(a,b){var c={};f.each(cp.concat.apply([],cp.slice(0,b)),function(){c[this]=a});return c}function ct(){cq=b}function cs(){setTimeout(ct,0);return cq=f.now()}function ci(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ch(){try{return new a.XMLHttpRequest}catch(b){}}function cb(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g<i;g++){if(g===1)for(h in a.converters)typeof h=="string"&&(e[h.toLowerCase()]=a.converters[h]);l=k,k=d[g];if(k==="*")k=l;else if(l!=="*"&&l!==k){m=l+" "+k,n=e[m]||e["* "+k];if(!n){p=b;for(o in e){j=o.split(" ");if(j[0]===l||j[0]==="*"){p=e[j[1]+" "+k];if(p){o=e[o],o===!0?n=p:p===!0&&(n=o);break}}}}!n&&!p&&f.error("No conversion from "+m.replace(" "," to ")),n!==!0&&(c=n?n(c):p(o(c)))}}return c}function ca(a,c,d){var e=a.contents,f=a.dataTypes,g=a.responseFields,h,i,j,k;for(i in g)i in d&&(c[g[i]]=d[i]);while(f[0]==="*")f.shift(),h===b&&(h=a.mimeType||c.getResponseHeader("content-type"));if(h)for(i in e)if(e[i]&&e[i].test(h)){f.unshift(i);break}if(f[0]in d)j=f[0];else{for(i in d){if(!f[0]||a.converters[i+" "+f[0]]){j=i;break}k||(k=i)}j=j||k}if(j){j!==f[0]&&f.unshift(j);return d[j]}}function b_(a,b,c,d){if(f.isArray(b))f.each(b,function(b,e){c||bF.test(a)?d(a,e):b_(a+"["+(typeof e=="object"||f.isArray(e)?b:"")+"]",e,c,d)});else if(!c&&b!=null&&typeof b=="object")for(var e in b)b_(a+"["+e+"]",b[e],c,d);else d(a,b)}function b$(a,c,d,e,f,g){f=f||c.dataTypes[0],g=g||{},g[f]=!0;var h=a[f],i=0,j=h?h.length:0,k=a===bU,l;for(;i<j&&(k||!l);i++)l=h[i](c,d,e),typeof l=="string"&&(!k||g[l]?l=b:(c.dataTypes.unshift(l),l=b$(a,c,d,e,l,g)));(k||!l)&&!g["*"]&&(l=b$(a,c,d,e,"*",g));return l}function bZ(a){return function(b,c){typeof b!="string"&&(c=b,b="*");if(f.isFunction(c)){var d=b.toLowerCase().split(bQ),e=0,g=d.length,h,i,j;for(;e<g;e++)h=d[e],j=/^\+/.test(h),j&&(h=h.substr(1)||"*"),i=a[h]=a[h]||[],i[j?"unshift":"push"](c)}}}function bD(a,b,c){var d=b==="width"?bx:by,e=b==="width"?a.offsetWidth:a.offsetHeight;if(c==="border")return e;f.each(d,function(){c||(e-=parseFloat(f.css(a,"padding"+this))||0),c==="margin"?e+=parseFloat(f.css(a,"margin"+this))||0:e-=parseFloat(f.css(a,"border"+this+"Width"))||0});return e}function bn(a,b){b.src?f.ajax({url:b.src,async:!1,dataType:"script"}):f.globalEval((b.text||b.textContent||b.innerHTML||"").replace(bf,"/*$0*/")),b.parentNode&&b.parentNode.removeChild(b)}function bm(a){f.nodeName(a,"input")?bl(a):a.getElementsByTagName&&f.grep(a.getElementsByTagName("input"),bl)}function bl(a){if(a.type==="checkbox"||a.type==="radio")a.defaultChecked=a.checked}function bk(a){return"getElementsByTagName"in a?a.getElementsByTagName("*"):"querySelectorAll"in a?a.querySelectorAll("*"):[]}function bj(a,b){var c;if(b.nodeType===1){b.clearAttributes&&b.clearAttributes(),b.mergeAttributes&&b.mergeAttributes(a),c=b.nodeName.toLowerCase();if(c==="object")b.outerHTML=a.outerHTML;else if(c!=="input"||a.type!=="checkbox"&&a.type!=="radio"){if(c==="option")b.selected=a.defaultSelected;else if(c==="input"||c==="textarea")b.defaultValue=a.defaultValue}else a.checked&&(b.defaultChecked=b.checked=a.checked),b.value!==a.value&&(b.value=a.value);b.removeAttribute(f.expando)}}function bi(a,b){if(b.nodeType===1&&!!f.hasData(a)){var c=f.expando,d=f.data(a),e=f.data(b,d);if(d=d[c]){var g=d.events;e=e[c]=f.extend({},d);if(g){delete e.handle,e.events={};for(var h in g)for(var i=0,j=g[h].length;i<j;i++)f.event.add(b,h+(g[h][i].namespace?".":"")+g[h][i].namespace,g[h][i],g[h][i].data)}}}}function bh(a,b){return f.nodeName(a,"table")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function X(a,b,c){b=b||0;if(f.isFunction(b))return f.grep(a,function(a,d){var e=!!b.call(a,d,a);return e===c});if(b.nodeType)return f.grep(a,function(a,d){return a===b===c});if(typeof b=="string"){var d=f.grep(a,function(a){return a.nodeType===1});if(S.test(b))return f.filter(b,d,!c);b=f.filter(b,d)}return f.grep(a,function(a,d){return f.inArray(a,b)>=0===c})}function W(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function O(a,b){return(a&&a!=="*"?a+".":"")+b.replace(A,"`").replace(B,"&")}function N(a){var b,c,d,e,g,h,i,j,k,l,m,n,o,p=[],q=[],r=f._data(this,"events");if(!(a.liveFired===this||!r||!r.live||a.target.disabled||a.button&&a.type==="click")){a.namespace&&(n=new RegExp("(^|\\.)"+a.namespace.split(".").join("\\.(?:.*\\.)?")+"(\\.|$)")),a.liveFired=this;var s=r.live.slice(0);for(i=0;i<s.length;i++)g=s[i],g.origType.replace(y,"")===a.type?q.push(g.selector):s.splice(i--,1);e=f(a.target).closest(q,a.currentTarget);for(j=0,k=e.length;j<k;j++){m=e[j];for(i=0;i<s.length;i++){g=s[i];if(m.selector===g.selector&&(!n||n.test(g.namespace))&&!m.elem.disabled){h=m.elem,d=null;if(g.preType==="mouseenter"||g.preType==="mouseleave")a.type=g.preType,d=f(a.relatedTarget).closest(g.selector)[0],d&&f.contains(h,d)&&(d=h);(!d||d!==h)&&p.push({elem:h,handleObj:g,level:m.level})}}}for(j=0,k=p.length;j<k;j++){e=p[j];if(c&&e.level>c)break;a.currentTarget=e.elem,a.data=e.handleObj.data,a.handleObj=e.handleObj,o=e.handleObj.origHandler.apply(e.elem,arguments);if(o===!1||a.isPropagationStopped()){c=e.level,o===!1&&(b=!1);if(a.isImmediatePropagationStopped())break}}return b}}function L(a,c,d){var e=f.extend({},d[0]);e.type=a,e.originalEvent={},e.liveFired=b,f.event.handle.call(c,e),e.isDefaultPrevented()&&d[0].preventDefault()}function F(){return!0}function E(){return!1}function m(a,c,d){var e=c+"defer",g=c+"queue",h=c+"mark",i=f.data(a,e,b,!0);i&&(d==="queue"||!f.data(a,g,b,!0))&&(d==="mark"||!f.data(a,h,b,!0))&&setTimeout(function(){!f.data(a,g,b,!0)&&!f.data(a,h,b,!0)&&(f.removeData(a,e,!0),i.resolve())},0)}function l(a){for(var b in a)if(b!=="toJSON")return!1;return!0}function k(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(j,"$1-$2").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNaN(d)?i.test(d)?f.parseJSON(d):d:parseFloat(d)}catch(g){}f.data(a,c,d)}else d=b}return d}var c=a.document,d=a.navigator,e=a.location,f=function(){function H(){if(!e.isReady){try{c.documentElement.doScroll("left")}catch(a){setTimeout(H,1);return}e.ready()}}var e=function(a,b){return new e.fn.init(a,b,h)},f=a.jQuery,g=a.$,h,i=/^(?:[^<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/\d/,n=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,o=/^[\],:{}\s]*$/,p=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,q=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,r=/(?:^|:|,)(?:\s*\[)+/g,s=/(webkit)[ \/]([\w.]+)/,t=/(opera)(?:.*version)?[ \/]([\w.]+)/,u=/(msie) ([\w.]+)/,v=/(mozilla)(?:.*? rv:([\w.]+))?/,w=d.userAgent,x,y,z,A=Object.prototype.toString,B=Object.prototype.hasOwnProperty,C=Array.prototype.push,D=Array.prototype.slice,E=String.prototype.trim,F=Array.prototype.indexOf,G={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=n.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.6.1",length:0,size:function(){return this.length},toArray:function(){return D.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?C.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),y.done(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(D.apply(this,arguments),"slice",D.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:C,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j<k;j++)if((a=arguments[j])!=null)for(c in a){d=i[c],f=a[c];if(i===f)continue;l&&f&&(e.isPlainObject(f)||(g=e.isArray(f)))?(g?(g=!1,h=d&&e.isArray(d)?d:[]):h=d&&e.isPlainObject(d)?d:{},i[c]=e.extend(l,h,f)):f!==b&&(i[c]=f)}return i},e.extend({noConflict:function(b){a.$===e&&(a.$=g),b&&a.jQuery===e&&(a.jQuery=f);return e},isReady:!1,readyWait:1,holdReady:function(a){a?e.readyWait++:e.ready(!0)},ready:function(a){if(a===!0&&!--e.readyWait||a!==!0&&!e.isReady){if(!c.body)return setTimeout(e.ready,1);e.isReady=!0;if(a!==!0&&--e.readyWait>0)return;y.resolveWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").unbind("ready")}},bindReady:function(){if(!y){y=e._Deferred();if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",z,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",z),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&H()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a&&typeof a=="object"&&"setInterval"in a},isNaN:function(a){return a==null||!m.test(a)||isNaN(a)},type:function(a){return a==null?String(a):G[A.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;if(a.constructor&&!B.call(a,"constructor")&&!B.call(a.constructor.prototype,"isPrototypeOf"))return!1;var c;for(c in a);return c===b||B.call(a,c)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw a},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(o.test(b.replace(p,"@").replace(q,"]").replace(r,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(b,c,d){a.DOMParser?(d=new DOMParser,c=d.parseFromString(b,"text/xml")):(c=new ActiveXObject("Microsoft.XMLDOM"),c.async="false",c.loadXML(b)),d=c.documentElement,(!d||!d.nodeName||d.nodeName==="parsererror")&&e.error("Invalid XML: "+b);return c},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g<h;)if(c.apply(a[g++],d)===!1)break}else if(i){for(f in a)if(c.call(a[f],f,a[f])===!1)break}else for(;g<h;)if(c.call(a[g],g,a[g++])===!1)break;return a},trim:E?function(a){return a==null?"":E.call(a)}:function(a){return a==null?"":(a+"").replace(k,"").replace(l,"")},makeArray:function(a,b){var c=b||[];if(a!=null){var d=e.type(a);a.length==null||d==="string"||d==="function"||d==="regexp"||e.isWindow(a)?C.call(c,a):e.merge(c,a)}return c},inArray:function(a,b){if(F)return F.call(b,a);for(var c=0,d=b.length;c<d;c++)if(b[c]===a)return c;return-1},merge:function(a,c){var d=a.length,e=0;if(typeof c.length=="number")for(var f=c.length;e<f;e++)a[d++]=c[e];else while(c[e]!==b)a[d++]=c[e++];a.length=d;return a},grep:function(a,b,c){var d=[],e;c=!!c;for(var f=0,g=a.length;f<g;f++)e=!!b(a[f],f),c!==e&&d.push(a[f]);return d},map:function(a,c,d){var f,g,h=[],i=0,j=a.length,k=a instanceof e||j!==b&&typeof j=="number"&&(j>0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i<j;i++)f=c(a[i],i,d),f!=null&&(h[h.length]=f);else for(g in a)f=c(a[g],g,d),f!=null&&(h[h.length]=f);return h.concat.apply([],h)},guid:1,proxy:function(a,c){if(typeof c=="string"){var d=a[c];c=a,a=d}if(!e.isFunction(a))return b;var f=D.call(arguments,2),g=function(){return a.apply(c,f.concat(D.call(arguments)))};g.guid=a.guid=a.guid||g.guid||e.guid++;return g},access:function(a,c,d,f,g,h){var i=a.length;if(typeof c=="object"){for(var j in c)e.access(a,j,c[j],f,g,d);return a}if(d!==b){f=!h&&f&&e.isFunction(d);for(var k=0;k<i;k++)g(a[k],c,f?d.call(a[k],k,g(a[k],c)):d,h);return a}return i?g(a[0],c):b},now:function(){return(new Date).getTime()},uaMatch:function(a){a=a.toLowerCase();var b=s.exec(a)||t.exec(a)||u.exec(a)||a.indexOf("compatible")<0&&v.exec(a)||[];return{browser:b[1]||"",version:b[2]||"0"}},sub:function(){function a(b,c){return new a.fn.init(b,c)}e.extend(!0,a,this),a.superclass=this,a.fn=a.prototype=this(),a.fn.constructor=a,a.sub=this.sub,a.fn.init=function(d,f){f&&f instanceof e&&!(f instanceof a)&&(f=a(f));return e.fn.init.call(this,d,f,b)},a.fn.init.prototype=a.fn;var b=a(c);return a},browser:{}}),e.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(a,b){G["[object "+b+"]"]=b.toLowerCase()}),x=e.uaMatch(w),x.browser&&(e.browser[x.browser]=!0,e.browser.version=x.version),e.browser.webkit&&(e.browser.safari=!0),j.test("Â ")&&(k=/^[\s\xA0]+/,l=/[\s\xA0]+$/),h=e(c),c.addEventListener?z=function(){c.removeEventListener("DOMContentLoaded",z,!1),e.ready()}:c.attachEvent&&(z=function(){c.readyState==="complete"&&(c.detachEvent("onreadystatechange",z),e.ready())});return e}(),g="done fail isResolved isRejected promise then always pipe".split(" "),h=[].slice;f.extend({_Deferred:function(){var a=[],b,c,d,e={done:function(){if(!d){var c=arguments,g,h,i,j,k;b&&(k=b,b=0);for(g=0,h=c.length;g<h;g++)i=c[g],j=f.type(i),j==="array"?e.done.apply(e,i):j==="function"&&a.push(i);k&&e.resolveWith(k[0],k[1])}return this},resolveWith:function(e,f){if(!d&&!b&&!c){f=f||[],c=1;try{while(a[0])a.shift().apply(e,f)}finally{b=[e,f],c=0}}return this},resolve:function(){e.resolveWith(this,arguments);return this},isResolved:function(){return!!c||!!b},cancel:function(){d=1,a=[];return this}};return e},Deferred:function(a){var b=f._Deferred(),c=f._Deferred(),d;f.extend(b,{then:function(a,c){b.done(a).fail(c);return this},always:function(){return b.done.apply(b,arguments).fail.apply(this,arguments)},fail:c.done,rejectWith:c.resolveWith,reject:c.resolve,isRejected:c.isResolved,pipe:function(a,c){return f.Deferred(function(d){f.each({done:[a,"resolve"],fail:[c,"reject"]},function(a,c){var e=c[0],g=c[1],h;f.isFunction(e)?b[a](function(){h=e.apply(this,arguments),h&&f.isFunction(h.promise)?h.promise().then(d.resolve,d.reject):d[g](h)}):b[a](d[g])})}).promise()},promise:function(a){if(a==null){if(d)return d;d=a={}}var c=g.length;while(c--)a[g[c]]=b[g[c]];return a}}),b.done(c.cancel).fail(b.cancel),delete b.cancel,a&&a.call(b,b);return b},when:function(a){function i(a){return function(c){b[a]=arguments.length>1?h.call(arguments,0):c,--e||g.resolveWith(g,h.call(b,0))}}var b=arguments,c=0,d=b.length,e=d,g=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred();if(d>1){for(;c<d;c++)b[c]&&f.isFunction(b[c].promise)?b[c].promise().then(i(c),g.reject):--e;e||g.resolveWith(g,b)}else g!==a&&g.resolveWith(g,d?[a]:[]);return g.promise()}}),f.support=function(){var a=c.createElement("div"),b=c.documentElement,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r;a.setAttribute("className","t"),a.innerHTML=" <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>",d=a.getElementsByTagName("*"),e=a.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};f=c.createElement("select"),g=f.appendChild(c.createElement("option")),h=a.getElementsByTagName("input")[0],j={leadingWhitespace:a.firstChild.nodeType===3,tbody:!a.getElementsByTagName("tbody").length,htmlSerialize:!!a.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55$/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:h.value==="on",optSelected:g.selected,getSetAttribute:a.className!=="t",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0},h.checked=!0,j.noCloneChecked=h.cloneNode(!0).checked,f.disabled=!0,j.optDisabled=!g.disabled;try{delete a.test}catch(s){j.deleteExpando=!1}!a.addEventListener&&a.attachEvent&&a.fireEvent&&(a.attachEvent("onclick",function b(){j.noCloneEvent=!1,a.detachEvent("onclick",b)}),a.cloneNode(!0).fireEvent("onclick")),h=c.createElement("input"),h.value="t",h.setAttribute("type","radio"),j.radioValue=h.value==="t",h.setAttribute("checked","checked"),a.appendChild(h),k=c.createDocumentFragment(),k.appendChild(a.firstChild),j.checkClone=k.cloneNode(!0).cloneNode(!0).lastChild.checked,a.innerHTML="",a.style.width=a.style.paddingLeft="1px",l=c.createElement("body"),m={visibility:"hidden",width:0,height:0,border:0,margin:0,background:"none"};for(q in m)l.style[q]=m[q];l.appendChild(a),b.insertBefore(l,b.firstChild),j.appendChecked=h.checked,j.boxModel=a.offsetWidth===2,"zoom"in a.style&&(a.style.display="inline",a.style.zoom=1,j.inlineBlockNeedsLayout=a.offsetWidth===2,a.style.display="",a.innerHTML="<div style='width:4px;'></div>",j.shrinkWrapBlocks=a.offsetWidth!==2),a.innerHTML="<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>",n=a.getElementsByTagName("td"),r=n[0].offsetHeight===0,n[0].style.display="",n[1].style.display="none",j.reliableHiddenOffsets=r&&n[0].offsetHeight===0,a.innerHTML="",c.defaultView&&c.defaultView.getComputedStyle&&(i=c.createElement("div"),i.style.width="0",i.style.marginRight="0",a.appendChild(i),j.reliableMarginRight=(parseInt((c.defaultView.getComputedStyle(i,null)||{marginRight:0}).marginRight,10)||0)===0),l.innerHTML="",b.removeChild(l);if(a.attachEvent)for(q in{submit:1,change:1,focusin:1})p="on"+q,r=p in a,r||(a.setAttribute(p,"return;"),r=typeof a[p]=="function"),j[q+"Bubbles"]=r;return j}(),f.boxModel=f.support.boxModel;var i=/^(?:\{.*\}|\[.*\])$/,j=/([a-z])([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!l(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g=f.expando,h=typeof c=="string",i,j=a.nodeType,k=j?f.cache:a,l=j?a[f.expando]:a[f.expando]&&f.expando;if((!l||e&&l&&!k[l][g])&&h&&d===b)return;l||(j?a[f.expando]=l=++f.uuid:l=f.expando),k[l]||(k[l]={},j||(k[l].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?k[l][g]=f.extend(k[l][g],c):k[l]=f.extend(k[l],c);i=k[l],e&&(i[g]||(i[g]={}),i=i[g]),d!==b&&(i[f.camelCase(c)]=d);if(c==="events"&&!i[c])return i[g]&&i[g].events;return h?i[f.camelCase(c)]:i}},removeData:function(b,c,d){if(!!f.acceptData(b)){var e=f.expando,g=b.nodeType,h=g?f.cache:b,i=g?b[f.expando]:f.expando;if(!h[i])return;if(c){var j=d?h[i][e]:h[i];if(j){delete j[c];if(!l(j))return}}if(d){delete h[i][e];if(!l(h[i]))return}var k=h[i][e];f.support.deleteExpando||h!=a?delete h[i]:h[i]=null,k?(h[i]={},g||(h[i].toJSON=f.noop),h[i][e]=k):g&&(f.support.deleteExpando?delete b[f.expando]:b.removeAttribute?b.removeAttribute(f.expando):b[f.expando]=null)}},_data:function(a,b,c){return f.data(a,b,c,!0)},acceptData:function(a){if(a.nodeName){var b=f.noData[a.nodeName.toLowerCase()];if(b)return b!==!0&&a.getAttribute("classid")===b}return!0}}),f.fn.extend({data:function(a,c){var d=null;if(typeof a=="undefined"){if(this.length){d=f.data(this[0]);if(this[0].nodeType===1){var e=this[0].attributes,g;for(var h=0,i=e.length;h<i;h++)g=e[h].name,g.indexOf("data-")===0&&(g=f.camelCase(g.substring(5)),k(this[0],g,d[g]))}}return d}if(typeof a=="object")return this.each(function(){f.data(this,a)});var j=a.split(".");j[1]=j[1]?"."+j[1]:"";if(c===b){d=this.triggerHandler("getData"+j[1]+"!",[j[0]]),d===b&&this.length&&(d=f.data(this[0],a),d=k(this[0],a,d));return d===b&&j[1]?this.data(j[0]):d}return this.each(function(){var b=f(this),d=[j[0],c];b.triggerHandler("setData"+j[1]+"!",d),f.data(this,a,c),b.triggerHandler("changeData"+j[1]+"!",d)})},removeData:function(a){return this.each(function(){f.removeData(this,a)})}}),f.extend({_mark:function(a,c){a&&(c=(c||"fx")+"mark",f.data(a,c,(f.data(a,c,b,!0)||0)+1,!0))},_unmark:function(a,c,d){a!==!0&&(d=c,c=a,a=!1);if(c){d=d||"fx";var e=d+"mark",g=a?0:(f.data(c,e,b,!0)||1)-1;g?f.data(c,e,g,!0):(f.removeData(c,e,!0),m(c,d,"mark"))}},queue:function(a,c,d){if(a){c=(c||"fx")+"queue";var e=f.data(a,c,b,!0);d&&(!e||f.isArray(d)?e=f.data(a,c,f.makeArray(d),!0):e.push(d));return e||[]}},dequeue:function(a,b){b=b||"fx";var c=f.queue(a,b),d=c.shift(),e;d==="inprogress"&&(d=c.shift()),d&&(b==="fx"&&c.unshift("inprogress"),d.call(a,function(){f.dequeue(a,b)})),c.length||(f.removeData(a,b+"queue",!0),m(a,b,"queue"))}}),f.fn.extend({queue:function(a,c){typeof a!="string"&&(c=a,a="fx");if(c===b)return f.queue(this[0],a);return this.each(function(){var b=f.queue(this,a,c);a==="fx"&&b[0]!=="inprogress"&&f.dequeue(this,a)})},dequeue:function(a){return this.each(function(){f.dequeue(this,a)})},delay:function(a,b){a=f.fx?f.fx.speeds[a]||a:a,b=b||"fx";return this.queue(b,function(){var c=this;setTimeout(function(){f.dequeue(c,b)},a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,c){function m(){--h||d.resolveWith(e,[e])}typeof a!="string"&&(c=a,a=b),a=a||"fx";var d=f.Deferred(),e=this,g=e.length,h=1,i=a+"defer",j=a+"queue",k=a+"mark",l;while(g--)if(l=f.data(e[g],i,b,!0)||(f.data(e[g],j,b,!0)||f.data(e[g],k,b,!0))&&f.data(e[g],i,f._Deferred(),!0))h++,l.done(m);m();return d.promise()}});var n=/[\n\t\r]/g,o=/\s+/,p=/\r/g,q=/^(?:button|input)$/i,r=/^(?:button|input|object|select|textarea)$/i,s=/^a(?:rea)?$/i,t=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,u=/\:/,v,w;f.fn.extend({attr:function(a,b){return f.access(this,a,b,!0,f.attr)},removeAttr:function(a){return this.each(function(){f.removeAttr(this,a)})},prop:function(a,b){return f.access(this,a,b,!0,f.prop)},removeProp:function(a){a=f.propFix[a]||a;return this.each(function(){try{this[a]=b,delete this[a]}catch(c){}})},addClass:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.addClass(a.call(this,b,c.attr("class")||""))});if(a&&typeof a=="string"){var b=(a||"").split(o);for(var c=0,d=this.length;c<d;c++){var e=this[c];if(e.nodeType===1)if(!e.className)e.className=a;else{var g=" "+e.className+" ",h=e.className;for(var i=0,j=b.length;i<j;i++)g.indexOf(" "+b[i]+" ")<0&&(h+=" "+b[i]);e.className=f.trim(h)}}}return this},removeClass:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.removeClass(a.call(this,b,c.attr("class")))});if(a&&typeof a=="string"||a===b){var c=(a||"").split(o);for(var d=0,e=this.length;d<e;d++){var g=this[d];if(g.nodeType===1&&g.className)if(a){var h=(" "+g.className+" ").replace(n," ");for(var i=0,j=c.length;i<j;i++)h=h.replace(" "+c[i]+" "," ");g.className=f.trim(h)}else g.className=""}}return this},toggleClass:function(a,b){var c=typeof a,d=typeof b=="boolean";if(f.isFunction(a))return this.each(function(c){var d=f(this);d.toggleClass(a.call(this,c,d.attr("class"),b),b)});return this.each(function(){if(c==="string"){var e,g=0,h=f(this),i=b,j=a.split(o);while(e=j[g++])i=d?i:!h.hasClass(e),h[i?"addClass":"removeClass"](e)}else if(c==="undefined"||c==="boolean")this.className&&f._data(this,"__className__",this.className),this.className=this.className||a===!1?"":f._data(this,"__className__")||""})},hasClass:function(a){var b=" "+a+" ";for(var c=0,d=this.length;c<d;c++)if((" "+this[c].className+" ").replace(n," ").indexOf(b)>-1)return!0;return!1},val:function(a){var c,d,e=this[0];if(!arguments.length){if(e){c=f.valHooks[e.nodeName.toLowerCase()]||f.valHooks[e.type];if(c&&"get"in c&&(d=c.get(e,"value"))!==b)return d;return(e.value||"").replace(p,"")}return b}var g=f.isFunction(a);return this.each(function(d){var e=f(this),h;if(this.nodeType===1){g?h=a.call(this,d,e.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.nodeName.toLowerCase()]||f.valHooks[this.type];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c=a.selectedIndex,d=[],e=a.options,g=a.type==="select-one";if(c<0)return null;for(var h=g?c:0,i=g?c+1:e.length;h<i;h++){var j=e[h];if(j.selected&&(f.support.optDisabled?!j.disabled:j.getAttribute("disabled")===null)&&(!j.parentNode.disabled||!f.nodeName(j.parentNode,"optgroup"))){b=f(j).val();if(g)return b;d.push(b)}}if(g&&!d.length&&e.length)return f(e[c]).val();return d},set:function(a,b){var c=f.makeArray(b);f(a).find("option").each(function(){this.selected=f.inArray(f(this).val(),c)>=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attrFix:{tabindex:"tabIndex"},attr:function(a,c,d,e){var g=a.nodeType;if(!a||g===3||g===8||g===2)return b;if(e&&c in f.attrFn)return f(a)[c](d);if(!("getAttribute"in a))return f.prop(a,c,d);var h,i,j=g!==1||!f.isXMLDoc(a);c=j&&f.attrFix[c]||c,i=f.attrHooks[c],i||(!t.test(c)||typeof d!="boolean"&&d!==b&&d.toLowerCase()!==c.toLowerCase()?v&&(f.nodeName(a,"form")||u.test(c))&&(i=v):i=w);if(d!==b){if(d===null){f.removeAttr(a,c);return b}if(i&&"set"in i&&j&&(h=i.set(a,d,c))!==b)return h;a.setAttribute(c,""+d);return d}if(i&&"get"in i&&j)return i.get(a,c);h=a.getAttribute(c);return h===null?b:h},removeAttr:function(a,b){var c;a.nodeType===1&&(b=f.attrFix[b]||b,f.support.getSetAttribute?a.removeAttribute(b):(f.attr(a,b,""),a.removeAttributeNode(a.getAttributeNode(b))),t.test(b)&&(c=f.propFix[b]||b)in a&&(a[c]=!1))},attrHooks:{type:{set:function(a,b){if(q.test(a.nodeName)&&a.parentNode)f.error("type property can't be changed");else if(!f.support.radioValue&&b==="radio"&&f.nodeName(a,"input")){var c=a.value;a.setAttribute("type",b),c&&(a.value=c);return b}}},tabIndex:{get:function(a){var c=a.getAttributeNode("tabIndex");return c&&c.specified?parseInt(c.value,10):r.test(a.nodeName)||s.test(a.nodeName)&&a.href?0:b}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(a,c,d){var e=a.nodeType;if(!a||e===3||e===8||e===2)return b;var g,h,i=e!==1||!f.isXMLDoc(a);c=i&&f.propFix[c]||c,h=f.propHooks[c];return d!==b?h&&"set"in h&&(g=h.set(a,d,c))!==b?g:a[c]=d:h&&"get"in h&&(g=h.get(a,c))!==b?g:a[c]},propHooks:{}}),w={get:function(a,c){return a[f.propFix[c]||c]?c.toLowerCase():b},set:function(a,b,c){var d;b===!1?f.removeAttr(a,c):(d=f.propFix[c]||c,d in a&&(a[d]=b),a.setAttribute(c,c.toLowerCase()));return c}},f.attrHooks.value={get:function(a,b){if(v&&f.nodeName(a,"button"))return v.get(a,b);return a.value},set:function(a,b,c){if(v&&f.nodeName(a,"button"))return v.set(a,b,c);a.value=b}},f.support.getSetAttribute||(f.attrFix=f.propFix,v=f.attrHooks.name=f.valHooks.button={get:function(a,c){var d;d=a.getAttributeNode(c);return d&&d.nodeValue!==""?d.nodeValue:b},set:function(a,b,c){var d=a.getAttributeNode(c);if(d){d.nodeValue=b;return b}}},f.each(["width","height"],function(a,b){f.attrHooks[b]=f.extend(f.attrHooks[b],{set:function(a,c){if(c===""){a.setAttribute(b,"auto");return c}}})})),f.support.hrefNormalized||f.each(["href","src","width","height"],function(a,c){f.attrHooks[c]=f.extend(f.attrHooks[c],{get:function(a){var d=a.getAttribute(c,2);return d===null?b:d}})}),f.support.style||(f.attrHooks.style={get:function(a){return a.style.cssText.toLowerCase()||b},set:function(a,b){return a.style.cssText=""+b}}),f.support.optSelected||(f.propHooks.selected=f.extend(f.propHooks.selected,{get:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex)}})),f.support.checkOn||f.each(["radio","checkbox"],function(){f.valHooks[this]={get:function(a){return a.getAttribute("value")===null?"on":a.value}}}),f.each(["radio","checkbox"],function(){f.valHooks[this]=f.extend(f.valHooks[this],{set:function(a,b){if(f.isArray(b))return a.checked=f.inArray(f(a).val(),b)>=0}})});var x=Object.prototype.hasOwnProperty,y=/\.(.*)$/,z=/^(?:textarea|input|select)$/i,A=/\./g,B=/ /g,C=/[^\w\s.|`]/g,D=function(a){return a.replace(C,"\\$&")};f.event={add:function(a,c,d,e){if(a.nodeType!==3&&a.nodeType!==8){if(d===!1)d=E;else if(!d)return;var g,h;d.handler&&(g=d,d=g.handler),d.guid||(d.guid=f.guid++);var i=f._data(a);if(!i)return;var j=i.events,k=i.handle;j||(i.events=j={}),k||(i.handle=k=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.handle.apply(k.elem,arguments):b}),k.elem=a,c=c.split(" ");var l,m=0,n;while(l=c[m++]){h=g?f.extend({},g):{handler:d,data:e},l.indexOf(".")>-1?(n=l.split("."),l=n.shift(),h.namespace=n.slice(0).sort().join(".")):(n=[],h.namespace=""),h.type=l,h.guid||(h.guid=d.guid);var o=j[l],p=f.event.special[l]||{};if(!o){o=j[l]=[];if(!p.setup||p.setup.call(a,e,n,k)===!1)a.addEventListener?a.addEventListener(l,k,!1):a.attachEvent&&a.attachEvent("on"+l,k)}p.add&&(p.add.call(a,h),h.handler.guid||(h.handler.guid=d.guid)),o.push(h),f.event.global[l]=!0}a=null}},global:{},remove:function(a,c,d,e){if(a.nodeType!==3&&a.nodeType!==8){d===!1&&(d=E);var g,h,i,j,k=0,l,m,n,o,p,q,r,s=f.hasData(a)&&f._data(a),t=s&&s.events;if(!s||!t)return;c&&c.type&&(d=c.handler,c=c.type);if(!c||typeof c=="string"&&c.charAt(0)==="."){c=c||"";for(h in t)f.event.remove(a,h+c);return}c=c.split(" ");while(h=c[k++]){r=h,q=null,l=h.indexOf(".")<0,m=[],l||(m=h.split("."),h=m.shift(),n=new RegExp("(^|\\.)"+f.map(m.slice(0).sort(),D).join("\\.(?:.*\\.)?")+"(\\.|$)")),p=t[h];if(!p)continue;if(!d){for(j=0;j<p.length;j++){q=p[j];if(l||n.test(q.namespace))f.event.remove(a,r,q.handler,j),p.splice(j--,1)}continue}o=f.event.special[h]||{};for(j=e||0;j<p.length;j++){q=p[j];if(d.guid===q.guid){if(l||n.test(q.namespace))e==null&&p.splice(j--,1),o.remove&&o.remove.call(a,q);if(e!=null)break}}if(p.length===0||e!=null&&p.length===1)(!o.teardown||o.teardown.call(a,m)===!1)&&f.removeEvent(a,h,s.handle),g=null,delete t[h]}if(f.isEmptyObject(t)){var u=s.handle;u&&(u.elem=null),delete s.events,delete s.handle,f.isEmptyObject(s)&&f.removeData(a,b,!0)}}},customEvent:{getData:!0,setData:!0,changeData:!0},trigger:function(c,d,e,g){var h=c.type||c,i=[],j;h.indexOf("!")>=0&&(h=h.slice(0,-1),j=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.shift(),i.sort());if(!!e&&!f.event.customEvent[h]||!!f.event.global[h]){c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.exclusive=j,c.namespace=i.join("."),c.namespace_re=new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)");if(g||!e)c.preventDefault(),c.stopPropagation();if(!e){f.each(f.cache,function(){var a=f.expando,b=this[a];b&&b.events&&b.events[h]&&f.event.trigger(c,d,b.handle.elem
-)});return}if(e.nodeType===3||e.nodeType===8)return;c.result=b,c.target=e,d=d?f.makeArray(d):[],d.unshift(c);var k=e,l=h.indexOf(":")<0?"on"+h:"";do{var m=f._data(k,"handle");c.currentTarget=k,m&&m.apply(k,d),l&&f.acceptData(k)&&k[l]&&k[l].apply(k,d)===!1&&(c.result=!1,c.preventDefault()),k=k.parentNode||k.ownerDocument||k===c.target.ownerDocument&&a}while(k&&!c.isPropagationStopped());if(!c.isDefaultPrevented()){var n,o=f.event.special[h]||{};if((!o._default||o._default.call(e.ownerDocument,c)===!1)&&(h!=="click"||!f.nodeName(e,"a"))&&f.acceptData(e)){try{l&&e[h]&&(n=e[l],n&&(e[l]=null),f.event.triggered=h,e[h]())}catch(p){}n&&(e[l]=n),f.event.triggered=b}}return c.result}},handle:function(c){c=f.event.fix(c||a.event);var d=((f._data(this,"events")||{})[c.type]||[]).slice(0),e=!c.exclusive&&!c.namespace,g=Array.prototype.slice.call(arguments,0);g[0]=c,c.currentTarget=this;for(var h=0,i=d.length;h<i;h++){var j=d[h];if(e||c.namespace_re.test(j.namespace)){c.handler=j.handler,c.data=j.data,c.handleObj=j;var k=j.handler.apply(this,g);k!==b&&(c.result=k,k===!1&&(c.preventDefault(),c.stopPropagation()));if(c.isImmediatePropagationStopped())break}}return c.result},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),fix:function(a){if(a[f.expando])return a;var d=a;a=f.Event(d);for(var e=this.props.length,g;e;)g=this.props[--e],a[g]=d[g];a.target||(a.target=a.srcElement||c),a.target.nodeType===3&&(a.target=a.target.parentNode),!a.relatedTarget&&a.fromElement&&(a.relatedTarget=a.fromElement===a.target?a.toElement:a.fromElement);if(a.pageX==null&&a.clientX!=null){var h=a.target.ownerDocument||c,i=h.documentElement,j=h.body;a.pageX=a.clientX+(i&&i.scrollLeft||j&&j.scrollLeft||0)-(i&&i.clientLeft||j&&j.clientLeft||0),a.pageY=a.clientY+(i&&i.scrollTop||j&&j.scrollTop||0)-(i&&i.clientTop||j&&j.clientTop||0)}a.which==null&&(a.charCode!=null||a.keyCode!=null)&&(a.which=a.charCode!=null?a.charCode:a.keyCode),!a.metaKey&&a.ctrlKey&&(a.metaKey=a.ctrlKey),!a.which&&a.button!==b&&(a.which=a.button&1?1:a.button&2?3:a.button&4?2:0);return a},guid:1e8,proxy:f.proxy,special:{ready:{setup:f.bindReady,teardown:f.noop},live:{add:function(a){f.event.add(this,O(a.origType,a.selector),f.extend({},a,{handler:N,guid:a.handler.guid}))},remove:function(a){f.event.remove(this,O(a.origType,a.selector),a)}},beforeunload:{setup:function(a,b,c){f.isWindow(this)&&(this.onbeforeunload=c)},teardown:function(a,b){this.onbeforeunload===b&&(this.onbeforeunload=null)}}}},f.removeEvent=c.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){a.detachEvent&&a.detachEvent("on"+b,c)},f.Event=function(a,b){if(!this.preventDefault)return new f.Event(a,b);a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||a.returnValue===!1||a.getPreventDefault&&a.getPreventDefault()?F:E):this.type=a,b&&f.extend(this,b),this.timeStamp=f.now(),this[f.expando]=!0},f.Event.prototype={preventDefault:function(){this.isDefaultPrevented=F;var a=this.originalEvent;!a||(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){this.isPropagationStopped=F;var a=this.originalEvent;!a||(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=F,this.stopPropagation()},isDefaultPrevented:E,isPropagationStopped:E,isImmediatePropagationStopped:E};var G=function(a){var b=a.relatedTarget;a.type=a.data;try{if(b&&b!==c&&!b.parentNode)return;while(b&&b!==this)b=b.parentNode;b!==this&&f.event.handle.apply(this,arguments)}catch(d){}},H=function(a){a.type=a.data,f.event.handle.apply(this,arguments)};f.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){f.event.special[a]={setup:function(c){f.event.add(this,b,c&&c.selector?H:G,a)},teardown:function(a){f.event.remove(this,b,a&&a.selector?H:G)}}}),f.support.submitBubbles||(f.event.special.submit={setup:function(a,b){if(!f.nodeName(this,"form"))f.event.add(this,"click.specialSubmit",function(a){var b=a.target,c=b.type;(c==="submit"||c==="image")&&f(b).closest("form").length&&L("submit",this,arguments)}),f.event.add(this,"keypress.specialSubmit",function(a){var b=a.target,c=b.type;(c==="text"||c==="password")&&f(b).closest("form").length&&a.keyCode===13&&L("submit",this,arguments)});else return!1},teardown:function(a){f.event.remove(this,".specialSubmit")}});if(!f.support.changeBubbles){var I,J=function(a){var b=a.type,c=a.value;b==="radio"||b==="checkbox"?c=a.checked:b==="select-multiple"?c=a.selectedIndex>-1?f.map(a.options,function(a){return a.selected}).join("-"):"":f.nodeName(a,"select")&&(c=a.selectedIndex);return c},K=function(c){var d=c.target,e,g;if(!!z.test(d.nodeName)&&!d.readOnly){e=f._data(d,"_change_data"),g=J(d),(c.type!=="focusout"||d.type!=="radio")&&f._data(d,"_change_data",g);if(e===b||g===e)return;if(e!=null||g)c.type="change",c.liveFired=b,f.event.trigger(c,arguments[1],d)}};f.event.special.change={filters:{focusout:K,beforedeactivate:K,click:function(a){var b=a.target,c=f.nodeName(b,"input")?b.type:"";(c==="radio"||c==="checkbox"||f.nodeName(b,"select"))&&K.call(this,a)},keydown:function(a){var b=a.target,c=f.nodeName(b,"input")?b.type:"";(a.keyCode===13&&!f.nodeName(b,"textarea")||a.keyCode===32&&(c==="checkbox"||c==="radio")||c==="select-multiple")&&K.call(this,a)},beforeactivate:function(a){var b=a.target;f._data(b,"_change_data",J(b))}},setup:function(a,b){if(this.type==="file")return!1;for(var c in I)f.event.add(this,c+".specialChange",I[c]);return z.test(this.nodeName)},teardown:function(a){f.event.remove(this,".specialChange");return z.test(this.nodeName)}},I=f.event.special.change.filters,I.focus=I.beforeactivate}f.support.focusinBubbles||f.each({focus:"focusin",blur:"focusout"},function(a,b){function e(a){var c=f.event.fix(a);c.type=b,c.originalEvent={},f.event.trigger(c,null,c.target),c.isDefaultPrevented()&&a.preventDefault()}var d=0;f.event.special[b]={setup:function(){d++===0&&c.addEventListener(a,e,!0)},teardown:function(){--d===0&&c.removeEventListener(a,e,!0)}}}),f.each(["bind","one"],function(a,c){f.fn[c]=function(a,d,e){var g;if(typeof a=="object"){for(var h in a)this[c](h,d,a[h],e);return this}if(arguments.length===2||d===!1)e=d,d=b;c==="one"?(g=function(a){f(this).unbind(a,g);return e.apply(this,arguments)},g.guid=e.guid||f.guid++):g=e;if(a==="unload"&&c!=="one")this.one(a,d,e);else for(var i=0,j=this.length;i<j;i++)f.event.add(this[i],a,g,d);return this}}),f.fn.extend({unbind:function(a,b){if(typeof a=="object"&&!a.preventDefault)for(var c in a)this.unbind(c,a[c]);else for(var d=0,e=this.length;d<e;d++)f.event.remove(this[d],a,b);return this},delegate:function(a,b,c,d){return this.live(b,c,d,a)},undelegate:function(a,b,c){return arguments.length===0?this.unbind("live"):this.die(b,null,c,a)},trigger:function(a,b){return this.each(function(){f.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0])return f.event.trigger(a,b,this[0],!0)},toggle:function(a){var b=arguments,c=a.guid||f.guid++,d=0,e=function(c){var e=(f.data(this,"lastToggle"+a.guid)||0)%d;f.data(this,"lastToggle"+a.guid,e+1),c.preventDefault();return b[e].apply(this,arguments)||!1};e.guid=c;while(d<b.length)b[d++].guid=c;return this.click(e)},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}});var M={focus:"focusin",blur:"focusout",mouseenter:"mouseover",mouseleave:"mouseout"};f.each(["live","die"],function(a,c){f.fn[c]=function(a,d,e,g){var h,i=0,j,k,l,m=g||this.selector,n=g?this:f(this.context);if(typeof a=="object"&&!a.preventDefault){for(var o in a)n[c](o,d,a[o],m);return this}if(c==="die"&&!a&&g&&g.charAt(0)==="."){n.unbind(g);return this}if(d===!1||f.isFunction(d))e=d||E,d=b;a=(a||"").split(" ");while((h=a[i++])!=null){j=y.exec(h),k="",j&&(k=j[0],h=h.replace(y,""));if(h==="hover"){a.push("mouseenter"+k,"mouseleave"+k);continue}l=h,M[h]?(a.push(M[h]+k),h=h+k):h=(M[h]||h)+k;if(c==="live")for(var p=0,q=n.length;p<q;p++)f.event.add(n[p],"live."+O(h,m),{data:d,selector:m,handler:e,origType:h,origHandler:e,preType:l});else n.unbind("live."+O(h,m),e)}return this}}),f.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error".split(" "),function(a,b){f.fn[b]=function(a,c){c==null&&(c=a,a=null);return arguments.length>0?this.bind(b,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0)}),function(){function u(a,b,c,d,e,f){for(var g=0,h=d.length;g<h;g++){var i=d[g];if(i){var j=!1;i=i[a];while(i){if(i.sizcache===c){j=d[i.sizset];break}if(i.nodeType===1){f||(i.sizcache=c,i.sizset=g);if(typeof b!="string"){if(i===b){j=!0;break}}else if(k.filter(b,[i]).length>0){j=i;break}}i=i[a]}d[g]=j}}}function t(a,b,c,d,e,f){for(var g=0,h=d.length;g<h;g++){var i=d[g];if(i){var j=!1;i=i[a];while(i){if(i.sizcache===c){j=d[i.sizset];break}i.nodeType===1&&!f&&(i.sizcache=c,i.sizset=g);if(i.nodeName.toLowerCase()===b){j=i;break}i=i[a]}d[g]=j}}}var a=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d=0,e=Object.prototype.toString,g=!1,h=!0,i=/\\/g,j=/\W/;[0,0].sort(function(){h=!1;return 0});var k=function(b,d,f,g){f=f||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return f;var i,j,n,o,q,r,s,t,u=!0,w=k.isXML(d),x=[],y=b;do{a.exec(""),i=a.exec(y);if(i){y=i[3],x.push(i[1]);if(i[2]){o=i[3];break}}}while(i);if(x.length>1&&m.exec(b))if(x.length===2&&l.relative[x[0]])j=v(x[0]+x[1],d);else{j=l.relative[x[0]]?[d]:k(x.shift(),d);while(x.length)b=x.shift(),l.relative[b]&&(b+=x.shift()),j=v(b,j)}else{!g&&x.length>1&&d.nodeType===9&&!w&&l.match.ID.test(x[0])&&!l.match.ID.test(x[x.length-1])&&(q=k.find(x.shift(),d,w),d=q.expr?k.filter(q.expr,q.set)[0]:q.set[0]);if(d){q=g?{expr:x.pop(),set:p(g)}:k.find(x.pop(),x.length===1&&(x[0]==="~"||x[0]==="+")&&d.parentNode?d.parentNode:d,w),j=q.expr?k.filter(q.expr,q.set):q.set,x.length>0?n=p(j):u=!1;while(x.length)r=x.pop(),s=r,l.relative[r]?s=x.pop():r="",s==null&&(s=d),l.relative[r](n,s,w)}else n=x=[]}n||(n=j),n||k.error(r||b);if(e.call(n)==="[object Array]")if(!u)f.push.apply(f,n);else if(d&&d.nodeType===1)for(t=0;n[t]!=null;t++)n[t]&&(n[t]===!0||n[t].nodeType===1&&k.contains(d,n[t]))&&f.push(j[t]);else for(t=0;n[t]!=null;t++)n[t]&&n[t].nodeType===1&&f.push(j[t]);else p(n,f);o&&(k(o,h,f,g),k.uniqueSort(f));return f};k.uniqueSort=function(a){if(r){g=h,a.sort(r);if(g)for(var b=1;b<a.length;b++)a[b]===a[b-1]&&a.splice(b--,1)}return a},k.matches=function(a,b){return k(a,null,null,b)},k.matchesSelector=function(a,b){return k(b,null,null,[a]).length>0},k.find=function(a,b,c){var d;if(!a)return[];for(var e=0,f=l.order.length;e<f;e++){var g,h=l.order[e];if(g=l.leftMatch[h].exec(a)){var j=g[1];g.splice(1,1);if(j.substr(j.length-1)!=="\\"){g[1]=(g[1]||"").replace(i,""),d=l.find[h](g,b,c);if(d!=null){a=a.replace(l.match[h],"");break}}}}d||(d=typeof b.getElementsByTagName!="undefined"?b.getElementsByTagName("*"):[]);return{set:d,expr:a}},k.filter=function(a,c,d,e){var f,g,h=a,i=[],j=c,m=c&&c[0]&&k.isXML(c[0]);while(a&&c.length){for(var n in l.filter)if((f=l.leftMatch[n].exec(a))!=null&&f[2]){var o,p,q=l.filter[n],r=f[1];g=!1,f.splice(1,1);if(r.substr(r.length-1)==="\\")continue;j===i&&(i=[]);if(l.preFilter[n]){f=l.preFilter[n](f,j,d,i,e,m);if(!f)g=o=!0;else if(f===!0)continue}if(f)for(var s=0;(p=j[s])!=null;s++)if(p){o=q(p,f,s,j);var t=e^!!o;d&&o!=null?t?g=!0:j[s]=!1:t&&(i.push(p),g=!0)}if(o!==b){d||(j=i),a=a.replace(l.match[n],"");if(!g)return[];break}}if(a===h)if(g==null)k.error(a);else break;h=a}return j},k.error=function(a){throw"Syntax error, unrecognized expression: "+a};var l=k.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(a){return a.getAttribute("href")},type:function(a){return a.getAttribute("type")}},relative:{"+":function(a,b){var c=typeof b=="string",d=c&&!j.test(b),e=c&&!d;d&&(b=b.toLowerCase());for(var f=0,g=a.length,h;f<g;f++)if(h=a[f]){while((h=h.previousSibling)&&h.nodeType!==1);a[f]=e||h&&h.nodeName.toLowerCase()===b?h||!1:h===b}e&&k.filter(b,a,!0)},">":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!j.test(b)){b=b.toLowerCase();for(;e<f;e++){c=a[e];if(c){var g=c.parentNode;a[e]=g.nodeName.toLowerCase()===b?g:!1}}}else{for(;e<f;e++)c=a[e],c&&(a[e]=d?c.parentNode:c.parentNode===b);d&&k.filter(b,a,!0)}},"":function(a,b,c){var e,f=d++,g=u;typeof b=="string"&&!j.test(b)&&(b=b.toLowerCase(),e=b,g=t),g("parentNode",b,f,a,e,c)},"~":function(a,b,c){var e,f=d++,g=u;typeof b=="string"&&!j.test(b)&&(b=b.toLowerCase(),e=b,g=t),g("previousSibling",b,f,a,e,c)}},find:{ID:function(a,b,c){if(typeof b.getElementById!="undefined"&&!c){var d=b.getElementById(a[1]);return d&&d.parentNode?[d]:[]}},NAME:function(a,b){if(typeof b.getElementsByName!="undefined"){var c=[],d=b.getElementsByName(a[1]);for(var e=0,f=d.length;e<f;e++)d[e].getAttribute("name")===a[1]&&c.push(d[e]);return c.length===0?null:c}},TAG:function(a,b){if(typeof b.getElementsByTagName!="undefined")return b.getElementsByTagName(a[1])}},preFilter:{CLASS:function(a,b,c,d,e,f){a=" "+a[1].replace(i,"")+" ";if(f)return a;for(var g=0,h;(h=b[g])!=null;g++)h&&(e^(h.className&&(" "+h.className+" ").replace(/[\t\n\r]/g," ").indexOf(a)>=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(i,"")},TAG:function(a,b){return a[1].replace(i,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||k.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&k.error(a[0]);a[0]=d++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(i,"");!f&&l.attrMap[g]&&(a[1]=l.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(i,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=k(b[3],null,null,c);else{var g=k.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(l.match.POS.test(b[0])||l.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!k(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return b<c[3]-0},gt:function(a,b,c){return b>c[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=l.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||k.getText([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h<i;h++)if(g[h]===a)return!1;return!0}k.error(e)},CHILD:function(a,b){var c=b[1],d=a;switch(c){case"only":case"first":while(d=d.previousSibling)if(d.nodeType===1)return!1;if(c==="first")return!0;d=a;case"last":while(d=d.nextSibling)if(d.nodeType===1)return!1;return!0;case"nth":var e=b[2],f=b[3];if(e===1&&f===0)return!0;var g=b[0],h=a.parentNode;if(h&&(h.sizcache!==g||!a.nodeIndex)){var i=0;for(d=h.firstChild;d;d=d.nextSibling)d.nodeType===1&&(d.nodeIndex=++i);h.sizcache=g}var j=a.nodeIndex-f;return e===0?j===0:j%e===0&&j/e>=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=l.attrHandle[c]?l.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=l.setFilters[e];if(f)return f(a,c,b,d)}}},m=l.match.POS,n=function(a,b){return"\\"+(b-0+1)};for(var o in l.match)l.match[o]=new RegExp(l.match[o].source+/(?![^\[]*\])(?![^\(]*\))/.source),l.leftMatch[o]=new RegExp(/(^(?:.|\r|\n)*?)/.source+l.match[o].source.replace(/\\(\d+)/g,n));var p=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(q){p=function(a,b){var c=0,d=b||[];if(e.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var f=a.length;c<f;c++)d.push(a[c]);else for(;a[c];c++)d.push(a[c]);return d}}var r,s;c.documentElement.compareDocumentPosition?r=function(a,b){if(a===b){g=!0;return 0}if(!a.compareDocumentPosition||!b.compareDocumentPosition)return a.compareDocumentPosition?-1:1;return a.compareDocumentPosition(b)&4?-1:1}:(r=function(a,b){if(a===b){g=!0;return 0}if(a.sourceIndex&&b.sourceIndex)return a.sourceIndex-b.sourceIndex;var c,d,e=[],f=[],h=a.parentNode,i=b.parentNode,j=h;if(h===i)return s(a,b);if(!h)return-1;if(!i)return 1;while(j)e.unshift(j),j=j.parentNode;j=i;while(j)f.unshift(j),j=j.parentNode;c=e.length,d=f.length;for(var k=0;k<c&&k<d;k++)if(e[k]!==f[k])return s(e[k],f[k]);return k===c?s(a,f[k],-1):s(e[k],b,1)},s=function(a,b,c){if(a===b)return c;var d=a.nextSibling;while(d){if(d===b)return-1;d=d.nextSibling}return 1}),k.getText=function(a){var b="",c;for(var d=0;a[d];d++)c=a[d],c.nodeType===3||c.nodeType===4?b+=c.nodeValue:c.nodeType!==8&&(b+=k.getText(c.childNodes));return b},function(){var a=c.createElement("div"),d="script"+(new Date).getTime(),e=c.documentElement;a.innerHTML="<a name='"+d+"'/>",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(l.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},l.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(l.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="<a href='#'></a>",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(l.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=k,b=c.createElement("div"),d="__sizzle__";b.innerHTML="<p class='TEST'></p>";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){k=function(b,e,f,g){e=e||c;if(!g&&!k.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return p(e.getElementsByTagName(b),f);if(h[2]&&l.find.CLASS&&e.getElementsByClassName)return p(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return p([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return p([],f);if(i.id===h[3])return p([i],f)}try{return p(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var m=e,n=e.getAttribute("id"),o=n||d,q=e.parentNode,r=/^\s*[+~]/.test(b);n?o=o.replace(/'/g,"\\$&"):e.setAttribute("id",o),r&&q&&(e=e.parentNode);try{if(!r||q)return p(e.querySelectorAll("[id='"+o+"'] "+b),f)}catch(s){}finally{n||m.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)k[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}k.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!k.isXML(a))try{if(e||!l.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return k(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="<div class='test e'></div><div class='test'></div>";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;l.order.splice(1,0,"CLASS"),l.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?k.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?k.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:k.contains=function(){return!1},k.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var v=function(a,b){var c,d=[],e="",f=b.nodeType?[b]:b;while(c=l.match.PSEUDO.exec(a))e+=c[0],a=a.replace(l.match.PSEUDO,"");a=l.relative[a]?a+"*":a;for(var g=0,h=f.length;g<h;g++)k(a,f[g],d);return k.filter(e,d)};f.find=k,f.expr=k.selectors,f.expr[":"]=f.expr.filters,f.unique=k.uniqueSort,f.text=k.getText,f.isXMLDoc=k.isXML,f.contains=k.contains}();var P=/Until$/,Q=/^(?:parents|prevUntil|prevAll)/,R=/,/,S=/^.[^:#\[\.,]*$/,T=Array.prototype.slice,U=f.expr.match.POS,V={children:!0,contents:!0,next:!0,prev:!0};f.fn.extend({find:function(a){var b=this,c,d;if(typeof a!="string")return f(a).filter(function(){for(c=0,d=b.length;c<d;c++)if(f.contains(b[c],this))return!0});var e=this.pushStack("","find",a),g,h,i;for(c=0,d=this.length;c<d;c++){g=e.length,f.find(a,this[c],e);if(c>0)for(h=g;h<e.length;h++)for(i=0;i<g;i++)if(e[i]===e[h]){e.splice(h--,1);break}}return e},has:function(a){var b=f(a);return this.filter(function(){for(var a=0,c=b.length;a<c;a++)if(f.contains(this,b[a]))return!0})},not:function(a){return this.pushStack(X(this,a,!1),"not",a)},filter:function(a){return this.pushStack(X(this,a,!0),"filter",a)},is:function(a){return!!a&&(typeof a=="string"?f.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h,i,j={},k=1;if(g&&a.length){for(d=0,e=a.length;d<e;d++)i=a[d],j[i]||(j[i]=U.test(i)?f(i,b||this.context):i);while(g&&g.ownerDocument&&g!==b){for(i in j)h=j[i],(h.jquery?h.index(g)>-1:f(g).is(h))&&c.push({selector:i,elem:g,level:k});g=g.parentNode,k++}}return c}var l=U.test(a)||typeof a!="string"?f(a,b||this.context):0;for(d=0,e=this.length;d<e;d++){g=this[d];while(g){if(l?l.index(g)>-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a||typeof a=="string")return f.inArray(this[0],a?f(a):this.parent().children());return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(W(c[0])||W(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling(a.parentNode.firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c),g=T.call(arguments);P.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!V[a]?f.unique(e):e,(this.length>1||R.test(d))&&Q.test(a)&&(e=e.reverse());return this.pushStack(e,a,g.join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var Y=/ jQuery\d+="(?:\d+|null)"/g,Z=/^\s+/,$=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,_=/<([\w:]+)/,ba=/<tbody/i,bb=/<|&#?\w+;/,bc=/<(?:script|object|embed|option|style)/i,bd=/checked\s*(?:[^=]|=\s*.checked.)/i,be=/\/(java|ecma)script/i,bf=/^\s*<!(?:\[CDATA\[|\-\-)/,bg={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]};bg.optgroup=bg.option,bg.tbody=bg.tfoot=bg.colgroup=bg.caption=bg.thead,bg.th=bg.td,f.support.htmlSerialize||(bg._default=[1,"div<div>","</div>"]),f.fn.extend({text:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.text(a.call(this,b,c.text()))});if(typeof a!="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return f.text(this)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){f(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f(arguments[0]).toArray());return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(Y,""):null;if(typeof a=="string"&&!bc.test(a)&&(f.support.leadingWhitespace||!Z.test(a))&&!bg[(_.exec(a)||["",""])[1].toLowerCase()]){a=a.replace($,"<$1></$2>");try{for(var c=0,d=this.length;c<d;c++)this[c].nodeType===1&&(f.cleanData(this[c].getElementsByTagName("*")),this[c].innerHTML=a)}catch(e){this.empty().append(a)}}else f.isFunction(a)?this.each(function(b){var c=f(this);c.html(a.call(this,b,c.html()))}):this.empty().append(a);return this},replaceWith:function(a){if(this[0]&&this[0].parentNode){if(f.isFunction(a))return this.each(function(b){var c=f(this),d=c.html();c.replaceWith(a.call(this,b,d))});typeof a!="string"&&(a=f(a).detach());return this.each(function(){var b=this.nextSibling,c=this.parentNode;f(this).remove(),b?f(b).before(a):f(c).append(a)})}return this.length?this.pushStack(f(f.isFunction(a)?a():a),"replaceWith",a):this},detach:function(a){return this.remove(a,!0)},domManip:function(a,c,d){var e,g,h,i,j=a[0],k=[];if(!f.support.checkClone&&arguments.length===3&&typeof j=="string"&&bd.test(j))return this.each(function(){f(this).domManip(a,c,d,!0)});if(f.isFunction(j))return this.each(function(e){var g=f(this);a[0]=j.call(this,e,c?g.html():b),g.domManip(a,c,d)});if(this[0]){i=j&&j.parentNode,f.support.parentNode&&i&&i.nodeType===11&&i.childNodes.length===this.length?e={fragment:i}:e=f.buildFragment(a,this,k),h=e.fragment,h.childNodes.length===1?g=h=h.firstChild:g=h.firstChild;if(g){c=c&&f.nodeName(g,"tr");for(var l=0,m=this.length,n=m-1;l<m;l++)d.call(c?bh(this[l],g):this[l],e.cacheable||m>1&&l<n?f.clone(h,!0,!0):h)}k.length&&f.each(k,bn)}return this}}),f.buildFragment=function(a,b,d){var e,g,h,i=b&&b[0]?b[0].ownerDocument||b[0]:c;a.length===1&&typeof a[0]=="string"&&a[0].length<512&&i===c&&a[0].charAt(0)==="<"&&!bc.test(a[0])&&(f.support.checkClone||!bd.test(a[0]))&&(g=!0,h=f.fragments[a[0]],h&&h!==1&&(e=h)),e||(e=i.createDocumentFragment(),f.clean(a,i,e,d)),g&&(f.fragments[a[0]]=h?e:1);return{fragment:e,cacheable:g}},f.fragments={},f.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){f.fn[a]=function(c){var d=[],e=f(c),g=this.length===1&&this[0].parentNode;if(g&&g.nodeType===11&&g.childNodes.length===1&&e.length===1){e[b](this[0]);return this}for(var h=0,i=e.length;h<i;h++){var j=(h>0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d=a.cloneNode(!0),e,g,h;if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bj(a,d),e=bk(a),g=bk(d);for(h=0;e[h];++h)bj(e[h],g[h])}if(b){bi(a,d);if(c){e=bk(a),g=bk(d);for(h=0;e[h];++h)bi(e[h],g[h])}}return d},clean:function(a,b,d,e){var g;b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||
-b[0]&&b[0].ownerDocument||c);var h=[],i;for(var j=0,k;(k=a[j])!=null;j++){typeof k=="number"&&(k+="");if(!k)continue;if(typeof k=="string")if(!bb.test(k))k=b.createTextNode(k);else{k=k.replace($,"<$1></$2>");var l=(_.exec(k)||["",""])[1].toLowerCase(),m=bg[l]||bg._default,n=m[0],o=b.createElement("div");o.innerHTML=m[1]+k+m[2];while(n--)o=o.lastChild;if(!f.support.tbody){var p=ba.test(k),q=l==="table"&&!p?o.firstChild&&o.firstChild.childNodes:m[1]==="<table>"&&!p?o.childNodes:[];for(i=q.length-1;i>=0;--i)f.nodeName(q[i],"tbody")&&!q[i].childNodes.length&&q[i].parentNode.removeChild(q[i])}!f.support.leadingWhitespace&&Z.test(k)&&o.insertBefore(b.createTextNode(Z.exec(k)[0]),o.firstChild),k=o.childNodes}var r;if(!f.support.appendChecked)if(k[0]&&typeof (r=k.length)=="number")for(i=0;i<r;i++)bm(k[i]);else bm(k);k.nodeType?h.push(k):h=f.merge(h,k)}if(d){g=function(a){return!a.type||be.test(a.type)};for(j=0;h[j];j++)if(e&&f.nodeName(h[j],"script")&&(!h[j].type||h[j].type.toLowerCase()==="text/javascript"))e.push(h[j].parentNode?h[j].parentNode.removeChild(h[j]):h[j]);else{if(h[j].nodeType===1){var s=f.grep(h[j].getElementsByTagName("script"),g);h.splice.apply(h,[j+1,0].concat(s))}d.appendChild(h[j])}}return h},cleanData:function(a){var b,c,d=f.cache,e=f.expando,g=f.event.special,h=f.support.deleteExpando;for(var i=0,j;(j=a[i])!=null;i++){if(j.nodeName&&f.noData[j.nodeName.toLowerCase()])continue;c=j[f.expando];if(c){b=d[c]&&d[c][e];if(b&&b.events){for(var k in b.events)g[k]?f.event.remove(j,k):f.removeEvent(j,k,b.handle);b.handle&&(b.handle.elem=null)}h?delete j[f.expando]:j.removeAttribute&&j.removeAttribute(f.expando),delete d[c]}}}});var bo=/alpha\([^)]*\)/i,bp=/opacity=([^)]*)/,bq=/-([a-z])/ig,br=/([A-Z]|^ms)/g,bs=/^-?\d+(?:px)?$/i,bt=/^-?\d/,bu=/^[+\-]=/,bv=/[^+\-\.\de]+/g,bw={position:"absolute",visibility:"hidden",display:"block"},bx=["Left","Right"],by=["Top","Bottom"],bz,bA,bB,bC=function(a,b){return b.toUpperCase()};f.fn.css=function(a,c){if(arguments.length===2&&c===b)return this;return f.access(this,a,c,!0,function(a,c,d){return d!==b?f.style(a,c,d):f.css(a,c)})},f.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=bz(a,"opacity","opacity");return c===""?"1":c}return a.style.opacity}}},cssNumber:{zIndex:!0,fontWeight:!0,opacity:!0,zoom:!0,lineHeight:!0,widows:!0,orphans:!0},cssProps:{"float":f.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,c,d,e){if(!!a&&a.nodeType!==3&&a.nodeType!==8&&!!a.style){var g,h,i=f.camelCase(c),j=a.style,k=f.cssHooks[i];c=f.cssProps[i]||i;if(d===b){if(k&&"get"in k&&(g=k.get(a,!1,e))!==b)return g;return j[c]}h=typeof d;if(h==="number"&&isNaN(d)||d==null)return;h==="string"&&bu.test(d)&&(d=+d.replace(bv,"")+parseFloat(f.css(a,c))),h==="number"&&!f.cssNumber[i]&&(d+="px");if(!k||!("set"in k)||(d=k.set(a,d))!==b)try{j[c]=d}catch(l){}}},css:function(a,c,d){var e,g;c=f.camelCase(c),g=f.cssHooks[c],c=f.cssProps[c]||c,c==="cssFloat"&&(c="float");if(g&&"get"in g&&(e=g.get(a,!0,d))!==b)return e;if(bz)return bz(a,c)},swap:function(a,b,c){var d={};for(var e in b)d[e]=a.style[e],a.style[e]=b[e];c.call(a);for(e in b)a.style[e]=d[e]},camelCase:function(a){return a.replace(bq,bC)}}),f.curCSS=f.css,f.each(["height","width"],function(a,b){f.cssHooks[b]={get:function(a,c,d){var e;if(c){a.offsetWidth!==0?e=bD(a,b,d):f.swap(a,bw,function(){e=bD(a,b,d)});if(e<=0){e=bz(a,b,b),e==="0px"&&bB&&(e=bB(a,b,b));if(e!=null)return e===""||e==="auto"?"0px":e}if(e<0||e==null){e=a.style[b];return e===""||e==="auto"?"0px":e}return typeof e=="string"?e:e+"px"}},set:function(a,b){if(!bs.test(b))return b;b=parseFloat(b);if(b>=0)return b+"px"}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return bp.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle;c.zoom=1;var e=f.isNaN(b)?"":"alpha(opacity="+b*100+")",g=d&&d.filter||c.filter||"";c.filter=bo.test(g)?g.replace(bo,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){var c;f.swap(a,{display:"inline-block"},function(){b?c=bz(a,"margin-right","marginRight"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(bA=function(a,c){var d,e,g;c=c.replace(br,"-$1").toLowerCase();if(!(e=a.ownerDocument.defaultView))return b;if(g=e.getComputedStyle(a,null))d=g.getPropertyValue(c),d===""&&!f.contains(a.ownerDocument.documentElement,a)&&(d=f.style(a,c));return d}),c.documentElement.currentStyle&&(bB=function(a,b){var c,d=a.currentStyle&&a.currentStyle[b],e=a.runtimeStyle&&a.runtimeStyle[b],f=a.style;!bs.test(d)&&bt.test(d)&&(c=f.left,e&&(a.runtimeStyle.left=a.currentStyle.left),f.left=b==="fontSize"?"1em":d||0,d=f.pixelLeft+"px",f.left=c,e&&(a.runtimeStyle.left=e));return d===""?"auto":d}),bz=bA||bB,f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)});var bE=/%20/g,bF=/\[\]$/,bG=/\r?\n/g,bH=/#.*$/,bI=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bJ=/^(?:color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bK=/^(?:about|app|app\-storage|.+\-extension|file|widget):$/,bL=/^(?:GET|HEAD)$/,bM=/^\/\//,bN=/\?/,bO=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,bP=/^(?:select|textarea)/i,bQ=/\s+/,bR=/([?&])_=[^&]*/,bS=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bT=f.fn.load,bU={},bV={},bW,bX;try{bW=e.href}catch(bY){bW=c.createElement("a"),bW.href="",bW=bW.href}bX=bS.exec(bW.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bT)return bT.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("<div>").append(c.replace(bO,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bP.test(this.nodeName)||bJ.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bG,"\r\n")}}):{name:b.name,value:c.replace(bG,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.bind(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?f.extend(!0,a,f.ajaxSettings,b):(b=a,a=f.extend(!0,f.ajaxSettings,b));for(var c in{context:1,url:1})c in b?a[c]=b[c]:c in f.ajaxSettings&&(a[c]=f.ajaxSettings[c]);return a},ajaxSettings:{url:bW,isLocal:bK.test(bX[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":"*/*"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML}},ajaxPrefilter:bZ(bU),ajaxTransport:bZ(bV),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a?4:0;var o,r,u,w=l?ca(d,v,l):b,x,y;if(a>=200&&a<300||a===304){if(d.ifModified){if(x=v.getResponseHeader("Last-Modified"))f.lastModified[k]=x;if(y=v.getResponseHeader("Etag"))f.etag[k]=y}if(a===304)c="notmodified",o=!0;else try{r=cb(d,w),c="success",o=!0}catch(z){c="parsererror",u=z}}else{u=c;if(!c||a)c="error",a<0&&(a=0)}v.status=a,v.statusText=c,o?h.resolveWith(e,[r,c,v]):h.rejectWith(e,[v,c,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.resolveWith(e,[v,c]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f._Deferred(),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bI.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.done,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bH,"").replace(bM,bX[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bQ),d.crossDomain==null&&(r=bS.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bX[1]&&r[2]==bX[2]&&(r[3]||(r[1]==="http:"?80:443))==(bX[3]||(bX[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),b$(bU,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bL.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bN.test(d.url)?"&":"?")+d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bR,"$1_="+x);d.url=y+(y===d.url?(bN.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", */*; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=b$(bV,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){status<2?w(-1,z):f.error(z)}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)b_(g,a[g],c,e);return d.join("&").replace(bE,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var cc=f.now(),cd=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+cc++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=b.contentType==="application/x-www-form-urlencoded"&&typeof b.data=="string";if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(cd.test(b.url)||e&&cd.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(cd,l),b.url===j&&(e&&(k=k.replace(cd,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var ce=a.ActiveXObject?function(){for(var a in cg)cg[a](0,1)}:!1,cf=0,cg;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ch()||ci()}:ch,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,ce&&delete cg[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n),m.text=h.responseText;try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cf,ce&&(cg||(cg={},f(a).unload(ce)),cg[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var cj={},ck,cl,cm=/^(?:toggle|show|hide)$/,cn=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,co,cp=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],cq,cr=a.webkitRequestAnimationFrame||a.mozRequestAnimationFrame||a.oRequestAnimationFrame;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(cu("show",3),a,b,c);for(var g=0,h=this.length;g<h;g++)d=this[g],d.style&&(e=d.style.display,!f._data(d,"olddisplay")&&e==="none"&&(e=d.style.display=""),e===""&&f.css(d,"display")==="none"&&f._data(d,"olddisplay",cv(d.nodeName)));for(g=0;g<h;g++){d=this[g];if(d.style){e=d.style.display;if(e===""||e==="none")d.style.display=f._data(d,"olddisplay")||""}}return this},hide:function(a,b,c){if(a||a===0)return this.animate(cu("hide",3),a,b,c);for(var d=0,e=this.length;d<e;d++)if(this[d].style){var g=f.css(this[d],"display");g!=="none"&&!f._data(this[d],"olddisplay")&&f._data(this[d],"olddisplay",g)}for(d=0;d<e;d++)this[d].style&&(this[d].style.display="none");return this},_toggle:f.fn.toggle,toggle:function(a,b,c){var d=typeof a=="boolean";f.isFunction(a)&&f.isFunction(b)?this._toggle.apply(this,arguments):a==null||d?this.each(function(){var b=d?a:f(this).is(":hidden");f(this)[b?"show":"hide"]()}):this.animate(cu("toggle",3),a,b,c);return this},fadeTo:function(a,b,c,d){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=f.speed(b,c,d);if(f.isEmptyObject(a))return this.each(e.complete,[!1]);a=f.extend({},a);return this[e.queue===!1?"each":"queue"](function(){e.queue===!1&&f._mark(this);var b=f.extend({},e),c=this.nodeType===1,d=c&&f(this).is(":hidden"),g,h,i,j,k,l,m,n,o;b.animatedProperties={};for(i in a){g=f.camelCase(i),i!==g&&(a[g]=a[i],delete a[i]),h=a[g],f.isArray(h)?(b.animatedProperties[g]=h[1],h=a[g]=h[0]):b.animatedProperties[g]=b.specialEasing&&b.specialEasing[g]||b.easing||"swing";if(h==="hide"&&d||h==="show"&&!d)return b.complete.call(this);c&&(g==="height"||g==="width")&&(b.overflow=[this.style.overflow,this.style.overflowX,this.style.overflowY],f.css(this,"display")==="inline"&&f.css(this,"float")==="none"&&(f.support.inlineBlockNeedsLayout?(j=cv(this.nodeName),j==="inline"?this.style.display="inline-block":(this.style.display="inline",this.style.zoom=1)):this.style.display="inline-block"))}b.overflow!=null&&(this.style.overflow="hidden");for(i in a)k=new f.fx(this,b,i),h=a[i],cm.test(h)?k[h==="toggle"?d?"show":"hide":h]():(l=cn.exec(h),m=k.cur(),l?(n=parseFloat(l[2]),o=l[3]||(f.cssNumber[i]?"":"px"),o!=="px"&&(f.style(this,i,(n||1)+o),m=(n||1)/k.cur()*m,f.style(this,i,m+o)),l[1]&&(n=(l[1]==="-="?-1:1)*n+m),k.custom(m,n,o)):k.custom(m,h,""));return!0})},stop:function(a,b){a&&this.queue([]),this.each(function(){var a=f.timers,c=a.length;b||f._unmark(!0,this);while(c--)a[c].elem===this&&(b&&a[c](!0),a.splice(c,1))}),b||this.dequeue();return this}}),f.each({slideDown:cu("show",1),slideUp:cu("hide",1),slideToggle:cu("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){f.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),f.extend({speed:function(a,b,c){var d=a&&typeof a=="object"?f.extend({},a):{complete:c||!c&&b||f.isFunction(a)&&a,duration:a,easing:c&&b||b&&!f.isFunction(b)&&b};d.duration=f.fx.off?0:typeof d.duration=="number"?d.duration:d.duration in f.fx.speeds?f.fx.speeds[d.duration]:f.fx.speeds._default,d.old=d.complete,d.complete=function(a){d.queue!==!1?f.dequeue(this):a!==!1&&f._unmark(this),f.isFunction(d.old)&&d.old.call(this)};return d},easing:{linear:function(a,b,c,d){return c+d*a},swing:function(a,b,c,d){return(-Math.cos(a*Math.PI)/2+.5)*d+c}},timers:[],fx:function(a,b,c){this.options=b,this.elem=a,this.prop=c,b.orig=b.orig||{}}}),f.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this),(f.fx.step[this.prop]||f.fx.step._default)(this)},cur:function(){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];var a,b=f.css(this.elem,this.prop);return isNaN(a=parseFloat(b))?!b||b==="auto"?0:b:a},custom:function(a,b,c){function h(a){return d.step(a)}var d=this,e=f.fx,g;this.startTime=cq||cs(),this.start=a,this.end=b,this.unit=c||this.unit||(f.cssNumber[this.prop]?"":"px"),this.now=this.start,this.pos=this.state=0,h.elem=this.elem,h()&&f.timers.push(h)&&!co&&(cr?(co=1,g=function(){co&&(cr(g),e.tick())},cr(g)):co=setInterval(e.tick,e.interval))},show:function(){this.options.orig[this.prop]=f.style(this.elem,this.prop),this.options.show=!0,this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur()),f(this.elem).show()},hide:function(){this.options.orig[this.prop]=f.style(this.elem,this.prop),this.options.hide=!0,this.custom(this.cur(),0)},step:function(a){var b=cq||cs(),c=!0,d=this.elem,e=this.options,g,h;if(a||b>=e.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),e.animatedProperties[this.prop]=!0;for(g in e.animatedProperties)e.animatedProperties[g]!==!0&&(c=!1);if(c){e.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){d.style["overflow"+b]=e.overflow[a]}),e.hide&&f(d).hide();if(e.hide||e.show)for(var i in e.animatedProperties)f.style(d,i,e.orig[i]);e.complete.call(d)}return!1}e.duration==Infinity?this.now=b:(h=b-this.startTime,this.state=h/e.duration,this.pos=f.easing[e.animatedProperties[this.prop]](this.state,h,0,1,e.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){for(var a=f.timers,b=0;b<a.length;++b)a[b]()||a.splice(b--,1);a.length||f.fx.stop()},interval:13,stop:function(){clearInterval(co),co=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){f.style(a.elem,"opacity",a.now)},_default:function(a){a.elem.style&&a.elem.style[a.prop]!=null?a.elem.style[a.prop]=(a.prop==="width"||a.prop==="height"?Math.max(0,a.now):a.now)+a.unit:a.elem[a.prop]=a.now}}}),f.expr&&f.expr.filters&&(f.expr.filters.animated=function(a){return f.grep(f.timers,function(b){return a===b.elem}).length});var cw=/^t(?:able|d|h)$/i,cx=/^(?:body|html)$/i;"getBoundingClientRect"in c.documentElement?f.fn.offset=function(a){var b=this[0],c;if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);try{c=b.getBoundingClientRect()}catch(d){}var e=b.ownerDocument,g=e.documentElement;if(!c||!f.contains(g,b))return c?{top:c.top,left:c.left}:{top:0,left:0};var h=e.body,i=cy(e),j=g.clientTop||h.clientTop||0,k=g.clientLeft||h.clientLeft||0,l=i.pageYOffset||f.support.boxModel&&g.scrollTop||h.scrollTop,m=i.pageXOffset||f.support.boxModel&&g.scrollLeft||h.scrollLeft,n=c.top+l-j,o=c.left+m-k;return{top:n,left:o}}:f.fn.offset=function(a){var b=this[0];if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);f.offset.initialize();var c,d=b.offsetParent,e=b,g=b.ownerDocument,h=g.documentElement,i=g.body,j=g.defaultView,k=j?j.getComputedStyle(b,null):b.currentStyle,l=b.offsetTop,m=b.offsetLeft;while((b=b.parentNode)&&b!==i&&b!==h){if(f.offset.supportsFixedPosition&&k.position==="fixed")break;c=j?j.getComputedStyle(b,null):b.currentStyle,l-=b.scrollTop,m-=b.scrollLeft,b===d&&(l+=b.offsetTop,m+=b.offsetLeft,f.offset.doesNotAddBorder&&(!f.offset.doesAddBorderForTableAndCells||!cw.test(b.nodeName))&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),e=d,d=b.offsetParent),f.offset.subtractsBorderForOverflowNotVisible&&c.overflow!=="visible"&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),k=c}if(k.position==="relative"||k.position==="static")l+=i.offsetTop,m+=i.offsetLeft;f.offset.supportsFixedPosition&&k.position==="fixed"&&(l+=Math.max(h.scrollTop,i.scrollTop),m+=Math.max(h.scrollLeft,i.scrollLeft));return{top:l,left:m}},f.offset={initialize:function(){var a=c.body,b=c.createElement("div"),d,e,g,h,i=parseFloat(f.css(a,"marginTop"))||0,j="<div style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;'><div></div></div><table style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;' cellpadding='0' cellspacing='0'><tr><td></td></tr></table>";f.extend(b.style,{position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"}),b.innerHTML=j,a.insertBefore(b,a.firstChild),d=b.firstChild,e=d.firstChild,h=d.nextSibling.firstChild.firstChild,this.doesNotAddBorder=e.offsetTop!==5,this.doesAddBorderForTableAndCells=h.offsetTop===5,e.style.position="fixed",e.style.top="20px",this.supportsFixedPosition=e.offsetTop===20||e.offsetTop===15,e.style.position=e.style.top="",d.style.overflow="hidden",d.style.position="relative",this.subtractsBorderForOverflowNotVisible=e.offsetTop===-5,this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==i,a.removeChild(b),f.offset.initialize=f.noop},bodyOffset:function(a){var b=a.offsetTop,c=a.offsetLeft;f.offset.initialize(),f.offset.doesNotIncludeMarginInBodyOffset&&(b+=parseFloat(f.css(a,"marginTop"))||0,c+=parseFloat(f.css(a,"marginLeft"))||0);return{top:b,left:c}},setOffset:function(a,b,c){var d=f.css(a,"position");d==="static"&&(a.style.position="relative");var e=f(a),g=e.offset(),h=f.css(a,"top"),i=f.css(a,"left"),j=(d==="absolute"||d==="fixed")&&f.inArray("auto",[h,i])>-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=cx.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!cx.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each(["Left","Top"],function(a,c){var d="scroll"+c;f.fn[d]=function(c){var e,g;if(c===b){e=this[0];if(!e)return null;g=cy(e);return g?"pageXOffset"in g?g[a?"pageYOffset":"pageXOffset"]:f.support.boxModel&&g.document.documentElement[d]||g.document.body[d]:e[d]}return this.each(function(){g=cy(this),g?g.scrollTo(a?f(g).scrollLeft():c,a?c:f(g).scrollTop()):this[d]=c})}}),f.each(["Height","Width"],function(a,c){var d=c.toLowerCase();f.fn["inner"+c]=function(){return this[0]?parseFloat(f.css(this[0],d,"padding")):null},f.fn["outer"+c]=function(a){return this[0]?parseFloat(f.css(this[0],d,a?"margin":"border")):null},f.fn[d]=function(a){var e=this[0];if(!e)return a==null?null:this;if(f.isFunction(a))return this.each(function(b){var c=f(this);c[d](a.call(this,b,c[d]()))});if(f.isWindow(e)){var g=e.document.documentElement["client"+c];return e.document.compatMode==="CSS1Compat"&&g||e.document.body["client"+c]||g}if(e.nodeType===9)return Math.max(e.documentElement["client"+c],e.body["scroll"+c],e.documentElement["scroll"+c],e.body["offset"+c],e.documentElement["offset"+c]);if(a===b){var h=f.css(e,d),i=parseFloat(h);return f.isNaN(i)?h:i}return this.css(d,typeof a=="string"?a:a+"px")}}),a.jQuery=a.$=f})(window);
\ No newline at end of file
+++ /dev/null
-/*!
- * jQuery UI 1.8.14
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI
- */
-(function(c,j){function k(a,b){var d=a.nodeName.toLowerCase();if("area"===d){b=a.parentNode;d=b.name;if(!a.href||!d||b.nodeName.toLowerCase()!=="map")return false;a=c("img[usemap=#"+d+"]")[0];return!!a&&l(a)}return(/input|select|textarea|button|object/.test(d)?!a.disabled:"a"==d?a.href||b:b)&&l(a)}function l(a){return!c(a).parents().andSelf().filter(function(){return c.curCSS(this,"visibility")==="hidden"||c.expr.filters.hidden(this)}).length}c.ui=c.ui||{};if(!c.ui.version){c.extend(c.ui,{version:"1.8.14",
-keyCode:{ALT:18,BACKSPACE:8,CAPS_LOCK:20,COMMA:188,COMMAND:91,COMMAND_LEFT:91,COMMAND_RIGHT:93,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,MENU:93,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38,WINDOWS:91}});c.fn.extend({_focus:c.fn.focus,focus:function(a,b){return typeof a==="number"?this.each(function(){var d=this;setTimeout(function(){c(d).focus();
-b&&b.call(d)},a)}):this._focus.apply(this,arguments)},scrollParent:function(){var a;a=c.browser.msie&&/(static|relative)/.test(this.css("position"))||/absolute/.test(this.css("position"))?this.parents().filter(function(){return/(relative|absolute|fixed)/.test(c.curCSS(this,"position",1))&&/(auto|scroll)/.test(c.curCSS(this,"overflow",1)+c.curCSS(this,"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0):this.parents().filter(function(){return/(auto|scroll)/.test(c.curCSS(this,"overflow",1)+c.curCSS(this,
-"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0);return/fixed/.test(this.css("position"))||!a.length?c(document):a},zIndex:function(a){if(a!==j)return this.css("zIndex",a);if(this.length){a=c(this[0]);for(var b;a.length&&a[0]!==document;){b=a.css("position");if(b==="absolute"||b==="relative"||b==="fixed"){b=parseInt(a.css("zIndex"),10);if(!isNaN(b)&&b!==0)return b}a=a.parent()}}return 0},disableSelection:function(){return this.bind((c.support.selectstart?"selectstart":"mousedown")+".ui-disableSelection",
-function(a){a.preventDefault()})},enableSelection:function(){return this.unbind(".ui-disableSelection")}});c.each(["Width","Height"],function(a,b){function d(f,g,m,n){c.each(e,function(){g-=parseFloat(c.curCSS(f,"padding"+this,true))||0;if(m)g-=parseFloat(c.curCSS(f,"border"+this+"Width",true))||0;if(n)g-=parseFloat(c.curCSS(f,"margin"+this,true))||0});return g}var e=b==="Width"?["Left","Right"]:["Top","Bottom"],h=b.toLowerCase(),i={innerWidth:c.fn.innerWidth,innerHeight:c.fn.innerHeight,outerWidth:c.fn.outerWidth,
-outerHeight:c.fn.outerHeight};c.fn["inner"+b]=function(f){if(f===j)return i["inner"+b].call(this);return this.each(function(){c(this).css(h,d(this,f)+"px")})};c.fn["outer"+b]=function(f,g){if(typeof f!=="number")return i["outer"+b].call(this,f);return this.each(function(){c(this).css(h,d(this,f,true,g)+"px")})}});c.extend(c.expr[":"],{data:function(a,b,d){return!!c.data(a,d[3])},focusable:function(a){return k(a,!isNaN(c.attr(a,"tabindex")))},tabbable:function(a){var b=c.attr(a,"tabindex"),d=isNaN(b);
-return(d||b>=0)&&k(a,!d)}});c(function(){var a=document.body,b=a.appendChild(b=document.createElement("div"));c.extend(b.style,{minHeight:"100px",height:"auto",padding:0,borderWidth:0});c.support.minHeight=b.offsetHeight===100;c.support.selectstart="onselectstart"in b;a.removeChild(b).style.display="none"});c.extend(c.ui,{plugin:{add:function(a,b,d){a=c.ui[a].prototype;for(var e in d){a.plugins[e]=a.plugins[e]||[];a.plugins[e].push([b,d[e]])}},call:function(a,b,d){if((b=a.plugins[b])&&a.element[0].parentNode)for(var e=
-0;e<b.length;e++)a.options[b[e][0]]&&b[e][1].apply(a.element,d)}},contains:function(a,b){return document.compareDocumentPosition?a.compareDocumentPosition(b)&16:a!==b&&a.contains(b)},hasScroll:function(a,b){if(c(a).css("overflow")==="hidden")return false;b=b&&b==="left"?"scrollLeft":"scrollTop";var d=false;if(a[b]>0)return true;a[b]=1;d=a[b]>0;a[b]=0;return d},isOverAxis:function(a,b,d){return a>b&&a<b+d},isOver:function(a,b,d,e,h,i){return c.ui.isOverAxis(a,d,h)&&c.ui.isOverAxis(b,e,i)}})}})(jQuery);
-;/*!
- * jQuery UI Widget 1.8.14
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Widget
- */
-(function(b,j){if(b.cleanData){var k=b.cleanData;b.cleanData=function(a){for(var c=0,d;(d=a[c])!=null;c++)b(d).triggerHandler("remove");k(a)}}else{var l=b.fn.remove;b.fn.remove=function(a,c){return this.each(function(){if(!c)if(!a||b.filter(a,[this]).length)b("*",this).add([this]).each(function(){b(this).triggerHandler("remove")});return l.call(b(this),a,c)})}}b.widget=function(a,c,d){var e=a.split(".")[0],f;a=a.split(".")[1];f=e+"-"+a;if(!d){d=c;c=b.Widget}b.expr[":"][f]=function(h){return!!b.data(h,
-a)};b[e]=b[e]||{};b[e][a]=function(h,g){arguments.length&&this._createWidget(h,g)};c=new c;c.options=b.extend(true,{},c.options);b[e][a].prototype=b.extend(true,c,{namespace:e,widgetName:a,widgetEventPrefix:b[e][a].prototype.widgetEventPrefix||a,widgetBaseClass:f},d);b.widget.bridge(a,b[e][a])};b.widget.bridge=function(a,c){b.fn[a]=function(d){var e=typeof d==="string",f=Array.prototype.slice.call(arguments,1),h=this;d=!e&&f.length?b.extend.apply(null,[true,d].concat(f)):d;if(e&&d.charAt(0)==="_")return h;
-e?this.each(function(){var g=b.data(this,a),i=g&&b.isFunction(g[d])?g[d].apply(g,f):g;if(i!==g&&i!==j){h=i;return false}}):this.each(function(){var g=b.data(this,a);g?g.option(d||{})._init():b.data(this,a,new c(d,this))});return h}};b.Widget=function(a,c){arguments.length&&this._createWidget(a,c)};b.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",options:{disabled:false},_createWidget:function(a,c){b.data(c,this.widgetName,this);this.element=b(c);this.options=b.extend(true,{},this.options,
-this._getCreateOptions(),a);var d=this;this.element.bind("remove."+this.widgetName,function(){d.destroy()});this._create();this._trigger("create");this._init()},_getCreateOptions:function(){return b.metadata&&b.metadata.get(this.element[0])[this.widgetName]},_create:function(){},_init:function(){},destroy:function(){this.element.unbind("."+this.widgetName).removeData(this.widgetName);this.widget().unbind("."+this.widgetName).removeAttr("aria-disabled").removeClass(this.widgetBaseClass+"-disabled ui-state-disabled")},
-widget:function(){return this.element},option:function(a,c){var d=a;if(arguments.length===0)return b.extend({},this.options);if(typeof a==="string"){if(c===j)return this.options[a];d={};d[a]=c}this._setOptions(d);return this},_setOptions:function(a){var c=this;b.each(a,function(d,e){c._setOption(d,e)});return this},_setOption:function(a,c){this.options[a]=c;if(a==="disabled")this.widget()[c?"addClass":"removeClass"](this.widgetBaseClass+"-disabled ui-state-disabled").attr("aria-disabled",c);return this},
-enable:function(){return this._setOption("disabled",false)},disable:function(){return this._setOption("disabled",true)},_trigger:function(a,c,d){var e=this.options[a];c=b.Event(c);c.type=(a===this.widgetEventPrefix?a:this.widgetEventPrefix+a).toLowerCase();d=d||{};if(c.originalEvent){a=b.event.props.length;for(var f;a;){f=b.event.props[--a];c[f]=c.originalEvent[f]}}this.element.trigger(c,d);return!(b.isFunction(e)&&e.call(this.element[0],c,d)===false||c.isDefaultPrevented())}}})(jQuery);
-;/*!
- * jQuery UI Mouse 1.8.14
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Mouse
- *
- * Depends:
- * jquery.ui.widget.js
- */
-(function(b){var d=false;b(document).mousedown(function(){d=false});b.widget("ui.mouse",{options:{cancel:":input,option",distance:1,delay:0},_mouseInit:function(){var a=this;this.element.bind("mousedown."+this.widgetName,function(c){return a._mouseDown(c)}).bind("click."+this.widgetName,function(c){if(true===b.data(c.target,a.widgetName+".preventClickEvent")){b.removeData(c.target,a.widgetName+".preventClickEvent");c.stopImmediatePropagation();return false}});this.started=false},_mouseDestroy:function(){this.element.unbind("."+
-this.widgetName)},_mouseDown:function(a){if(!d){this._mouseStarted&&this._mouseUp(a);this._mouseDownEvent=a;var c=this,f=a.which==1,g=typeof this.options.cancel=="string"?b(a.target).closest(this.options.cancel).length:false;if(!f||g||!this._mouseCapture(a))return true;this.mouseDelayMet=!this.options.delay;if(!this.mouseDelayMet)this._mouseDelayTimer=setTimeout(function(){c.mouseDelayMet=true},this.options.delay);if(this._mouseDistanceMet(a)&&this._mouseDelayMet(a)){this._mouseStarted=this._mouseStart(a)!==
-false;if(!this._mouseStarted){a.preventDefault();return true}}true===b.data(a.target,this.widgetName+".preventClickEvent")&&b.removeData(a.target,this.widgetName+".preventClickEvent");this._mouseMoveDelegate=function(e){return c._mouseMove(e)};this._mouseUpDelegate=function(e){return c._mouseUp(e)};b(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate);a.preventDefault();return d=true}},_mouseMove:function(a){if(b.browser.msie&&
-!(document.documentMode>=9)&&!a.button)return this._mouseUp(a);if(this._mouseStarted){this._mouseDrag(a);return a.preventDefault()}if(this._mouseDistanceMet(a)&&this._mouseDelayMet(a))(this._mouseStarted=this._mouseStart(this._mouseDownEvent,a)!==false)?this._mouseDrag(a):this._mouseUp(a);return!this._mouseStarted},_mouseUp:function(a){b(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate);if(this._mouseStarted){this._mouseStarted=
-false;a.target==this._mouseDownEvent.target&&b.data(a.target,this.widgetName+".preventClickEvent",true);this._mouseStop(a)}return false},_mouseDistanceMet:function(a){return Math.max(Math.abs(this._mouseDownEvent.pageX-a.pageX),Math.abs(this._mouseDownEvent.pageY-a.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return true}})})(jQuery);
-;/*
- * jQuery UI Position 1.8.14
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Position
- */
-(function(c){c.ui=c.ui||{};var n=/left|center|right/,o=/top|center|bottom/,t=c.fn.position,u=c.fn.offset;c.fn.position=function(b){if(!b||!b.of)return t.apply(this,arguments);b=c.extend({},b);var a=c(b.of),d=a[0],g=(b.collision||"flip").split(" "),e=b.offset?b.offset.split(" "):[0,0],h,k,j;if(d.nodeType===9){h=a.width();k=a.height();j={top:0,left:0}}else if(d.setTimeout){h=a.width();k=a.height();j={top:a.scrollTop(),left:a.scrollLeft()}}else if(d.preventDefault){b.at="left top";h=k=0;j={top:b.of.pageY,
-left:b.of.pageX}}else{h=a.outerWidth();k=a.outerHeight();j=a.offset()}c.each(["my","at"],function(){var f=(b[this]||"").split(" ");if(f.length===1)f=n.test(f[0])?f.concat(["center"]):o.test(f[0])?["center"].concat(f):["center","center"];f[0]=n.test(f[0])?f[0]:"center";f[1]=o.test(f[1])?f[1]:"center";b[this]=f});if(g.length===1)g[1]=g[0];e[0]=parseInt(e[0],10)||0;if(e.length===1)e[1]=e[0];e[1]=parseInt(e[1],10)||0;if(b.at[0]==="right")j.left+=h;else if(b.at[0]==="center")j.left+=h/2;if(b.at[1]==="bottom")j.top+=
-k;else if(b.at[1]==="center")j.top+=k/2;j.left+=e[0];j.top+=e[1];return this.each(function(){var f=c(this),l=f.outerWidth(),m=f.outerHeight(),p=parseInt(c.curCSS(this,"marginLeft",true))||0,q=parseInt(c.curCSS(this,"marginTop",true))||0,v=l+p+(parseInt(c.curCSS(this,"marginRight",true))||0),w=m+q+(parseInt(c.curCSS(this,"marginBottom",true))||0),i=c.extend({},j),r;if(b.my[0]==="right")i.left-=l;else if(b.my[0]==="center")i.left-=l/2;if(b.my[1]==="bottom")i.top-=m;else if(b.my[1]==="center")i.top-=
-m/2;i.left=Math.round(i.left);i.top=Math.round(i.top);r={left:i.left-p,top:i.top-q};c.each(["left","top"],function(s,x){c.ui.position[g[s]]&&c.ui.position[g[s]][x](i,{targetWidth:h,targetHeight:k,elemWidth:l,elemHeight:m,collisionPosition:r,collisionWidth:v,collisionHeight:w,offset:e,my:b.my,at:b.at})});c.fn.bgiframe&&f.bgiframe();f.offset(c.extend(i,{using:b.using}))})};c.ui.position={fit:{left:function(b,a){var d=c(window);d=a.collisionPosition.left+a.collisionWidth-d.width()-d.scrollLeft();b.left=
-d>0?b.left-d:Math.max(b.left-a.collisionPosition.left,b.left)},top:function(b,a){var d=c(window);d=a.collisionPosition.top+a.collisionHeight-d.height()-d.scrollTop();b.top=d>0?b.top-d:Math.max(b.top-a.collisionPosition.top,b.top)}},flip:{left:function(b,a){if(a.at[0]!=="center"){var d=c(window);d=a.collisionPosition.left+a.collisionWidth-d.width()-d.scrollLeft();var g=a.my[0]==="left"?-a.elemWidth:a.my[0]==="right"?a.elemWidth:0,e=a.at[0]==="left"?a.targetWidth:-a.targetWidth,h=-2*a.offset[0];b.left+=
-a.collisionPosition.left<0?g+e+h:d>0?g+e+h:0}},top:function(b,a){if(a.at[1]!=="center"){var d=c(window);d=a.collisionPosition.top+a.collisionHeight-d.height()-d.scrollTop();var g=a.my[1]==="top"?-a.elemHeight:a.my[1]==="bottom"?a.elemHeight:0,e=a.at[1]==="top"?a.targetHeight:-a.targetHeight,h=-2*a.offset[1];b.top+=a.collisionPosition.top<0?g+e+h:d>0?g+e+h:0}}}};if(!c.offset.setOffset){c.offset.setOffset=function(b,a){if(/static/.test(c.curCSS(b,"position")))b.style.position="relative";var d=c(b),
-g=d.offset(),e=parseInt(c.curCSS(b,"top",true),10)||0,h=parseInt(c.curCSS(b,"left",true),10)||0;g={top:a.top-g.top+e,left:a.left-g.left+h};"using"in a?a.using.call(b,g):d.css(g)};c.fn.offset=function(b){var a=this[0];if(!a||!a.ownerDocument)return null;if(b)return this.each(function(){c.offset.setOffset(this,b)});return u.call(this)}}})(jQuery);
-;/*
- * jQuery UI Draggable 1.8.14
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Draggables
- *
- * Depends:
- * jquery.ui.core.js
- * jquery.ui.mouse.js
- * jquery.ui.widget.js
- */
-(function(d){d.widget("ui.draggable",d.ui.mouse,{widgetEventPrefix:"drag",options:{addClasses:true,appendTo:"parent",axis:false,connectToSortable:false,containment:false,cursor:"auto",cursorAt:false,grid:false,handle:false,helper:"original",iframeFix:false,opacity:false,refreshPositions:false,revert:false,revertDuration:500,scope:"default",scroll:true,scrollSensitivity:20,scrollSpeed:20,snap:false,snapMode:"both",snapTolerance:20,stack:false,zIndex:false},_create:function(){if(this.options.helper==
-"original"&&!/^(?:r|a|f)/.test(this.element.css("position")))this.element[0].style.position="relative";this.options.addClasses&&this.element.addClass("ui-draggable");this.options.disabled&&this.element.addClass("ui-draggable-disabled");this._mouseInit()},destroy:function(){if(this.element.data("draggable")){this.element.removeData("draggable").unbind(".draggable").removeClass("ui-draggable ui-draggable-dragging ui-draggable-disabled");this._mouseDestroy();return this}},_mouseCapture:function(a){var b=
-this.options;if(this.helper||b.disabled||d(a.target).is(".ui-resizable-handle"))return false;this.handle=this._getHandle(a);if(!this.handle)return false;d(b.iframeFix===true?"iframe":b.iframeFix).each(function(){d('<div class="ui-draggable-iframeFix" style="background: #fff;"></div>').css({width:this.offsetWidth+"px",height:this.offsetHeight+"px",position:"absolute",opacity:"0.001",zIndex:1E3}).css(d(this).offset()).appendTo("body")});return true},_mouseStart:function(a){var b=this.options;this.helper=
-this._createHelper(a);this._cacheHelperProportions();if(d.ui.ddmanager)d.ui.ddmanager.current=this;this._cacheMargins();this.cssPosition=this.helper.css("position");this.scrollParent=this.helper.scrollParent();this.offset=this.positionAbs=this.element.offset();this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left};d.extend(this.offset,{click:{left:a.pageX-this.offset.left,top:a.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()});
-this.originalPosition=this.position=this._generatePosition(a);this.originalPageX=a.pageX;this.originalPageY=a.pageY;b.cursorAt&&this._adjustOffsetFromHelper(b.cursorAt);b.containment&&this._setContainment();if(this._trigger("start",a)===false){this._clear();return false}this._cacheHelperProportions();d.ui.ddmanager&&!b.dropBehaviour&&d.ui.ddmanager.prepareOffsets(this,a);this.helper.addClass("ui-draggable-dragging");this._mouseDrag(a,true);d.ui.ddmanager&&d.ui.ddmanager.dragStart(this,a);return true},
-_mouseDrag:function(a,b){this.position=this._generatePosition(a);this.positionAbs=this._convertPositionTo("absolute");if(!b){b=this._uiHash();if(this._trigger("drag",a,b)===false){this._mouseUp({});return false}this.position=b.position}if(!this.options.axis||this.options.axis!="y")this.helper[0].style.left=this.position.left+"px";if(!this.options.axis||this.options.axis!="x")this.helper[0].style.top=this.position.top+"px";d.ui.ddmanager&&d.ui.ddmanager.drag(this,a);return false},_mouseStop:function(a){var b=
-false;if(d.ui.ddmanager&&!this.options.dropBehaviour)b=d.ui.ddmanager.drop(this,a);if(this.dropped){b=this.dropped;this.dropped=false}if((!this.element[0]||!this.element[0].parentNode)&&this.options.helper=="original")return false;if(this.options.revert=="invalid"&&!b||this.options.revert=="valid"&&b||this.options.revert===true||d.isFunction(this.options.revert)&&this.options.revert.call(this.element,b)){var c=this;d(this.helper).animate(this.originalPosition,parseInt(this.options.revertDuration,
-10),function(){c._trigger("stop",a)!==false&&c._clear()})}else this._trigger("stop",a)!==false&&this._clear();return false},_mouseUp:function(a){this.options.iframeFix===true&&d("div.ui-draggable-iframeFix").each(function(){this.parentNode.removeChild(this)});d.ui.ddmanager&&d.ui.ddmanager.dragStop(this,a);return d.ui.mouse.prototype._mouseUp.call(this,a)},cancel:function(){this.helper.is(".ui-draggable-dragging")?this._mouseUp({}):this._clear();return this},_getHandle:function(a){var b=!this.options.handle||
-!d(this.options.handle,this.element).length?true:false;d(this.options.handle,this.element).find("*").andSelf().each(function(){if(this==a.target)b=true});return b},_createHelper:function(a){var b=this.options;a=d.isFunction(b.helper)?d(b.helper.apply(this.element[0],[a])):b.helper=="clone"?this.element.clone().removeAttr("id"):this.element;a.parents("body").length||a.appendTo(b.appendTo=="parent"?this.element[0].parentNode:b.appendTo);a[0]!=this.element[0]&&!/(fixed|absolute)/.test(a.css("position"))&&
-a.css("position","absolute");return a},_adjustOffsetFromHelper:function(a){if(typeof a=="string")a=a.split(" ");if(d.isArray(a))a={left:+a[0],top:+a[1]||0};if("left"in a)this.offset.click.left=a.left+this.margins.left;if("right"in a)this.offset.click.left=this.helperProportions.width-a.right+this.margins.left;if("top"in a)this.offset.click.top=a.top+this.margins.top;if("bottom"in a)this.offset.click.top=this.helperProportions.height-a.bottom+this.margins.top},_getParentOffset:function(){this.offsetParent=
-this.helper.offsetParent();var a=this.offsetParent.offset();if(this.cssPosition=="absolute"&&this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0],this.offsetParent[0])){a.left+=this.scrollParent.scrollLeft();a.top+=this.scrollParent.scrollTop()}if(this.offsetParent[0]==document.body||this.offsetParent[0].tagName&&this.offsetParent[0].tagName.toLowerCase()=="html"&&d.browser.msie)a={top:0,left:0};return{top:a.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:a.left+(parseInt(this.offsetParent.css("borderLeftWidth"),
-10)||0)}},_getRelativeOffset:function(){if(this.cssPosition=="relative"){var a=this.element.position();return{top:a.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:a.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}else return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.element.css("marginLeft"),10)||0,top:parseInt(this.element.css("marginTop"),10)||0,right:parseInt(this.element.css("marginRight"),10)||0,bottom:parseInt(this.element.css("marginBottom"),
-10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var a=this.options;if(a.containment=="parent")a.containment=this.helper[0].parentNode;if(a.containment=="document"||a.containment=="window")this.containment=[a.containment=="document"?0:d(window).scrollLeft()-this.offset.relative.left-this.offset.parent.left,a.containment=="document"?0:d(window).scrollTop()-this.offset.relative.top-this.offset.parent.top,
-(a.containment=="document"?0:d(window).scrollLeft())+d(a.containment=="document"?document:window).width()-this.helperProportions.width-this.margins.left,(a.containment=="document"?0:d(window).scrollTop())+(d(a.containment=="document"?document:window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top];if(!/^(document|window|parent)$/.test(a.containment)&&a.containment.constructor!=Array){a=d(a.containment);var b=a[0];if(b){a.offset();var c=d(b).css("overflow")!=
-"hidden";this.containment=[(parseInt(d(b).css("borderLeftWidth"),10)||0)+(parseInt(d(b).css("paddingLeft"),10)||0),(parseInt(d(b).css("borderTopWidth"),10)||0)+(parseInt(d(b).css("paddingTop"),10)||0),(c?Math.max(b.scrollWidth,b.offsetWidth):b.offsetWidth)-(parseInt(d(b).css("borderLeftWidth"),10)||0)-(parseInt(d(b).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left-this.margins.right,(c?Math.max(b.scrollHeight,b.offsetHeight):b.offsetHeight)-(parseInt(d(b).css("borderTopWidth"),
-10)||0)-(parseInt(d(b).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top-this.margins.bottom];this.relative_container=a}}else if(a.containment.constructor==Array)this.containment=a.containment},_convertPositionTo:function(a,b){if(!b)b=this.position;a=a=="absolute"?1:-1;var c=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,f=/(html|body)/i.test(c[0].tagName);return{top:b.top+
-this.offset.relative.top*a+this.offset.parent.top*a-(d.browser.safari&&d.browser.version<526&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollTop():f?0:c.scrollTop())*a),left:b.left+this.offset.relative.left*a+this.offset.parent.left*a-(d.browser.safari&&d.browser.version<526&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():f?0:c.scrollLeft())*a)}},_generatePosition:function(a){var b=this.options,c=this.cssPosition=="absolute"&&
-!(this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,f=/(html|body)/i.test(c[0].tagName),e=a.pageX,h=a.pageY;if(this.originalPosition){var g;if(this.containment){if(this.relative_container){g=this.relative_container.offset();g=[this.containment[0]+g.left,this.containment[1]+g.top,this.containment[2]+g.left,this.containment[3]+g.top]}else g=this.containment;if(a.pageX-this.offset.click.left<g[0])e=g[0]+this.offset.click.left;
-if(a.pageY-this.offset.click.top<g[1])h=g[1]+this.offset.click.top;if(a.pageX-this.offset.click.left>g[2])e=g[2]+this.offset.click.left;if(a.pageY-this.offset.click.top>g[3])h=g[3]+this.offset.click.top}if(b.grid){h=b.grid[1]?this.originalPageY+Math.round((h-this.originalPageY)/b.grid[1])*b.grid[1]:this.originalPageY;h=g?!(h-this.offset.click.top<g[1]||h-this.offset.click.top>g[3])?h:!(h-this.offset.click.top<g[1])?h-b.grid[1]:h+b.grid[1]:h;e=b.grid[0]?this.originalPageX+Math.round((e-this.originalPageX)/
-b.grid[0])*b.grid[0]:this.originalPageX;e=g?!(e-this.offset.click.left<g[0]||e-this.offset.click.left>g[2])?e:!(e-this.offset.click.left<g[0])?e-b.grid[0]:e+b.grid[0]:e}}return{top:h-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+(d.browser.safari&&d.browser.version<526&&this.cssPosition=="fixed"?0:this.cssPosition=="fixed"?-this.scrollParent.scrollTop():f?0:c.scrollTop()),left:e-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+(d.browser.safari&&d.browser.version<
-526&&this.cssPosition=="fixed"?0:this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():f?0:c.scrollLeft())}},_clear:function(){this.helper.removeClass("ui-draggable-dragging");this.helper[0]!=this.element[0]&&!this.cancelHelperRemoval&&this.helper.remove();this.helper=null;this.cancelHelperRemoval=false},_trigger:function(a,b,c){c=c||this._uiHash();d.ui.plugin.call(this,a,[b,c]);if(a=="drag")this.positionAbs=this._convertPositionTo("absolute");return d.Widget.prototype._trigger.call(this,a,b,
-c)},plugins:{},_uiHash:function(){return{helper:this.helper,position:this.position,originalPosition:this.originalPosition,offset:this.positionAbs}}});d.extend(d.ui.draggable,{version:"1.8.14"});d.ui.plugin.add("draggable","connectToSortable",{start:function(a,b){var c=d(this).data("draggable"),f=c.options,e=d.extend({},b,{item:c.element});c.sortables=[];d(f.connectToSortable).each(function(){var h=d.data(this,"sortable");if(h&&!h.options.disabled){c.sortables.push({instance:h,shouldRevert:h.options.revert});
-h.refreshPositions();h._trigger("activate",a,e)}})},stop:function(a,b){var c=d(this).data("draggable"),f=d.extend({},b,{item:c.element});d.each(c.sortables,function(){if(this.instance.isOver){this.instance.isOver=0;c.cancelHelperRemoval=true;this.instance.cancelHelperRemoval=false;if(this.shouldRevert)this.instance.options.revert=true;this.instance._mouseStop(a);this.instance.options.helper=this.instance.options._helper;c.options.helper=="original"&&this.instance.currentItem.css({top:"auto",left:"auto"})}else{this.instance.cancelHelperRemoval=
-false;this.instance._trigger("deactivate",a,f)}})},drag:function(a,b){var c=d(this).data("draggable"),f=this;d.each(c.sortables,function(){this.instance.positionAbs=c.positionAbs;this.instance.helperProportions=c.helperProportions;this.instance.offset.click=c.offset.click;if(this.instance._intersectsWith(this.instance.containerCache)){if(!this.instance.isOver){this.instance.isOver=1;this.instance.currentItem=d(f).clone().removeAttr("id").appendTo(this.instance.element).data("sortable-item",true);
-this.instance.options._helper=this.instance.options.helper;this.instance.options.helper=function(){return b.helper[0]};a.target=this.instance.currentItem[0];this.instance._mouseCapture(a,true);this.instance._mouseStart(a,true,true);this.instance.offset.click.top=c.offset.click.top;this.instance.offset.click.left=c.offset.click.left;this.instance.offset.parent.left-=c.offset.parent.left-this.instance.offset.parent.left;this.instance.offset.parent.top-=c.offset.parent.top-this.instance.offset.parent.top;
-c._trigger("toSortable",a);c.dropped=this.instance.element;c.currentItem=c.element;this.instance.fromOutside=c}this.instance.currentItem&&this.instance._mouseDrag(a)}else if(this.instance.isOver){this.instance.isOver=0;this.instance.cancelHelperRemoval=true;this.instance.options.revert=false;this.instance._trigger("out",a,this.instance._uiHash(this.instance));this.instance._mouseStop(a,true);this.instance.options.helper=this.instance.options._helper;this.instance.currentItem.remove();this.instance.placeholder&&
-this.instance.placeholder.remove();c._trigger("fromSortable",a);c.dropped=false}})}});d.ui.plugin.add("draggable","cursor",{start:function(){var a=d("body"),b=d(this).data("draggable").options;if(a.css("cursor"))b._cursor=a.css("cursor");a.css("cursor",b.cursor)},stop:function(){var a=d(this).data("draggable").options;a._cursor&&d("body").css("cursor",a._cursor)}});d.ui.plugin.add("draggable","opacity",{start:function(a,b){a=d(b.helper);b=d(this).data("draggable").options;if(a.css("opacity"))b._opacity=
-a.css("opacity");a.css("opacity",b.opacity)},stop:function(a,b){a=d(this).data("draggable").options;a._opacity&&d(b.helper).css("opacity",a._opacity)}});d.ui.plugin.add("draggable","scroll",{start:function(){var a=d(this).data("draggable");if(a.scrollParent[0]!=document&&a.scrollParent[0].tagName!="HTML")a.overflowOffset=a.scrollParent.offset()},drag:function(a){var b=d(this).data("draggable"),c=b.options,f=false;if(b.scrollParent[0]!=document&&b.scrollParent[0].tagName!="HTML"){if(!c.axis||c.axis!=
-"x")if(b.overflowOffset.top+b.scrollParent[0].offsetHeight-a.pageY<c.scrollSensitivity)b.scrollParent[0].scrollTop=f=b.scrollParent[0].scrollTop+c.scrollSpeed;else if(a.pageY-b.overflowOffset.top<c.scrollSensitivity)b.scrollParent[0].scrollTop=f=b.scrollParent[0].scrollTop-c.scrollSpeed;if(!c.axis||c.axis!="y")if(b.overflowOffset.left+b.scrollParent[0].offsetWidth-a.pageX<c.scrollSensitivity)b.scrollParent[0].scrollLeft=f=b.scrollParent[0].scrollLeft+c.scrollSpeed;else if(a.pageX-b.overflowOffset.left<
-c.scrollSensitivity)b.scrollParent[0].scrollLeft=f=b.scrollParent[0].scrollLeft-c.scrollSpeed}else{if(!c.axis||c.axis!="x")if(a.pageY-d(document).scrollTop()<c.scrollSensitivity)f=d(document).scrollTop(d(document).scrollTop()-c.scrollSpeed);else if(d(window).height()-(a.pageY-d(document).scrollTop())<c.scrollSensitivity)f=d(document).scrollTop(d(document).scrollTop()+c.scrollSpeed);if(!c.axis||c.axis!="y")if(a.pageX-d(document).scrollLeft()<c.scrollSensitivity)f=d(document).scrollLeft(d(document).scrollLeft()-
-c.scrollSpeed);else if(d(window).width()-(a.pageX-d(document).scrollLeft())<c.scrollSensitivity)f=d(document).scrollLeft(d(document).scrollLeft()+c.scrollSpeed)}f!==false&&d.ui.ddmanager&&!c.dropBehaviour&&d.ui.ddmanager.prepareOffsets(b,a)}});d.ui.plugin.add("draggable","snap",{start:function(){var a=d(this).data("draggable"),b=a.options;a.snapElements=[];d(b.snap.constructor!=String?b.snap.items||":data(draggable)":b.snap).each(function(){var c=d(this),f=c.offset();this!=a.element[0]&&a.snapElements.push({item:this,
-width:c.outerWidth(),height:c.outerHeight(),top:f.top,left:f.left})})},drag:function(a,b){for(var c=d(this).data("draggable"),f=c.options,e=f.snapTolerance,h=b.offset.left,g=h+c.helperProportions.width,n=b.offset.top,o=n+c.helperProportions.height,i=c.snapElements.length-1;i>=0;i--){var j=c.snapElements[i].left,l=j+c.snapElements[i].width,k=c.snapElements[i].top,m=k+c.snapElements[i].height;if(j-e<h&&h<l+e&&k-e<n&&n<m+e||j-e<h&&h<l+e&&k-e<o&&o<m+e||j-e<g&&g<l+e&&k-e<n&&n<m+e||j-e<g&&g<l+e&&k-e<o&&
-o<m+e){if(f.snapMode!="inner"){var p=Math.abs(k-o)<=e,q=Math.abs(m-n)<=e,r=Math.abs(j-g)<=e,s=Math.abs(l-h)<=e;if(p)b.position.top=c._convertPositionTo("relative",{top:k-c.helperProportions.height,left:0}).top-c.margins.top;if(q)b.position.top=c._convertPositionTo("relative",{top:m,left:0}).top-c.margins.top;if(r)b.position.left=c._convertPositionTo("relative",{top:0,left:j-c.helperProportions.width}).left-c.margins.left;if(s)b.position.left=c._convertPositionTo("relative",{top:0,left:l}).left-c.margins.left}var t=
-p||q||r||s;if(f.snapMode!="outer"){p=Math.abs(k-n)<=e;q=Math.abs(m-o)<=e;r=Math.abs(j-h)<=e;s=Math.abs(l-g)<=e;if(p)b.position.top=c._convertPositionTo("relative",{top:k,left:0}).top-c.margins.top;if(q)b.position.top=c._convertPositionTo("relative",{top:m-c.helperProportions.height,left:0}).top-c.margins.top;if(r)b.position.left=c._convertPositionTo("relative",{top:0,left:j}).left-c.margins.left;if(s)b.position.left=c._convertPositionTo("relative",{top:0,left:l-c.helperProportions.width}).left-c.margins.left}if(!c.snapElements[i].snapping&&
-(p||q||r||s||t))c.options.snap.snap&&c.options.snap.snap.call(c.element,a,d.extend(c._uiHash(),{snapItem:c.snapElements[i].item}));c.snapElements[i].snapping=p||q||r||s||t}else{c.snapElements[i].snapping&&c.options.snap.release&&c.options.snap.release.call(c.element,a,d.extend(c._uiHash(),{snapItem:c.snapElements[i].item}));c.snapElements[i].snapping=false}}}});d.ui.plugin.add("draggable","stack",{start:function(){var a=d(this).data("draggable").options;a=d.makeArray(d(a.stack)).sort(function(c,f){return(parseInt(d(c).css("zIndex"),
-10)||0)-(parseInt(d(f).css("zIndex"),10)||0)});if(a.length){var b=parseInt(a[0].style.zIndex)||0;d(a).each(function(c){this.style.zIndex=b+c});this[0].style.zIndex=b+a.length}}});d.ui.plugin.add("draggable","zIndex",{start:function(a,b){a=d(b.helper);b=d(this).data("draggable").options;if(a.css("zIndex"))b._zIndex=a.css("zIndex");a.css("zIndex",b.zIndex)},stop:function(a,b){a=d(this).data("draggable").options;a._zIndex&&d(b.helper).css("zIndex",a._zIndex)}})})(jQuery);
-;/*
- * jQuery UI Droppable 1.8.14
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Droppables
- *
- * Depends:
- * jquery.ui.core.js
- * jquery.ui.widget.js
- * jquery.ui.mouse.js
- * jquery.ui.draggable.js
- */
-(function(d){d.widget("ui.droppable",{widgetEventPrefix:"drop",options:{accept:"*",activeClass:false,addClasses:true,greedy:false,hoverClass:false,scope:"default",tolerance:"intersect"},_create:function(){var a=this.options,b=a.accept;this.isover=0;this.isout=1;this.accept=d.isFunction(b)?b:function(c){return c.is(b)};this.proportions={width:this.element[0].offsetWidth,height:this.element[0].offsetHeight};d.ui.ddmanager.droppables[a.scope]=d.ui.ddmanager.droppables[a.scope]||[];d.ui.ddmanager.droppables[a.scope].push(this);
-a.addClasses&&this.element.addClass("ui-droppable")},destroy:function(){for(var a=d.ui.ddmanager.droppables[this.options.scope],b=0;b<a.length;b++)a[b]==this&&a.splice(b,1);this.element.removeClass("ui-droppable ui-droppable-disabled").removeData("droppable").unbind(".droppable");return this},_setOption:function(a,b){if(a=="accept")this.accept=d.isFunction(b)?b:function(c){return c.is(b)};d.Widget.prototype._setOption.apply(this,arguments)},_activate:function(a){var b=d.ui.ddmanager.current;this.options.activeClass&&
-this.element.addClass(this.options.activeClass);b&&this._trigger("activate",a,this.ui(b))},_deactivate:function(a){var b=d.ui.ddmanager.current;this.options.activeClass&&this.element.removeClass(this.options.activeClass);b&&this._trigger("deactivate",a,this.ui(b))},_over:function(a){var b=d.ui.ddmanager.current;if(!(!b||(b.currentItem||b.element)[0]==this.element[0]))if(this.accept.call(this.element[0],b.currentItem||b.element)){this.options.hoverClass&&this.element.addClass(this.options.hoverClass);
-this._trigger("over",a,this.ui(b))}},_out:function(a){var b=d.ui.ddmanager.current;if(!(!b||(b.currentItem||b.element)[0]==this.element[0]))if(this.accept.call(this.element[0],b.currentItem||b.element)){this.options.hoverClass&&this.element.removeClass(this.options.hoverClass);this._trigger("out",a,this.ui(b))}},_drop:function(a,b){var c=b||d.ui.ddmanager.current;if(!c||(c.currentItem||c.element)[0]==this.element[0])return false;var e=false;this.element.find(":data(droppable)").not(".ui-draggable-dragging").each(function(){var g=
-d.data(this,"droppable");if(g.options.greedy&&!g.options.disabled&&g.options.scope==c.options.scope&&g.accept.call(g.element[0],c.currentItem||c.element)&&d.ui.intersect(c,d.extend(g,{offset:g.element.offset()}),g.options.tolerance)){e=true;return false}});if(e)return false;if(this.accept.call(this.element[0],c.currentItem||c.element)){this.options.activeClass&&this.element.removeClass(this.options.activeClass);this.options.hoverClass&&this.element.removeClass(this.options.hoverClass);this._trigger("drop",
-a,this.ui(c));return this.element}return false},ui:function(a){return{draggable:a.currentItem||a.element,helper:a.helper,position:a.position,offset:a.positionAbs}}});d.extend(d.ui.droppable,{version:"1.8.14"});d.ui.intersect=function(a,b,c){if(!b.offset)return false;var e=(a.positionAbs||a.position.absolute).left,g=e+a.helperProportions.width,f=(a.positionAbs||a.position.absolute).top,h=f+a.helperProportions.height,i=b.offset.left,k=i+b.proportions.width,j=b.offset.top,l=j+b.proportions.height;
-switch(c){case "fit":return i<=e&&g<=k&&j<=f&&h<=l;case "intersect":return i<e+a.helperProportions.width/2&&g-a.helperProportions.width/2<k&&j<f+a.helperProportions.height/2&&h-a.helperProportions.height/2<l;case "pointer":return d.ui.isOver((a.positionAbs||a.position.absolute).top+(a.clickOffset||a.offset.click).top,(a.positionAbs||a.position.absolute).left+(a.clickOffset||a.offset.click).left,j,i,b.proportions.height,b.proportions.width);case "touch":return(f>=j&&f<=l||h>=j&&h<=l||f<j&&h>l)&&(e>=
-i&&e<=k||g>=i&&g<=k||e<i&&g>k);default:return false}};d.ui.ddmanager={current:null,droppables:{"default":[]},prepareOffsets:function(a,b){var c=d.ui.ddmanager.droppables[a.options.scope]||[],e=b?b.type:null,g=(a.currentItem||a.element).find(":data(droppable)").andSelf(),f=0;a:for(;f<c.length;f++)if(!(c[f].options.disabled||a&&!c[f].accept.call(c[f].element[0],a.currentItem||a.element))){for(var h=0;h<g.length;h++)if(g[h]==c[f].element[0]){c[f].proportions.height=0;continue a}c[f].visible=c[f].element.css("display")!=
-"none";if(c[f].visible){e=="mousedown"&&c[f]._activate.call(c[f],b);c[f].offset=c[f].element.offset();c[f].proportions={width:c[f].element[0].offsetWidth,height:c[f].element[0].offsetHeight}}}},drop:function(a,b){var c=false;d.each(d.ui.ddmanager.droppables[a.options.scope]||[],function(){if(this.options){if(!this.options.disabled&&this.visible&&d.ui.intersect(a,this,this.options.tolerance))c=c||this._drop.call(this,b);if(!this.options.disabled&&this.visible&&this.accept.call(this.element[0],a.currentItem||
-a.element)){this.isout=1;this.isover=0;this._deactivate.call(this,b)}}});return c},dragStart:function(a,b){a.element.parentsUntil("body").bind("scroll.droppable",function(){a.options.refreshPositions||d.ui.ddmanager.prepareOffsets(a,b)})},drag:function(a,b){a.options.refreshPositions&&d.ui.ddmanager.prepareOffsets(a,b);d.each(d.ui.ddmanager.droppables[a.options.scope]||[],function(){if(!(this.options.disabled||this.greedyChild||!this.visible)){var c=d.ui.intersect(a,this,this.options.tolerance);if(c=
-!c&&this.isover==1?"isout":c&&this.isover==0?"isover":null){var e;if(this.options.greedy){var g=this.element.parents(":data(droppable):eq(0)");if(g.length){e=d.data(g[0],"droppable");e.greedyChild=c=="isover"?1:0}}if(e&&c=="isover"){e.isover=0;e.isout=1;e._out.call(e,b)}this[c]=1;this[c=="isout"?"isover":"isout"]=0;this[c=="isover"?"_over":"_out"].call(this,b);if(e&&c=="isout"){e.isout=0;e.isover=1;e._over.call(e,b)}}}})},dragStop:function(a,b){a.element.parentsUntil("body").unbind("scroll.droppable");
-a.options.refreshPositions||d.ui.ddmanager.prepareOffsets(a,b)}}})(jQuery);
-;/*
- * jQuery UI Resizable 1.8.14
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Resizables
- *
- * Depends:
- * jquery.ui.core.js
- * jquery.ui.mouse.js
- * jquery.ui.widget.js
- */
-(function(e){e.widget("ui.resizable",e.ui.mouse,{widgetEventPrefix:"resize",options:{alsoResize:false,animate:false,animateDuration:"slow",animateEasing:"swing",aspectRatio:false,autoHide:false,containment:false,ghost:false,grid:false,handles:"e,s,se",helper:false,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:1E3},_create:function(){var b=this,a=this.options;this.element.addClass("ui-resizable");e.extend(this,{_aspectRatio:!!a.aspectRatio,aspectRatio:a.aspectRatio,originalElement:this.element,
-_proportionallyResizeElements:[],_helper:a.helper||a.ghost||a.animate?a.helper||"ui-resizable-helper":null});if(this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)){/relative/.test(this.element.css("position"))&&e.browser.opera&&this.element.css({position:"relative",top:"auto",left:"auto"});this.element.wrap(e('<div class="ui-wrapper" style="overflow: hidden;"></div>').css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),
-top:this.element.css("top"),left:this.element.css("left")}));this.element=this.element.parent().data("resizable",this.element.data("resizable"));this.elementIsWrapper=true;this.element.css({marginLeft:this.originalElement.css("marginLeft"),marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom")});this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0});this.originalResizeStyle=
-this.originalElement.css("resize");this.originalElement.css("resize","none");this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"}));this.originalElement.css({margin:this.originalElement.css("margin")});this._proportionallyResize()}this.handles=a.handles||(!e(".ui-resizable-handle",this.element).length?"e,s,se":{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",
-nw:".ui-resizable-nw"});if(this.handles.constructor==String){if(this.handles=="all")this.handles="n,e,s,w,se,sw,ne,nw";var c=this.handles.split(",");this.handles={};for(var d=0;d<c.length;d++){var f=e.trim(c[d]),g=e('<div class="ui-resizable-handle '+("ui-resizable-"+f)+'"></div>');/sw|se|ne|nw/.test(f)&&g.css({zIndex:++a.zIndex});"se"==f&&g.addClass("ui-icon ui-icon-gripsmall-diagonal-se");this.handles[f]=".ui-resizable-"+f;this.element.append(g)}}this._renderAxis=function(h){h=h||this.element;for(var i in this.handles){if(this.handles[i].constructor==
-String)this.handles[i]=e(this.handles[i],this.element).show();if(this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)){var j=e(this.handles[i],this.element),l=0;l=/sw|ne|nw|se|n|s/.test(i)?j.outerHeight():j.outerWidth();j=["padding",/ne|nw|n/.test(i)?"Top":/se|sw|s/.test(i)?"Bottom":/^e$/.test(i)?"Right":"Left"].join("");h.css(j,l);this._proportionallyResize()}e(this.handles[i])}};this._renderAxis(this.element);this._handles=e(".ui-resizable-handle",this.element).disableSelection();
-this._handles.mouseover(function(){if(!b.resizing){if(this.className)var h=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i);b.axis=h&&h[1]?h[1]:"se"}});if(a.autoHide){this._handles.hide();e(this.element).addClass("ui-resizable-autohide").hover(function(){if(!a.disabled){e(this).removeClass("ui-resizable-autohide");b._handles.show()}},function(){if(!a.disabled)if(!b.resizing){e(this).addClass("ui-resizable-autohide");b._handles.hide()}})}this._mouseInit()},destroy:function(){this._mouseDestroy();
-var b=function(c){e(c).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").unbind(".resizable").find(".ui-resizable-handle").remove()};if(this.elementIsWrapper){b(this.element);var a=this.element;a.after(this.originalElement.css({position:a.css("position"),width:a.outerWidth(),height:a.outerHeight(),top:a.css("top"),left:a.css("left")})).remove()}this.originalElement.css("resize",this.originalResizeStyle);b(this.originalElement);return this},_mouseCapture:function(b){var a=
-false;for(var c in this.handles)if(e(this.handles[c])[0]==b.target)a=true;return!this.options.disabled&&a},_mouseStart:function(b){var a=this.options,c=this.element.position(),d=this.element;this.resizing=true;this.documentScroll={top:e(document).scrollTop(),left:e(document).scrollLeft()};if(d.is(".ui-draggable")||/absolute/.test(d.css("position")))d.css({position:"absolute",top:c.top,left:c.left});e.browser.opera&&/relative/.test(d.css("position"))&&d.css({position:"relative",top:"auto",left:"auto"});
-this._renderProxy();c=m(this.helper.css("left"));var f=m(this.helper.css("top"));if(a.containment){c+=e(a.containment).scrollLeft()||0;f+=e(a.containment).scrollTop()||0}this.offset=this.helper.offset();this.position={left:c,top:f};this.size=this._helper?{width:d.outerWidth(),height:d.outerHeight()}:{width:d.width(),height:d.height()};this.originalSize=this._helper?{width:d.outerWidth(),height:d.outerHeight()}:{width:d.width(),height:d.height()};this.originalPosition={left:c,top:f};this.sizeDiff=
-{width:d.outerWidth()-d.width(),height:d.outerHeight()-d.height()};this.originalMousePosition={left:b.pageX,top:b.pageY};this.aspectRatio=typeof a.aspectRatio=="number"?a.aspectRatio:this.originalSize.width/this.originalSize.height||1;a=e(".ui-resizable-"+this.axis).css("cursor");e("body").css("cursor",a=="auto"?this.axis+"-resize":a);d.addClass("ui-resizable-resizing");this._propagate("start",b);return true},_mouseDrag:function(b){var a=this.helper,c=this.originalMousePosition,d=this._change[this.axis];
-if(!d)return false;c=d.apply(this,[b,b.pageX-c.left||0,b.pageY-c.top||0]);this._updateVirtualBoundaries(b.shiftKey);if(this._aspectRatio||b.shiftKey)c=this._updateRatio(c,b);c=this._respectSize(c,b);this._propagate("resize",b);a.css({top:this.position.top+"px",left:this.position.left+"px",width:this.size.width+"px",height:this.size.height+"px"});!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize();this._updateCache(c);this._trigger("resize",b,this.ui());return false},
-_mouseStop:function(b){this.resizing=false;var a=this.options,c=this;if(this._helper){var d=this._proportionallyResizeElements,f=d.length&&/textarea/i.test(d[0].nodeName);d=f&&e.ui.hasScroll(d[0],"left")?0:c.sizeDiff.height;f=f?0:c.sizeDiff.width;f={width:c.helper.width()-f,height:c.helper.height()-d};d=parseInt(c.element.css("left"),10)+(c.position.left-c.originalPosition.left)||null;var g=parseInt(c.element.css("top"),10)+(c.position.top-c.originalPosition.top)||null;a.animate||this.element.css(e.extend(f,
-{top:g,left:d}));c.helper.height(c.size.height);c.helper.width(c.size.width);this._helper&&!a.animate&&this._proportionallyResize()}e("body").css("cursor","auto");this.element.removeClass("ui-resizable-resizing");this._propagate("stop",b);this._helper&&this.helper.remove();return false},_updateVirtualBoundaries:function(b){var a=this.options,c,d,f;a={minWidth:k(a.minWidth)?a.minWidth:0,maxWidth:k(a.maxWidth)?a.maxWidth:Infinity,minHeight:k(a.minHeight)?a.minHeight:0,maxHeight:k(a.maxHeight)?a.maxHeight:
-Infinity};if(this._aspectRatio||b){b=a.minHeight*this.aspectRatio;d=a.minWidth/this.aspectRatio;c=a.maxHeight*this.aspectRatio;f=a.maxWidth/this.aspectRatio;if(b>a.minWidth)a.minWidth=b;if(d>a.minHeight)a.minHeight=d;if(c<a.maxWidth)a.maxWidth=c;if(f<a.maxHeight)a.maxHeight=f}this._vBoundaries=a},_updateCache:function(b){this.offset=this.helper.offset();if(k(b.left))this.position.left=b.left;if(k(b.top))this.position.top=b.top;if(k(b.height))this.size.height=b.height;if(k(b.width))this.size.width=
-b.width},_updateRatio:function(b){var a=this.position,c=this.size,d=this.axis;if(k(b.height))b.width=b.height*this.aspectRatio;else if(k(b.width))b.height=b.width/this.aspectRatio;if(d=="sw"){b.left=a.left+(c.width-b.width);b.top=null}if(d=="nw"){b.top=a.top+(c.height-b.height);b.left=a.left+(c.width-b.width)}return b},_respectSize:function(b){var a=this._vBoundaries,c=this.axis,d=k(b.width)&&a.maxWidth&&a.maxWidth<b.width,f=k(b.height)&&a.maxHeight&&a.maxHeight<b.height,g=k(b.width)&&a.minWidth&&
-a.minWidth>b.width,h=k(b.height)&&a.minHeight&&a.minHeight>b.height;if(g)b.width=a.minWidth;if(h)b.height=a.minHeight;if(d)b.width=a.maxWidth;if(f)b.height=a.maxHeight;var i=this.originalPosition.left+this.originalSize.width,j=this.position.top+this.size.height,l=/sw|nw|w/.test(c);c=/nw|ne|n/.test(c);if(g&&l)b.left=i-a.minWidth;if(d&&l)b.left=i-a.maxWidth;if(h&&c)b.top=j-a.minHeight;if(f&&c)b.top=j-a.maxHeight;if((a=!b.width&&!b.height)&&!b.left&&b.top)b.top=null;else if(a&&!b.top&&b.left)b.left=
-null;return b},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var b=this.helper||this.element,a=0;a<this._proportionallyResizeElements.length;a++){var c=this._proportionallyResizeElements[a];if(!this.borderDif){var d=[c.css("borderTopWidth"),c.css("borderRightWidth"),c.css("borderBottomWidth"),c.css("borderLeftWidth")],f=[c.css("paddingTop"),c.css("paddingRight"),c.css("paddingBottom"),c.css("paddingLeft")];this.borderDif=e.map(d,function(g,h){g=parseInt(g,10)||
-0;h=parseInt(f[h],10)||0;return g+h})}e.browser.msie&&(e(b).is(":hidden")||e(b).parents(":hidden").length)||c.css({height:b.height()-this.borderDif[0]-this.borderDif[2]||0,width:b.width()-this.borderDif[1]-this.borderDif[3]||0})}},_renderProxy:function(){var b=this.options;this.elementOffset=this.element.offset();if(this._helper){this.helper=this.helper||e('<div style="overflow:hidden;"></div>');var a=e.browser.msie&&e.browser.version<7,c=a?1:0;a=a?2:-1;this.helper.addClass(this._helper).css({width:this.element.outerWidth()+
-a,height:this.element.outerHeight()+a,position:"absolute",left:this.elementOffset.left-c+"px",top:this.elementOffset.top-c+"px",zIndex:++b.zIndex});this.helper.appendTo("body").disableSelection()}else this.helper=this.element},_change:{e:function(b,a){return{width:this.originalSize.width+a}},w:function(b,a){return{left:this.originalPosition.left+a,width:this.originalSize.width-a}},n:function(b,a,c){return{top:this.originalPosition.top+c,height:this.originalSize.height-c}},s:function(b,a,c){return{height:this.originalSize.height+
-c}},se:function(b,a,c){return e.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[b,a,c]))},sw:function(b,a,c){return e.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[b,a,c]))},ne:function(b,a,c){return e.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[b,a,c]))},nw:function(b,a,c){return e.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[b,a,c]))}},_propagate:function(b,a){e.ui.plugin.call(this,b,[a,this.ui()]);
-b!="resize"&&this._trigger(b,a,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}});e.extend(e.ui.resizable,{version:"1.8.14"});e.ui.plugin.add("resizable","alsoResize",{start:function(){var b=e(this).data("resizable").options,a=function(c){e(c).each(function(){var d=e(this);d.data("resizable-alsoresize",{width:parseInt(d.width(),
-10),height:parseInt(d.height(),10),left:parseInt(d.css("left"),10),top:parseInt(d.css("top"),10),position:d.css("position")})})};if(typeof b.alsoResize=="object"&&!b.alsoResize.parentNode)if(b.alsoResize.length){b.alsoResize=b.alsoResize[0];a(b.alsoResize)}else e.each(b.alsoResize,function(c){a(c)});else a(b.alsoResize)},resize:function(b,a){var c=e(this).data("resizable");b=c.options;var d=c.originalSize,f=c.originalPosition,g={height:c.size.height-d.height||0,width:c.size.width-d.width||0,top:c.position.top-
-f.top||0,left:c.position.left-f.left||0},h=function(i,j){e(i).each(function(){var l=e(this),q=e(this).data("resizable-alsoresize"),p={},r=j&&j.length?j:l.parents(a.originalElement[0]).length?["width","height"]:["width","height","top","left"];e.each(r,function(n,o){if((n=(q[o]||0)+(g[o]||0))&&n>=0)p[o]=n||null});if(e.browser.opera&&/relative/.test(l.css("position"))){c._revertToRelativePosition=true;l.css({position:"absolute",top:"auto",left:"auto"})}l.css(p)})};typeof b.alsoResize=="object"&&!b.alsoResize.nodeType?
-e.each(b.alsoResize,function(i,j){h(i,j)}):h(b.alsoResize)},stop:function(){var b=e(this).data("resizable"),a=b.options,c=function(d){e(d).each(function(){var f=e(this);f.css({position:f.data("resizable-alsoresize").position})})};if(b._revertToRelativePosition){b._revertToRelativePosition=false;typeof a.alsoResize=="object"&&!a.alsoResize.nodeType?e.each(a.alsoResize,function(d){c(d)}):c(a.alsoResize)}e(this).removeData("resizable-alsoresize")}});e.ui.plugin.add("resizable","animate",{stop:function(b){var a=
-e(this).data("resizable"),c=a.options,d=a._proportionallyResizeElements,f=d.length&&/textarea/i.test(d[0].nodeName),g=f&&e.ui.hasScroll(d[0],"left")?0:a.sizeDiff.height;f={width:a.size.width-(f?0:a.sizeDiff.width),height:a.size.height-g};g=parseInt(a.element.css("left"),10)+(a.position.left-a.originalPosition.left)||null;var h=parseInt(a.element.css("top"),10)+(a.position.top-a.originalPosition.top)||null;a.element.animate(e.extend(f,h&&g?{top:h,left:g}:{}),{duration:c.animateDuration,easing:c.animateEasing,
-step:function(){var i={width:parseInt(a.element.css("width"),10),height:parseInt(a.element.css("height"),10),top:parseInt(a.element.css("top"),10),left:parseInt(a.element.css("left"),10)};d&&d.length&&e(d[0]).css({width:i.width,height:i.height});a._updateCache(i);a._propagate("resize",b)}})}});e.ui.plugin.add("resizable","containment",{start:function(){var b=e(this).data("resizable"),a=b.element,c=b.options.containment;if(a=c instanceof e?c.get(0):/parent/.test(c)?a.parent().get(0):c){b.containerElement=
-e(a);if(/document/.test(c)||c==document){b.containerOffset={left:0,top:0};b.containerPosition={left:0,top:0};b.parentData={element:e(document),left:0,top:0,width:e(document).width(),height:e(document).height()||document.body.parentNode.scrollHeight}}else{var d=e(a),f=[];e(["Top","Right","Left","Bottom"]).each(function(i,j){f[i]=m(d.css("padding"+j))});b.containerOffset=d.offset();b.containerPosition=d.position();b.containerSize={height:d.innerHeight()-f[3],width:d.innerWidth()-f[1]};c=b.containerOffset;
-var g=b.containerSize.height,h=b.containerSize.width;h=e.ui.hasScroll(a,"left")?a.scrollWidth:h;g=e.ui.hasScroll(a)?a.scrollHeight:g;b.parentData={element:a,left:c.left,top:c.top,width:h,height:g}}}},resize:function(b){var a=e(this).data("resizable"),c=a.options,d=a.containerOffset,f=a.position;b=a._aspectRatio||b.shiftKey;var g={top:0,left:0},h=a.containerElement;if(h[0]!=document&&/static/.test(h.css("position")))g=d;if(f.left<(a._helper?d.left:0)){a.size.width+=a._helper?a.position.left-d.left:
-a.position.left-g.left;if(b)a.size.height=a.size.width/c.aspectRatio;a.position.left=c.helper?d.left:0}if(f.top<(a._helper?d.top:0)){a.size.height+=a._helper?a.position.top-d.top:a.position.top;if(b)a.size.width=a.size.height*c.aspectRatio;a.position.top=a._helper?d.top:0}a.offset.left=a.parentData.left+a.position.left;a.offset.top=a.parentData.top+a.position.top;c=Math.abs((a._helper?a.offset.left-g.left:a.offset.left-g.left)+a.sizeDiff.width);d=Math.abs((a._helper?a.offset.top-g.top:a.offset.top-
-d.top)+a.sizeDiff.height);f=a.containerElement.get(0)==a.element.parent().get(0);g=/relative|absolute/.test(a.containerElement.css("position"));if(f&&g)c-=a.parentData.left;if(c+a.size.width>=a.parentData.width){a.size.width=a.parentData.width-c;if(b)a.size.height=a.size.width/a.aspectRatio}if(d+a.size.height>=a.parentData.height){a.size.height=a.parentData.height-d;if(b)a.size.width=a.size.height*a.aspectRatio}},stop:function(){var b=e(this).data("resizable"),a=b.options,c=b.containerOffset,d=b.containerPosition,
-f=b.containerElement,g=e(b.helper),h=g.offset(),i=g.outerWidth()-b.sizeDiff.width;g=g.outerHeight()-b.sizeDiff.height;b._helper&&!a.animate&&/relative/.test(f.css("position"))&&e(this).css({left:h.left-d.left-c.left,width:i,height:g});b._helper&&!a.animate&&/static/.test(f.css("position"))&&e(this).css({left:h.left-d.left-c.left,width:i,height:g})}});e.ui.plugin.add("resizable","ghost",{start:function(){var b=e(this).data("resizable"),a=b.options,c=b.size;b.ghost=b.originalElement.clone();b.ghost.css({opacity:0.25,
-display:"block",position:"relative",height:c.height,width:c.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass(typeof a.ghost=="string"?a.ghost:"");b.ghost.appendTo(b.helper)},resize:function(){var b=e(this).data("resizable");b.ghost&&b.ghost.css({position:"relative",height:b.size.height,width:b.size.width})},stop:function(){var b=e(this).data("resizable");b.ghost&&b.helper&&b.helper.get(0).removeChild(b.ghost.get(0))}});e.ui.plugin.add("resizable","grid",{resize:function(){var b=
-e(this).data("resizable"),a=b.options,c=b.size,d=b.originalSize,f=b.originalPosition,g=b.axis;a.grid=typeof a.grid=="number"?[a.grid,a.grid]:a.grid;var h=Math.round((c.width-d.width)/(a.grid[0]||1))*(a.grid[0]||1);a=Math.round((c.height-d.height)/(a.grid[1]||1))*(a.grid[1]||1);if(/^(se|s|e)$/.test(g)){b.size.width=d.width+h;b.size.height=d.height+a}else if(/^(ne)$/.test(g)){b.size.width=d.width+h;b.size.height=d.height+a;b.position.top=f.top-a}else{if(/^(sw)$/.test(g)){b.size.width=d.width+h;b.size.height=
-d.height+a}else{b.size.width=d.width+h;b.size.height=d.height+a;b.position.top=f.top-a}b.position.left=f.left-h}}});var m=function(b){return parseInt(b,10)||0},k=function(b){return!isNaN(parseInt(b,10))}})(jQuery);
-;/*
- * jQuery UI Selectable 1.8.14
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Selectables
- *
- * Depends:
- * jquery.ui.core.js
- * jquery.ui.mouse.js
- * jquery.ui.widget.js
- */
-(function(e){e.widget("ui.selectable",e.ui.mouse,{options:{appendTo:"body",autoRefresh:true,distance:0,filter:"*",tolerance:"touch"},_create:function(){var c=this;this.element.addClass("ui-selectable");this.dragged=false;var f;this.refresh=function(){f=e(c.options.filter,c.element[0]);f.each(function(){var d=e(this),b=d.offset();e.data(this,"selectable-item",{element:this,$element:d,left:b.left,top:b.top,right:b.left+d.outerWidth(),bottom:b.top+d.outerHeight(),startselected:false,selected:d.hasClass("ui-selected"),
-selecting:d.hasClass("ui-selecting"),unselecting:d.hasClass("ui-unselecting")})})};this.refresh();this.selectees=f.addClass("ui-selectee");this._mouseInit();this.helper=e("<div class='ui-selectable-helper'></div>")},destroy:function(){this.selectees.removeClass("ui-selectee").removeData("selectable-item");this.element.removeClass("ui-selectable ui-selectable-disabled").removeData("selectable").unbind(".selectable");this._mouseDestroy();return this},_mouseStart:function(c){var f=this;this.opos=[c.pageX,
-c.pageY];if(!this.options.disabled){var d=this.options;this.selectees=e(d.filter,this.element[0]);this._trigger("start",c);e(d.appendTo).append(this.helper);this.helper.css({left:c.clientX,top:c.clientY,width:0,height:0});d.autoRefresh&&this.refresh();this.selectees.filter(".ui-selected").each(function(){var b=e.data(this,"selectable-item");b.startselected=true;if(!c.metaKey){b.$element.removeClass("ui-selected");b.selected=false;b.$element.addClass("ui-unselecting");b.unselecting=true;f._trigger("unselecting",
-c,{unselecting:b.element})}});e(c.target).parents().andSelf().each(function(){var b=e.data(this,"selectable-item");if(b){var g=!c.metaKey||!b.$element.hasClass("ui-selected");b.$element.removeClass(g?"ui-unselecting":"ui-selected").addClass(g?"ui-selecting":"ui-unselecting");b.unselecting=!g;b.selecting=g;(b.selected=g)?f._trigger("selecting",c,{selecting:b.element}):f._trigger("unselecting",c,{unselecting:b.element});return false}})}},_mouseDrag:function(c){var f=this;this.dragged=true;if(!this.options.disabled){var d=
-this.options,b=this.opos[0],g=this.opos[1],h=c.pageX,i=c.pageY;if(b>h){var j=h;h=b;b=j}if(g>i){j=i;i=g;g=j}this.helper.css({left:b,top:g,width:h-b,height:i-g});this.selectees.each(function(){var a=e.data(this,"selectable-item");if(!(!a||a.element==f.element[0])){var k=false;if(d.tolerance=="touch")k=!(a.left>h||a.right<b||a.top>i||a.bottom<g);else if(d.tolerance=="fit")k=a.left>b&&a.right<h&&a.top>g&&a.bottom<i;if(k){if(a.selected){a.$element.removeClass("ui-selected");a.selected=false}if(a.unselecting){a.$element.removeClass("ui-unselecting");
-a.unselecting=false}if(!a.selecting){a.$element.addClass("ui-selecting");a.selecting=true;f._trigger("selecting",c,{selecting:a.element})}}else{if(a.selecting)if(c.metaKey&&a.startselected){a.$element.removeClass("ui-selecting");a.selecting=false;a.$element.addClass("ui-selected");a.selected=true}else{a.$element.removeClass("ui-selecting");a.selecting=false;if(a.startselected){a.$element.addClass("ui-unselecting");a.unselecting=true}f._trigger("unselecting",c,{unselecting:a.element})}if(a.selected)if(!c.metaKey&&
-!a.startselected){a.$element.removeClass("ui-selected");a.selected=false;a.$element.addClass("ui-unselecting");a.unselecting=true;f._trigger("unselecting",c,{unselecting:a.element})}}}});return false}},_mouseStop:function(c){var f=this;this.dragged=false;e(".ui-unselecting",this.element[0]).each(function(){var d=e.data(this,"selectable-item");d.$element.removeClass("ui-unselecting");d.unselecting=false;d.startselected=false;f._trigger("unselected",c,{unselected:d.element})});e(".ui-selecting",this.element[0]).each(function(){var d=
-e.data(this,"selectable-item");d.$element.removeClass("ui-selecting").addClass("ui-selected");d.selecting=false;d.selected=true;d.startselected=true;f._trigger("selected",c,{selected:d.element})});this._trigger("stop",c);this.helper.remove();return false}});e.extend(e.ui.selectable,{version:"1.8.14"})})(jQuery);
-;/*
- * jQuery UI Sortable 1.8.14
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Sortables
- *
- * Depends:
- * jquery.ui.core.js
- * jquery.ui.mouse.js
- * jquery.ui.widget.js
- */
-(function(d){d.widget("ui.sortable",d.ui.mouse,{widgetEventPrefix:"sort",options:{appendTo:"parent",axis:false,connectWith:false,containment:false,cursor:"auto",cursorAt:false,dropOnEmpty:true,forcePlaceholderSize:false,forceHelperSize:false,grid:false,handle:false,helper:"original",items:"> *",opacity:false,placeholder:false,revert:false,scroll:true,scrollSensitivity:20,scrollSpeed:20,scope:"default",tolerance:"intersect",zIndex:1E3},_create:function(){var a=this.options;this.containerCache={};this.element.addClass("ui-sortable");
-this.refresh();this.floating=this.items.length?a.axis==="x"||/left|right/.test(this.items[0].item.css("float"))||/inline|table-cell/.test(this.items[0].item.css("display")):false;this.offset=this.element.offset();this._mouseInit()},destroy:function(){this.element.removeClass("ui-sortable ui-sortable-disabled").removeData("sortable").unbind(".sortable");this._mouseDestroy();for(var a=this.items.length-1;a>=0;a--)this.items[a].item.removeData("sortable-item");return this},_setOption:function(a,b){if(a===
-"disabled"){this.options[a]=b;this.widget()[b?"addClass":"removeClass"]("ui-sortable-disabled")}else d.Widget.prototype._setOption.apply(this,arguments)},_mouseCapture:function(a,b){if(this.reverting)return false;if(this.options.disabled||this.options.type=="static")return false;this._refreshItems(a);var c=null,e=this;d(a.target).parents().each(function(){if(d.data(this,"sortable-item")==e){c=d(this);return false}});if(d.data(a.target,"sortable-item")==e)c=d(a.target);if(!c)return false;if(this.options.handle&&
-!b){var f=false;d(this.options.handle,c).find("*").andSelf().each(function(){if(this==a.target)f=true});if(!f)return false}this.currentItem=c;this._removeCurrentsFromItems();return true},_mouseStart:function(a,b,c){b=this.options;var e=this;this.currentContainer=this;this.refreshPositions();this.helper=this._createHelper(a);this._cacheHelperProportions();this._cacheMargins();this.scrollParent=this.helper.scrollParent();this.offset=this.currentItem.offset();this.offset={top:this.offset.top-this.margins.top,
-left:this.offset.left-this.margins.left};this.helper.css("position","absolute");this.cssPosition=this.helper.css("position");d.extend(this.offset,{click:{left:a.pageX-this.offset.left,top:a.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()});this.originalPosition=this._generatePosition(a);this.originalPageX=a.pageX;this.originalPageY=a.pageY;b.cursorAt&&this._adjustOffsetFromHelper(b.cursorAt);this.domPosition={prev:this.currentItem.prev()[0],parent:this.currentItem.parent()[0]};
-this.helper[0]!=this.currentItem[0]&&this.currentItem.hide();this._createPlaceholder();b.containment&&this._setContainment();if(b.cursor){if(d("body").css("cursor"))this._storedCursor=d("body").css("cursor");d("body").css("cursor",b.cursor)}if(b.opacity){if(this.helper.css("opacity"))this._storedOpacity=this.helper.css("opacity");this.helper.css("opacity",b.opacity)}if(b.zIndex){if(this.helper.css("zIndex"))this._storedZIndex=this.helper.css("zIndex");this.helper.css("zIndex",b.zIndex)}if(this.scrollParent[0]!=
-document&&this.scrollParent[0].tagName!="HTML")this.overflowOffset=this.scrollParent.offset();this._trigger("start",a,this._uiHash());this._preserveHelperProportions||this._cacheHelperProportions();if(!c)for(c=this.containers.length-1;c>=0;c--)this.containers[c]._trigger("activate",a,e._uiHash(this));if(d.ui.ddmanager)d.ui.ddmanager.current=this;d.ui.ddmanager&&!b.dropBehaviour&&d.ui.ddmanager.prepareOffsets(this,a);this.dragging=true;this.helper.addClass("ui-sortable-helper");this._mouseDrag(a);
-return true},_mouseDrag:function(a){this.position=this._generatePosition(a);this.positionAbs=this._convertPositionTo("absolute");if(!this.lastPositionAbs)this.lastPositionAbs=this.positionAbs;if(this.options.scroll){var b=this.options,c=false;if(this.scrollParent[0]!=document&&this.scrollParent[0].tagName!="HTML"){if(this.overflowOffset.top+this.scrollParent[0].offsetHeight-a.pageY<b.scrollSensitivity)this.scrollParent[0].scrollTop=c=this.scrollParent[0].scrollTop+b.scrollSpeed;else if(a.pageY-this.overflowOffset.top<
-b.scrollSensitivity)this.scrollParent[0].scrollTop=c=this.scrollParent[0].scrollTop-b.scrollSpeed;if(this.overflowOffset.left+this.scrollParent[0].offsetWidth-a.pageX<b.scrollSensitivity)this.scrollParent[0].scrollLeft=c=this.scrollParent[0].scrollLeft+b.scrollSpeed;else if(a.pageX-this.overflowOffset.left<b.scrollSensitivity)this.scrollParent[0].scrollLeft=c=this.scrollParent[0].scrollLeft-b.scrollSpeed}else{if(a.pageY-d(document).scrollTop()<b.scrollSensitivity)c=d(document).scrollTop(d(document).scrollTop()-
-b.scrollSpeed);else if(d(window).height()-(a.pageY-d(document).scrollTop())<b.scrollSensitivity)c=d(document).scrollTop(d(document).scrollTop()+b.scrollSpeed);if(a.pageX-d(document).scrollLeft()<b.scrollSensitivity)c=d(document).scrollLeft(d(document).scrollLeft()-b.scrollSpeed);else if(d(window).width()-(a.pageX-d(document).scrollLeft())<b.scrollSensitivity)c=d(document).scrollLeft(d(document).scrollLeft()+b.scrollSpeed)}c!==false&&d.ui.ddmanager&&!b.dropBehaviour&&d.ui.ddmanager.prepareOffsets(this,
-a)}this.positionAbs=this._convertPositionTo("absolute");if(!this.options.axis||this.options.axis!="y")this.helper[0].style.left=this.position.left+"px";if(!this.options.axis||this.options.axis!="x")this.helper[0].style.top=this.position.top+"px";for(b=this.items.length-1;b>=0;b--){c=this.items[b];var e=c.item[0],f=this._intersectsWithPointer(c);if(f)if(e!=this.currentItem[0]&&this.placeholder[f==1?"next":"prev"]()[0]!=e&&!d.ui.contains(this.placeholder[0],e)&&(this.options.type=="semi-dynamic"?!d.ui.contains(this.element[0],
-e):true)){this.direction=f==1?"down":"up";if(this.options.tolerance=="pointer"||this._intersectsWithSides(c))this._rearrange(a,c);else break;this._trigger("change",a,this._uiHash());break}}this._contactContainers(a);d.ui.ddmanager&&d.ui.ddmanager.drag(this,a);this._trigger("sort",a,this._uiHash());this.lastPositionAbs=this.positionAbs;return false},_mouseStop:function(a,b){if(a){d.ui.ddmanager&&!this.options.dropBehaviour&&d.ui.ddmanager.drop(this,a);if(this.options.revert){var c=this;b=c.placeholder.offset();
-c.reverting=true;d(this.helper).animate({left:b.left-this.offset.parent.left-c.margins.left+(this.offsetParent[0]==document.body?0:this.offsetParent[0].scrollLeft),top:b.top-this.offset.parent.top-c.margins.top+(this.offsetParent[0]==document.body?0:this.offsetParent[0].scrollTop)},parseInt(this.options.revert,10)||500,function(){c._clear(a)})}else this._clear(a,b);return false}},cancel:function(){var a=this;if(this.dragging){this._mouseUp({target:null});this.options.helper=="original"?this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper"):
-this.currentItem.show();for(var b=this.containers.length-1;b>=0;b--){this.containers[b]._trigger("deactivate",null,a._uiHash(this));if(this.containers[b].containerCache.over){this.containers[b]._trigger("out",null,a._uiHash(this));this.containers[b].containerCache.over=0}}}if(this.placeholder){this.placeholder[0].parentNode&&this.placeholder[0].parentNode.removeChild(this.placeholder[0]);this.options.helper!="original"&&this.helper&&this.helper[0].parentNode&&this.helper.remove();d.extend(this,{helper:null,
-dragging:false,reverting:false,_noFinalSort:null});this.domPosition.prev?d(this.domPosition.prev).after(this.currentItem):d(this.domPosition.parent).prepend(this.currentItem)}return this},serialize:function(a){var b=this._getItemsAsjQuery(a&&a.connected),c=[];a=a||{};d(b).each(function(){var e=(d(a.item||this).attr(a.attribute||"id")||"").match(a.expression||/(.+)[-=_](.+)/);if(e)c.push((a.key||e[1]+"[]")+"="+(a.key&&a.expression?e[1]:e[2]))});!c.length&&a.key&&c.push(a.key+"=");return c.join("&")},
-toArray:function(a){var b=this._getItemsAsjQuery(a&&a.connected),c=[];a=a||{};b.each(function(){c.push(d(a.item||this).attr(a.attribute||"id")||"")});return c},_intersectsWith:function(a){var b=this.positionAbs.left,c=b+this.helperProportions.width,e=this.positionAbs.top,f=e+this.helperProportions.height,g=a.left,h=g+a.width,i=a.top,k=i+a.height,j=this.offset.click.top,l=this.offset.click.left;j=e+j>i&&e+j<k&&b+l>g&&b+l<h;return this.options.tolerance=="pointer"||this.options.forcePointerForContainers||
-this.options.tolerance!="pointer"&&this.helperProportions[this.floating?"width":"height"]>a[this.floating?"width":"height"]?j:g<b+this.helperProportions.width/2&&c-this.helperProportions.width/2<h&&i<e+this.helperProportions.height/2&&f-this.helperProportions.height/2<k},_intersectsWithPointer:function(a){var b=d.ui.isOverAxis(this.positionAbs.top+this.offset.click.top,a.top,a.height);a=d.ui.isOverAxis(this.positionAbs.left+this.offset.click.left,a.left,a.width);b=b&&a;a=this._getDragVerticalDirection();
-var c=this._getDragHorizontalDirection();if(!b)return false;return this.floating?c&&c=="right"||a=="down"?2:1:a&&(a=="down"?2:1)},_intersectsWithSides:function(a){var b=d.ui.isOverAxis(this.positionAbs.top+this.offset.click.top,a.top+a.height/2,a.height);a=d.ui.isOverAxis(this.positionAbs.left+this.offset.click.left,a.left+a.width/2,a.width);var c=this._getDragVerticalDirection(),e=this._getDragHorizontalDirection();return this.floating&&e?e=="right"&&a||e=="left"&&!a:c&&(c=="down"&&b||c=="up"&&!b)},
-_getDragVerticalDirection:function(){var a=this.positionAbs.top-this.lastPositionAbs.top;return a!=0&&(a>0?"down":"up")},_getDragHorizontalDirection:function(){var a=this.positionAbs.left-this.lastPositionAbs.left;return a!=0&&(a>0?"right":"left")},refresh:function(a){this._refreshItems(a);this.refreshPositions();return this},_connectWith:function(){var a=this.options;return a.connectWith.constructor==String?[a.connectWith]:a.connectWith},_getItemsAsjQuery:function(a){var b=[],c=[],e=this._connectWith();
-if(e&&a)for(a=e.length-1;a>=0;a--)for(var f=d(e[a]),g=f.length-1;g>=0;g--){var h=d.data(f[g],"sortable");if(h&&h!=this&&!h.options.disabled)c.push([d.isFunction(h.options.items)?h.options.items.call(h.element):d(h.options.items,h.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),h])}c.push([d.isFunction(this.options.items)?this.options.items.call(this.element,null,{options:this.options,item:this.currentItem}):d(this.options.items,this.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),
-this]);for(a=c.length-1;a>=0;a--)c[a][0].each(function(){b.push(this)});return d(b)},_removeCurrentsFromItems:function(){for(var a=this.currentItem.find(":data(sortable-item)"),b=0;b<this.items.length;b++)for(var c=0;c<a.length;c++)a[c]==this.items[b].item[0]&&this.items.splice(b,1)},_refreshItems:function(a){this.items=[];this.containers=[this];var b=this.items,c=[[d.isFunction(this.options.items)?this.options.items.call(this.element[0],a,{item:this.currentItem}):d(this.options.items,this.element),
-this]],e=this._connectWith();if(e)for(var f=e.length-1;f>=0;f--)for(var g=d(e[f]),h=g.length-1;h>=0;h--){var i=d.data(g[h],"sortable");if(i&&i!=this&&!i.options.disabled){c.push([d.isFunction(i.options.items)?i.options.items.call(i.element[0],a,{item:this.currentItem}):d(i.options.items,i.element),i]);this.containers.push(i)}}for(f=c.length-1;f>=0;f--){a=c[f][1];e=c[f][0];h=0;for(g=e.length;h<g;h++){i=d(e[h]);i.data("sortable-item",a);b.push({item:i,instance:a,width:0,height:0,left:0,top:0})}}},refreshPositions:function(a){if(this.offsetParent&&
-this.helper)this.offset.parent=this._getParentOffset();for(var b=this.items.length-1;b>=0;b--){var c=this.items[b];if(!(c.instance!=this.currentContainer&&this.currentContainer&&c.item[0]!=this.currentItem[0])){var e=this.options.toleranceElement?d(this.options.toleranceElement,c.item):c.item;if(!a){c.width=e.outerWidth();c.height=e.outerHeight()}e=e.offset();c.left=e.left;c.top=e.top}}if(this.options.custom&&this.options.custom.refreshContainers)this.options.custom.refreshContainers.call(this);else for(b=
-this.containers.length-1;b>=0;b--){e=this.containers[b].element.offset();this.containers[b].containerCache.left=e.left;this.containers[b].containerCache.top=e.top;this.containers[b].containerCache.width=this.containers[b].element.outerWidth();this.containers[b].containerCache.height=this.containers[b].element.outerHeight()}return this},_createPlaceholder:function(a){var b=a||this,c=b.options;if(!c.placeholder||c.placeholder.constructor==String){var e=c.placeholder;c.placeholder={element:function(){var f=
-d(document.createElement(b.currentItem[0].nodeName)).addClass(e||b.currentItem[0].className+" ui-sortable-placeholder").removeClass("ui-sortable-helper")[0];if(!e)f.style.visibility="hidden";return f},update:function(f,g){if(!(e&&!c.forcePlaceholderSize)){g.height()||g.height(b.currentItem.innerHeight()-parseInt(b.currentItem.css("paddingTop")||0,10)-parseInt(b.currentItem.css("paddingBottom")||0,10));g.width()||g.width(b.currentItem.innerWidth()-parseInt(b.currentItem.css("paddingLeft")||0,10)-parseInt(b.currentItem.css("paddingRight")||
-0,10))}}}}b.placeholder=d(c.placeholder.element.call(b.element,b.currentItem));b.currentItem.after(b.placeholder);c.placeholder.update(b,b.placeholder)},_contactContainers:function(a){for(var b=null,c=null,e=this.containers.length-1;e>=0;e--)if(!d.ui.contains(this.currentItem[0],this.containers[e].element[0]))if(this._intersectsWith(this.containers[e].containerCache)){if(!(b&&d.ui.contains(this.containers[e].element[0],b.element[0]))){b=this.containers[e];c=e}}else if(this.containers[e].containerCache.over){this.containers[e]._trigger("out",
-a,this._uiHash(this));this.containers[e].containerCache.over=0}if(b)if(this.containers.length===1){this.containers[c]._trigger("over",a,this._uiHash(this));this.containers[c].containerCache.over=1}else if(this.currentContainer!=this.containers[c]){b=1E4;e=null;for(var f=this.positionAbs[this.containers[c].floating?"left":"top"],g=this.items.length-1;g>=0;g--)if(d.ui.contains(this.containers[c].element[0],this.items[g].item[0])){var h=this.items[g][this.containers[c].floating?"left":"top"];if(Math.abs(h-
-f)<b){b=Math.abs(h-f);e=this.items[g]}}if(e||this.options.dropOnEmpty){this.currentContainer=this.containers[c];e?this._rearrange(a,e,null,true):this._rearrange(a,null,this.containers[c].element,true);this._trigger("change",a,this._uiHash());this.containers[c]._trigger("change",a,this._uiHash(this));this.options.placeholder.update(this.currentContainer,this.placeholder);this.containers[c]._trigger("over",a,this._uiHash(this));this.containers[c].containerCache.over=1}}},_createHelper:function(a){var b=
-this.options;a=d.isFunction(b.helper)?d(b.helper.apply(this.element[0],[a,this.currentItem])):b.helper=="clone"?this.currentItem.clone():this.currentItem;a.parents("body").length||d(b.appendTo!="parent"?b.appendTo:this.currentItem[0].parentNode)[0].appendChild(a[0]);if(a[0]==this.currentItem[0])this._storedCSS={width:this.currentItem[0].style.width,height:this.currentItem[0].style.height,position:this.currentItem.css("position"),top:this.currentItem.css("top"),left:this.currentItem.css("left")};if(a[0].style.width==
-""||b.forceHelperSize)a.width(this.currentItem.width());if(a[0].style.height==""||b.forceHelperSize)a.height(this.currentItem.height());return a},_adjustOffsetFromHelper:function(a){if(typeof a=="string")a=a.split(" ");if(d.isArray(a))a={left:+a[0],top:+a[1]||0};if("left"in a)this.offset.click.left=a.left+this.margins.left;if("right"in a)this.offset.click.left=this.helperProportions.width-a.right+this.margins.left;if("top"in a)this.offset.click.top=a.top+this.margins.top;if("bottom"in a)this.offset.click.top=
-this.helperProportions.height-a.bottom+this.margins.top},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var a=this.offsetParent.offset();if(this.cssPosition=="absolute"&&this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0],this.offsetParent[0])){a.left+=this.scrollParent.scrollLeft();a.top+=this.scrollParent.scrollTop()}if(this.offsetParent[0]==document.body||this.offsetParent[0].tagName&&this.offsetParent[0].tagName.toLowerCase()=="html"&&d.browser.msie)a=
-{top:0,left:0};return{top:a.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:a.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if(this.cssPosition=="relative"){var a=this.currentItem.position();return{top:a.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:a.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}else return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.currentItem.css("marginLeft"),
-10)||0,top:parseInt(this.currentItem.css("marginTop"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var a=this.options;if(a.containment=="parent")a.containment=this.helper[0].parentNode;if(a.containment=="document"||a.containment=="window")this.containment=[0-this.offset.relative.left-this.offset.parent.left,0-this.offset.relative.top-this.offset.parent.top,d(a.containment=="document"?
-document:window).width()-this.helperProportions.width-this.margins.left,(d(a.containment=="document"?document:window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top];if(!/^(document|window|parent)$/.test(a.containment)){var b=d(a.containment)[0];a=d(a.containment).offset();var c=d(b).css("overflow")!="hidden";this.containment=[a.left+(parseInt(d(b).css("borderLeftWidth"),10)||0)+(parseInt(d(b).css("paddingLeft"),10)||0)-this.margins.left,a.top+(parseInt(d(b).css("borderTopWidth"),
-10)||0)+(parseInt(d(b).css("paddingTop"),10)||0)-this.margins.top,a.left+(c?Math.max(b.scrollWidth,b.offsetWidth):b.offsetWidth)-(parseInt(d(b).css("borderLeftWidth"),10)||0)-(parseInt(d(b).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left,a.top+(c?Math.max(b.scrollHeight,b.offsetHeight):b.offsetHeight)-(parseInt(d(b).css("borderTopWidth"),10)||0)-(parseInt(d(b).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top]}},_convertPositionTo:function(a,b){if(!b)b=
-this.position;a=a=="absolute"?1:-1;var c=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,e=/(html|body)/i.test(c[0].tagName);return{top:b.top+this.offset.relative.top*a+this.offset.parent.top*a-(d.browser.safari&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollTop():e?0:c.scrollTop())*a),left:b.left+this.offset.relative.left*a+this.offset.parent.left*a-(d.browser.safari&&
-this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():e?0:c.scrollLeft())*a)}},_generatePosition:function(a){var b=this.options,c=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,e=/(html|body)/i.test(c[0].tagName);if(this.cssPosition=="relative"&&!(this.scrollParent[0]!=document&&this.scrollParent[0]!=this.offsetParent[0]))this.offset.relative=this._getRelativeOffset();
-var f=a.pageX,g=a.pageY;if(this.originalPosition){if(this.containment){if(a.pageX-this.offset.click.left<this.containment[0])f=this.containment[0]+this.offset.click.left;if(a.pageY-this.offset.click.top<this.containment[1])g=this.containment[1]+this.offset.click.top;if(a.pageX-this.offset.click.left>this.containment[2])f=this.containment[2]+this.offset.click.left;if(a.pageY-this.offset.click.top>this.containment[3])g=this.containment[3]+this.offset.click.top}if(b.grid){g=this.originalPageY+Math.round((g-
-this.originalPageY)/b.grid[1])*b.grid[1];g=this.containment?!(g-this.offset.click.top<this.containment[1]||g-this.offset.click.top>this.containment[3])?g:!(g-this.offset.click.top<this.containment[1])?g-b.grid[1]:g+b.grid[1]:g;f=this.originalPageX+Math.round((f-this.originalPageX)/b.grid[0])*b.grid[0];f=this.containment?!(f-this.offset.click.left<this.containment[0]||f-this.offset.click.left>this.containment[2])?f:!(f-this.offset.click.left<this.containment[0])?f-b.grid[0]:f+b.grid[0]:f}}return{top:g-
-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+(d.browser.safari&&this.cssPosition=="fixed"?0:this.cssPosition=="fixed"?-this.scrollParent.scrollTop():e?0:c.scrollTop()),left:f-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+(d.browser.safari&&this.cssPosition=="fixed"?0:this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():e?0:c.scrollLeft())}},_rearrange:function(a,b,c,e){c?c[0].appendChild(this.placeholder[0]):b.item[0].parentNode.insertBefore(this.placeholder[0],
-this.direction=="down"?b.item[0]:b.item[0].nextSibling);this.counter=this.counter?++this.counter:1;var f=this,g=this.counter;window.setTimeout(function(){g==f.counter&&f.refreshPositions(!e)},0)},_clear:function(a,b){this.reverting=false;var c=[];!this._noFinalSort&&this.currentItem.parent().length&&this.placeholder.before(this.currentItem);this._noFinalSort=null;if(this.helper[0]==this.currentItem[0]){for(var e in this._storedCSS)if(this._storedCSS[e]=="auto"||this._storedCSS[e]=="static")this._storedCSS[e]=
-"";this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper")}else this.currentItem.show();this.fromOutside&&!b&&c.push(function(f){this._trigger("receive",f,this._uiHash(this.fromOutside))});if((this.fromOutside||this.domPosition.prev!=this.currentItem.prev().not(".ui-sortable-helper")[0]||this.domPosition.parent!=this.currentItem.parent()[0])&&!b)c.push(function(f){this._trigger("update",f,this._uiHash())});if(!d.ui.contains(this.element[0],this.currentItem[0])){b||c.push(function(f){this._trigger("remove",
-f,this._uiHash())});for(e=this.containers.length-1;e>=0;e--)if(d.ui.contains(this.containers[e].element[0],this.currentItem[0])&&!b){c.push(function(f){return function(g){f._trigger("receive",g,this._uiHash(this))}}.call(this,this.containers[e]));c.push(function(f){return function(g){f._trigger("update",g,this._uiHash(this))}}.call(this,this.containers[e]))}}for(e=this.containers.length-1;e>=0;e--){b||c.push(function(f){return function(g){f._trigger("deactivate",g,this._uiHash(this))}}.call(this,
-this.containers[e]));if(this.containers[e].containerCache.over){c.push(function(f){return function(g){f._trigger("out",g,this._uiHash(this))}}.call(this,this.containers[e]));this.containers[e].containerCache.over=0}}this._storedCursor&&d("body").css("cursor",this._storedCursor);this._storedOpacity&&this.helper.css("opacity",this._storedOpacity);if(this._storedZIndex)this.helper.css("zIndex",this._storedZIndex=="auto"?"":this._storedZIndex);this.dragging=false;if(this.cancelHelperRemoval){if(!b){this._trigger("beforeStop",
-a,this._uiHash());for(e=0;e<c.length;e++)c[e].call(this,a);this._trigger("stop",a,this._uiHash())}return false}b||this._trigger("beforeStop",a,this._uiHash());this.placeholder[0].parentNode.removeChild(this.placeholder[0]);this.helper[0]!=this.currentItem[0]&&this.helper.remove();this.helper=null;if(!b){for(e=0;e<c.length;e++)c[e].call(this,a);this._trigger("stop",a,this._uiHash())}this.fromOutside=false;return true},_trigger:function(){d.Widget.prototype._trigger.apply(this,arguments)===false&&this.cancel()},
-_uiHash:function(a){var b=a||this;return{helper:b.helper,placeholder:b.placeholder||d([]),position:b.position,originalPosition:b.originalPosition,offset:b.positionAbs,item:b.currentItem,sender:a?a.element:null}}});d.extend(d.ui.sortable,{version:"1.8.14"})})(jQuery);
-;/*
- * jQuery UI Accordion 1.8.14
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Accordion
- *
- * Depends:
- * jquery.ui.core.js
- * jquery.ui.widget.js
- */
-(function(c){c.widget("ui.accordion",{options:{active:0,animated:"slide",autoHeight:true,clearStyle:false,collapsible:false,event:"click",fillSpace:false,header:"> li > :first-child,> :not(li):even",icons:{header:"ui-icon-triangle-1-e",headerSelected:"ui-icon-triangle-1-s"},navigation:false,navigationFilter:function(){return this.href.toLowerCase()===location.href.toLowerCase()}},_create:function(){var a=this,b=a.options;a.running=0;a.element.addClass("ui-accordion ui-widget ui-helper-reset").children("li").addClass("ui-accordion-li-fix");
-a.headers=a.element.find(b.header).addClass("ui-accordion-header ui-helper-reset ui-state-default ui-corner-all").bind("mouseenter.accordion",function(){b.disabled||c(this).addClass("ui-state-hover")}).bind("mouseleave.accordion",function(){b.disabled||c(this).removeClass("ui-state-hover")}).bind("focus.accordion",function(){b.disabled||c(this).addClass("ui-state-focus")}).bind("blur.accordion",function(){b.disabled||c(this).removeClass("ui-state-focus")});a.headers.next().addClass("ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom");
-if(b.navigation){var d=a.element.find("a").filter(b.navigationFilter).eq(0);if(d.length){var h=d.closest(".ui-accordion-header");a.active=h.length?h:d.closest(".ui-accordion-content").prev()}}a.active=a._findActive(a.active||b.active).addClass("ui-state-default ui-state-active").toggleClass("ui-corner-all").toggleClass("ui-corner-top");a.active.next().addClass("ui-accordion-content-active");a._createIcons();a.resize();a.element.attr("role","tablist");a.headers.attr("role","tab").bind("keydown.accordion",
-function(f){return a._keydown(f)}).next().attr("role","tabpanel");a.headers.not(a.active||"").attr({"aria-expanded":"false","aria-selected":"false",tabIndex:-1}).next().hide();a.active.length?a.active.attr({"aria-expanded":"true","aria-selected":"true",tabIndex:0}):a.headers.eq(0).attr("tabIndex",0);c.browser.safari||a.headers.find("a").attr("tabIndex",-1);b.event&&a.headers.bind(b.event.split(" ").join(".accordion ")+".accordion",function(f){a._clickHandler.call(a,f,this);f.preventDefault()})},_createIcons:function(){var a=
-this.options;if(a.icons){c("<span></span>").addClass("ui-icon "+a.icons.header).prependTo(this.headers);this.active.children(".ui-icon").toggleClass(a.icons.header).toggleClass(a.icons.headerSelected);this.element.addClass("ui-accordion-icons")}},_destroyIcons:function(){this.headers.children(".ui-icon").remove();this.element.removeClass("ui-accordion-icons")},destroy:function(){var a=this.options;this.element.removeClass("ui-accordion ui-widget ui-helper-reset").removeAttr("role");this.headers.unbind(".accordion").removeClass("ui-accordion-header ui-accordion-disabled ui-helper-reset ui-state-default ui-corner-all ui-state-active ui-state-disabled ui-corner-top").removeAttr("role").removeAttr("aria-expanded").removeAttr("aria-selected").removeAttr("tabIndex");
-this.headers.find("a").removeAttr("tabIndex");this._destroyIcons();var b=this.headers.next().css("display","").removeAttr("role").removeClass("ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content ui-accordion-content-active ui-accordion-disabled ui-state-disabled");if(a.autoHeight||a.fillHeight)b.css("height","");return c.Widget.prototype.destroy.call(this)},_setOption:function(a,b){c.Widget.prototype._setOption.apply(this,arguments);a=="active"&&this.activate(b);if(a=="icons"){this._destroyIcons();
-b&&this._createIcons()}if(a=="disabled")this.headers.add(this.headers.next())[b?"addClass":"removeClass"]("ui-accordion-disabled ui-state-disabled")},_keydown:function(a){if(!(this.options.disabled||a.altKey||a.ctrlKey)){var b=c.ui.keyCode,d=this.headers.length,h=this.headers.index(a.target),f=false;switch(a.keyCode){case b.RIGHT:case b.DOWN:f=this.headers[(h+1)%d];break;case b.LEFT:case b.UP:f=this.headers[(h-1+d)%d];break;case b.SPACE:case b.ENTER:this._clickHandler({target:a.target},a.target);
-a.preventDefault()}if(f){c(a.target).attr("tabIndex",-1);c(f).attr("tabIndex",0);f.focus();return false}return true}},resize:function(){var a=this.options,b;if(a.fillSpace){if(c.browser.msie){var d=this.element.parent().css("overflow");this.element.parent().css("overflow","hidden")}b=this.element.parent().height();c.browser.msie&&this.element.parent().css("overflow",d);this.headers.each(function(){b-=c(this).outerHeight(true)});this.headers.next().each(function(){c(this).height(Math.max(0,b-c(this).innerHeight()+
-c(this).height()))}).css("overflow","auto")}else if(a.autoHeight){b=0;this.headers.next().each(function(){b=Math.max(b,c(this).height("").height())}).height(b)}return this},activate:function(a){this.options.active=a;a=this._findActive(a)[0];this._clickHandler({target:a},a);return this},_findActive:function(a){return a?typeof a==="number"?this.headers.filter(":eq("+a+")"):this.headers.not(this.headers.not(a)):a===false?c([]):this.headers.filter(":eq(0)")},_clickHandler:function(a,b){var d=this.options;
-if(!d.disabled)if(a.target){a=c(a.currentTarget||b);b=a[0]===this.active[0];d.active=d.collapsible&&b?false:this.headers.index(a);if(!(this.running||!d.collapsible&&b)){var h=this.active;j=a.next();g=this.active.next();e={options:d,newHeader:b&&d.collapsible?c([]):a,oldHeader:this.active,newContent:b&&d.collapsible?c([]):j,oldContent:g};var f=this.headers.index(this.active[0])>this.headers.index(a[0]);this.active=b?c([]):a;this._toggle(j,g,e,b,f);h.removeClass("ui-state-active ui-corner-top").addClass("ui-state-default ui-corner-all").children(".ui-icon").removeClass(d.icons.headerSelected).addClass(d.icons.header);
-if(!b){a.removeClass("ui-state-default ui-corner-all").addClass("ui-state-active ui-corner-top").children(".ui-icon").removeClass(d.icons.header).addClass(d.icons.headerSelected);a.next().addClass("ui-accordion-content-active")}}}else if(d.collapsible){this.active.removeClass("ui-state-active ui-corner-top").addClass("ui-state-default ui-corner-all").children(".ui-icon").removeClass(d.icons.headerSelected).addClass(d.icons.header);this.active.next().addClass("ui-accordion-content-active");var g=this.active.next(),
-e={options:d,newHeader:c([]),oldHeader:d.active,newContent:c([]),oldContent:g},j=this.active=c([]);this._toggle(j,g,e)}},_toggle:function(a,b,d,h,f){var g=this,e=g.options;g.toShow=a;g.toHide=b;g.data=d;var j=function(){if(g)return g._completed.apply(g,arguments)};g._trigger("changestart",null,g.data);g.running=b.size()===0?a.size():b.size();if(e.animated){d={};d=e.collapsible&&h?{toShow:c([]),toHide:b,complete:j,down:f,autoHeight:e.autoHeight||e.fillSpace}:{toShow:a,toHide:b,complete:j,down:f,autoHeight:e.autoHeight||
-e.fillSpace};if(!e.proxied)e.proxied=e.animated;if(!e.proxiedDuration)e.proxiedDuration=e.duration;e.animated=c.isFunction(e.proxied)?e.proxied(d):e.proxied;e.duration=c.isFunction(e.proxiedDuration)?e.proxiedDuration(d):e.proxiedDuration;h=c.ui.accordion.animations;var i=e.duration,k=e.animated;if(k&&!h[k]&&!c.easing[k])k="slide";h[k]||(h[k]=function(l){this.slide(l,{easing:k,duration:i||700})});h[k](d)}else{if(e.collapsible&&h)a.toggle();else{b.hide();a.show()}j(true)}b.prev().attr({"aria-expanded":"false",
-"aria-selected":"false",tabIndex:-1}).blur();a.prev().attr({"aria-expanded":"true","aria-selected":"true",tabIndex:0}).focus()},_completed:function(a){this.running=a?0:--this.running;if(!this.running){this.options.clearStyle&&this.toShow.add(this.toHide).css({height:"",overflow:""});this.toHide.removeClass("ui-accordion-content-active");if(this.toHide.length)this.toHide.parent()[0].className=this.toHide.parent()[0].className;this._trigger("change",null,this.data)}}});c.extend(c.ui.accordion,{version:"1.8.14",
-animations:{slide:function(a,b){a=c.extend({easing:"swing",duration:300},a,b);if(a.toHide.size())if(a.toShow.size()){var d=a.toShow.css("overflow"),h=0,f={},g={},e;b=a.toShow;e=b[0].style.width;b.width(parseInt(b.parent().width(),10)-parseInt(b.css("paddingLeft"),10)-parseInt(b.css("paddingRight"),10)-(parseInt(b.css("borderLeftWidth"),10)||0)-(parseInt(b.css("borderRightWidth"),10)||0));c.each(["height","paddingTop","paddingBottom"],function(j,i){g[i]="hide";j=(""+c.css(a.toShow[0],i)).match(/^([\d+-.]+)(.*)$/);
-f[i]={value:j[1],unit:j[2]||"px"}});a.toShow.css({height:0,overflow:"hidden"}).show();a.toHide.filter(":hidden").each(a.complete).end().filter(":visible").animate(g,{step:function(j,i){if(i.prop=="height")h=i.end-i.start===0?0:(i.now-i.start)/(i.end-i.start);a.toShow[0].style[i.prop]=h*f[i.prop].value+f[i.prop].unit},duration:a.duration,easing:a.easing,complete:function(){a.autoHeight||a.toShow.css("height","");a.toShow.css({width:e,overflow:d});a.complete()}})}else a.toHide.animate({height:"hide",
-paddingTop:"hide",paddingBottom:"hide"},a);else a.toShow.animate({height:"show",paddingTop:"show",paddingBottom:"show"},a)},bounceslide:function(a){this.slide(a,{easing:a.down?"easeOutBounce":"swing",duration:a.down?1E3:200})}}})})(jQuery);
-;/*
- * jQuery UI Autocomplete 1.8.14
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Autocomplete
- *
- * Depends:
- * jquery.ui.core.js
- * jquery.ui.widget.js
- * jquery.ui.position.js
- */
-(function(d){var e=0;d.widget("ui.autocomplete",{options:{appendTo:"body",autoFocus:false,delay:300,minLength:1,position:{my:"left top",at:"left bottom",collision:"none"},source:null},pending:0,_create:function(){var a=this,b=this.element[0].ownerDocument,g;this.element.addClass("ui-autocomplete-input").attr("autocomplete","off").attr({role:"textbox","aria-autocomplete":"list","aria-haspopup":"true"}).bind("keydown.autocomplete",function(c){if(!(a.options.disabled||a.element.attr("readonly"))){g=
-false;var f=d.ui.keyCode;switch(c.keyCode){case f.PAGE_UP:a._move("previousPage",c);break;case f.PAGE_DOWN:a._move("nextPage",c);break;case f.UP:a._move("previous",c);c.preventDefault();break;case f.DOWN:a._move("next",c);c.preventDefault();break;case f.ENTER:case f.NUMPAD_ENTER:if(a.menu.active){g=true;c.preventDefault()}case f.TAB:if(!a.menu.active)return;a.menu.select(c);break;case f.ESCAPE:a.element.val(a.term);a.close(c);break;default:clearTimeout(a.searching);a.searching=setTimeout(function(){if(a.term!=
-a.element.val()){a.selectedItem=null;a.search(null,c)}},a.options.delay);break}}}).bind("keypress.autocomplete",function(c){if(g){g=false;c.preventDefault()}}).bind("focus.autocomplete",function(){if(!a.options.disabled){a.selectedItem=null;a.previous=a.element.val()}}).bind("blur.autocomplete",function(c){if(!a.options.disabled){clearTimeout(a.searching);a.closing=setTimeout(function(){a.close(c);a._change(c)},150)}});this._initSource();this.response=function(){return a._response.apply(a,arguments)};
-this.menu=d("<ul></ul>").addClass("ui-autocomplete").appendTo(d(this.options.appendTo||"body",b)[0]).mousedown(function(c){var f=a.menu.element[0];d(c.target).closest(".ui-menu-item").length||setTimeout(function(){d(document).one("mousedown",function(h){h.target!==a.element[0]&&h.target!==f&&!d.ui.contains(f,h.target)&&a.close()})},1);setTimeout(function(){clearTimeout(a.closing)},13)}).menu({focus:function(c,f){f=f.item.data("item.autocomplete");false!==a._trigger("focus",c,{item:f})&&/^key/.test(c.originalEvent.type)&&
-a.element.val(f.value)},selected:function(c,f){var h=f.item.data("item.autocomplete"),i=a.previous;if(a.element[0]!==b.activeElement){a.element.focus();a.previous=i;setTimeout(function(){a.previous=i;a.selectedItem=h},1)}false!==a._trigger("select",c,{item:h})&&a.element.val(h.value);a.term=a.element.val();a.close(c);a.selectedItem=h},blur:function(){a.menu.element.is(":visible")&&a.element.val()!==a.term&&a.element.val(a.term)}}).zIndex(this.element.zIndex()+1).css({top:0,left:0}).hide().data("menu");
-d.fn.bgiframe&&this.menu.element.bgiframe()},destroy:function(){this.element.removeClass("ui-autocomplete-input").removeAttr("autocomplete").removeAttr("role").removeAttr("aria-autocomplete").removeAttr("aria-haspopup");this.menu.element.remove();d.Widget.prototype.destroy.call(this)},_setOption:function(a,b){d.Widget.prototype._setOption.apply(this,arguments);a==="source"&&this._initSource();if(a==="appendTo")this.menu.element.appendTo(d(b||"body",this.element[0].ownerDocument)[0]);a==="disabled"&&
-b&&this.xhr&&this.xhr.abort()},_initSource:function(){var a=this,b,g;if(d.isArray(this.options.source)){b=this.options.source;this.source=function(c,f){f(d.ui.autocomplete.filter(b,c.term))}}else if(typeof this.options.source==="string"){g=this.options.source;this.source=function(c,f){a.xhr&&a.xhr.abort();a.xhr=d.ajax({url:g,data:c,dataType:"json",autocompleteRequest:++e,success:function(h){this.autocompleteRequest===e&&f(h)},error:function(){this.autocompleteRequest===e&&f([])}})}}else this.source=
-this.options.source},search:function(a,b){a=a!=null?a:this.element.val();this.term=this.element.val();if(a.length<this.options.minLength)return this.close(b);clearTimeout(this.closing);if(this._trigger("search",b)!==false)return this._search(a)},_search:function(a){this.pending++;this.element.addClass("ui-autocomplete-loading");this.source({term:a},this.response)},_response:function(a){if(!this.options.disabled&&a&&a.length){a=this._normalize(a);this._suggest(a);this._trigger("open")}else this.close();
-this.pending--;this.pending||this.element.removeClass("ui-autocomplete-loading")},close:function(a){clearTimeout(this.closing);if(this.menu.element.is(":visible")){this.menu.element.hide();this.menu.deactivate();this._trigger("close",a)}},_change:function(a){this.previous!==this.element.val()&&this._trigger("change",a,{item:this.selectedItem})},_normalize:function(a){if(a.length&&a[0].label&&a[0].value)return a;return d.map(a,function(b){if(typeof b==="string")return{label:b,value:b};return d.extend({label:b.label||
-b.value,value:b.value||b.label},b)})},_suggest:function(a){var b=this.menu.element.empty().zIndex(this.element.zIndex()+1);this._renderMenu(b,a);this.menu.deactivate();this.menu.refresh();b.show();this._resizeMenu();b.position(d.extend({of:this.element},this.options.position));this.options.autoFocus&&this.menu.next(new d.Event("mouseover"))},_resizeMenu:function(){var a=this.menu.element;a.outerWidth(Math.max(a.width("").outerWidth(),this.element.outerWidth()))},_renderMenu:function(a,b){var g=this;
-d.each(b,function(c,f){g._renderItem(a,f)})},_renderItem:function(a,b){return d("<li></li>").data("item.autocomplete",b).append(d("<a></a>").text(b.label)).appendTo(a)},_move:function(a,b){if(this.menu.element.is(":visible"))if(this.menu.first()&&/^previous/.test(a)||this.menu.last()&&/^next/.test(a)){this.element.val(this.term);this.menu.deactivate()}else this.menu[a](b);else this.search(null,b)},widget:function(){return this.menu.element}});d.extend(d.ui.autocomplete,{escapeRegex:function(a){return a.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,
-"\\$&")},filter:function(a,b){var g=new RegExp(d.ui.autocomplete.escapeRegex(b),"i");return d.grep(a,function(c){return g.test(c.label||c.value||c)})}})})(jQuery);
-(function(d){d.widget("ui.menu",{_create:function(){var e=this;this.element.addClass("ui-menu ui-widget ui-widget-content ui-corner-all").attr({role:"listbox","aria-activedescendant":"ui-active-menuitem"}).click(function(a){if(d(a.target).closest(".ui-menu-item a").length){a.preventDefault();e.select(a)}});this.refresh()},refresh:function(){var e=this;this.element.children("li:not(.ui-menu-item):has(a)").addClass("ui-menu-item").attr("role","menuitem").children("a").addClass("ui-corner-all").attr("tabindex",
--1).mouseenter(function(a){e.activate(a,d(this).parent())}).mouseleave(function(){e.deactivate()})},activate:function(e,a){this.deactivate();if(this.hasScroll()){var b=a.offset().top-this.element.offset().top,g=this.element.scrollTop(),c=this.element.height();if(b<0)this.element.scrollTop(g+b);else b>=c&&this.element.scrollTop(g+b-c+a.height())}this.active=a.eq(0).children("a").addClass("ui-state-hover").attr("id","ui-active-menuitem").end();this._trigger("focus",e,{item:a})},deactivate:function(){if(this.active){this.active.children("a").removeClass("ui-state-hover").removeAttr("id");
-this._trigger("blur");this.active=null}},next:function(e){this.move("next",".ui-menu-item:first",e)},previous:function(e){this.move("prev",".ui-menu-item:last",e)},first:function(){return this.active&&!this.active.prevAll(".ui-menu-item").length},last:function(){return this.active&&!this.active.nextAll(".ui-menu-item").length},move:function(e,a,b){if(this.active){e=this.active[e+"All"](".ui-menu-item").eq(0);e.length?this.activate(b,e):this.activate(b,this.element.children(a))}else this.activate(b,
-this.element.children(a))},nextPage:function(e){if(this.hasScroll())if(!this.active||this.last())this.activate(e,this.element.children(".ui-menu-item:first"));else{var a=this.active.offset().top,b=this.element.height(),g=this.element.children(".ui-menu-item").filter(function(){var c=d(this).offset().top-a-b+d(this).height();return c<10&&c>-10});g.length||(g=this.element.children(".ui-menu-item:last"));this.activate(e,g)}else this.activate(e,this.element.children(".ui-menu-item").filter(!this.active||
-this.last()?":first":":last"))},previousPage:function(e){if(this.hasScroll())if(!this.active||this.first())this.activate(e,this.element.children(".ui-menu-item:last"));else{var a=this.active.offset().top,b=this.element.height();result=this.element.children(".ui-menu-item").filter(function(){var g=d(this).offset().top-a+b-d(this).height();return g<10&&g>-10});result.length||(result=this.element.children(".ui-menu-item:first"));this.activate(e,result)}else this.activate(e,this.element.children(".ui-menu-item").filter(!this.active||
-this.first()?":last":":first"))},hasScroll:function(){return this.element.height()<this.element[d.fn.prop?"prop":"attr"]("scrollHeight")},select:function(e){this._trigger("selected",e,{item:this.active})}})})(jQuery);
-;/*
- * jQuery UI Button 1.8.14
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Button
- *
- * Depends:
- * jquery.ui.core.js
- * jquery.ui.widget.js
- */
-(function(b){var h,i,j,g,l=function(){var a=b(this).find(":ui-button");setTimeout(function(){a.button("refresh")},1)},k=function(a){var c=a.name,e=a.form,f=b([]);if(c)f=e?b(e).find("[name='"+c+"']"):b("[name='"+c+"']",a.ownerDocument).filter(function(){return!this.form});return f};b.widget("ui.button",{options:{disabled:null,text:true,label:null,icons:{primary:null,secondary:null}},_create:function(){this.element.closest("form").unbind("reset.button").bind("reset.button",l);if(typeof this.options.disabled!==
-"boolean")this.options.disabled=this.element.attr("disabled");this._determineButtonType();this.hasTitle=!!this.buttonElement.attr("title");var a=this,c=this.options,e=this.type==="checkbox"||this.type==="radio",f="ui-state-hover"+(!e?" ui-state-active":"");if(c.label===null)c.label=this.buttonElement.html();if(this.element.is(":disabled"))c.disabled=true;this.buttonElement.addClass("ui-button ui-widget ui-state-default ui-corner-all").attr("role","button").bind("mouseenter.button",function(){if(!c.disabled){b(this).addClass("ui-state-hover");
-this===h&&b(this).addClass("ui-state-active")}}).bind("mouseleave.button",function(){c.disabled||b(this).removeClass(f)}).bind("click.button",function(d){if(c.disabled){d.preventDefault();d.stopImmediatePropagation()}});this.element.bind("focus.button",function(){a.buttonElement.addClass("ui-state-focus")}).bind("blur.button",function(){a.buttonElement.removeClass("ui-state-focus")});if(e){this.element.bind("change.button",function(){g||a.refresh()});this.buttonElement.bind("mousedown.button",function(d){if(!c.disabled){g=
-false;i=d.pageX;j=d.pageY}}).bind("mouseup.button",function(d){if(!c.disabled)if(i!==d.pageX||j!==d.pageY)g=true})}if(this.type==="checkbox")this.buttonElement.bind("click.button",function(){if(c.disabled||g)return false;b(this).toggleClass("ui-state-active");a.buttonElement.attr("aria-pressed",a.element[0].checked)});else if(this.type==="radio")this.buttonElement.bind("click.button",function(){if(c.disabled||g)return false;b(this).addClass("ui-state-active");a.buttonElement.attr("aria-pressed",true);
-var d=a.element[0];k(d).not(d).map(function(){return b(this).button("widget")[0]}).removeClass("ui-state-active").attr("aria-pressed",false)});else{this.buttonElement.bind("mousedown.button",function(){if(c.disabled)return false;b(this).addClass("ui-state-active");h=this;b(document).one("mouseup",function(){h=null})}).bind("mouseup.button",function(){if(c.disabled)return false;b(this).removeClass("ui-state-active")}).bind("keydown.button",function(d){if(c.disabled)return false;if(d.keyCode==b.ui.keyCode.SPACE||
-d.keyCode==b.ui.keyCode.ENTER)b(this).addClass("ui-state-active")}).bind("keyup.button",function(){b(this).removeClass("ui-state-active")});this.buttonElement.is("a")&&this.buttonElement.keyup(function(d){d.keyCode===b.ui.keyCode.SPACE&&b(this).click()})}this._setOption("disabled",c.disabled);this._resetButton()},_determineButtonType:function(){this.type=this.element.is(":checkbox")?"checkbox":this.element.is(":radio")?"radio":this.element.is("input")?"input":"button";if(this.type==="checkbox"||this.type===
-"radio"){var a=this.element.parents().filter(":last"),c="label[for="+this.element.attr("id")+"]";this.buttonElement=a.find(c);if(!this.buttonElement.length){a=a.length?a.siblings():this.element.siblings();this.buttonElement=a.filter(c);if(!this.buttonElement.length)this.buttonElement=a.find(c)}this.element.addClass("ui-helper-hidden-accessible");(a=this.element.is(":checked"))&&this.buttonElement.addClass("ui-state-active");this.buttonElement.attr("aria-pressed",a)}else this.buttonElement=this.element},
-widget:function(){return this.buttonElement},destroy:function(){this.element.removeClass("ui-helper-hidden-accessible");this.buttonElement.removeClass("ui-button ui-widget ui-state-default ui-corner-all ui-state-hover ui-state-active ui-button-icons-only ui-button-icon-only ui-button-text-icons ui-button-text-icon-primary ui-button-text-icon-secondary ui-button-text-only").removeAttr("role").removeAttr("aria-pressed").html(this.buttonElement.find(".ui-button-text").html());this.hasTitle||this.buttonElement.removeAttr("title");
-b.Widget.prototype.destroy.call(this)},_setOption:function(a,c){b.Widget.prototype._setOption.apply(this,arguments);if(a==="disabled")c?this.element.attr("disabled",true):this.element.removeAttr("disabled");else this._resetButton()},refresh:function(){var a=this.element.is(":disabled");a!==this.options.disabled&&this._setOption("disabled",a);if(this.type==="radio")k(this.element[0]).each(function(){b(this).is(":checked")?b(this).button("widget").addClass("ui-state-active").attr("aria-pressed",true):
-b(this).button("widget").removeClass("ui-state-active").attr("aria-pressed",false)});else if(this.type==="checkbox")this.element.is(":checked")?this.buttonElement.addClass("ui-state-active").attr("aria-pressed",true):this.buttonElement.removeClass("ui-state-active").attr("aria-pressed",false)},_resetButton:function(){if(this.type==="input")this.options.label&&this.element.val(this.options.label);else{var a=this.buttonElement.removeClass("ui-button-icons-only ui-button-icon-only ui-button-text-icons ui-button-text-icon-primary ui-button-text-icon-secondary ui-button-text-only"),
-c=b("<span></span>").addClass("ui-button-text").html(this.options.label).appendTo(a.empty()).text(),e=this.options.icons,f=e.primary&&e.secondary,d=[];if(e.primary||e.secondary){if(this.options.text)d.push("ui-button-text-icon"+(f?"s":e.primary?"-primary":"-secondary"));e.primary&&a.prepend("<span class='ui-button-icon-primary ui-icon "+e.primary+"'></span>");e.secondary&&a.append("<span class='ui-button-icon-secondary ui-icon "+e.secondary+"'></span>");if(!this.options.text){d.push(f?"ui-button-icons-only":
-"ui-button-icon-only");this.hasTitle||a.attr("title",c)}}else d.push("ui-button-text-only");a.addClass(d.join(" "))}}});b.widget("ui.buttonset",{options:{items:":button, :submit, :reset, :checkbox, :radio, a, :data(button)"},_create:function(){this.element.addClass("ui-buttonset")},_init:function(){this.refresh()},_setOption:function(a,c){a==="disabled"&&this.buttons.button("option",a,c);b.Widget.prototype._setOption.apply(this,arguments)},refresh:function(){var a=this.element.css("direction")===
-"ltr";this.buttons=this.element.find(this.options.items).filter(":ui-button").button("refresh").end().not(":ui-button").button().end().map(function(){return b(this).button("widget")[0]}).removeClass("ui-corner-all ui-corner-left ui-corner-right").filter(":first").addClass(a?"ui-corner-left":"ui-corner-right").end().filter(":last").addClass(a?"ui-corner-right":"ui-corner-left").end().end()},destroy:function(){this.element.removeClass("ui-buttonset");this.buttons.map(function(){return b(this).button("widget")[0]}).removeClass("ui-corner-left ui-corner-right").end().button("destroy");
-b.Widget.prototype.destroy.call(this)}})})(jQuery);
-;/*
- * jQuery UI Dialog 1.8.14
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Dialog
- *
- * Depends:
- * jquery.ui.core.js
- * jquery.ui.widget.js
- * jquery.ui.button.js
- * jquery.ui.draggable.js
- * jquery.ui.mouse.js
- * jquery.ui.position.js
- * jquery.ui.resizable.js
- */
-(function(c,l){var m={buttons:true,height:true,maxHeight:true,maxWidth:true,minHeight:true,minWidth:true,width:true},n={maxHeight:true,maxWidth:true,minHeight:true,minWidth:true},o=c.attrFn||{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true,click:true};c.widget("ui.dialog",{options:{autoOpen:true,buttons:{},closeOnEscape:true,closeText:"close",dialogClass:"",draggable:true,hide:null,height:"auto",maxHeight:false,maxWidth:false,minHeight:150,minWidth:150,modal:false,
-position:{my:"center",at:"center",collision:"fit",using:function(a){var b=c(this).css(a).offset().top;b<0&&c(this).css("top",a.top-b)}},resizable:true,show:null,stack:true,title:"",width:300,zIndex:1E3},_create:function(){this.originalTitle=this.element.attr("title");if(typeof this.originalTitle!=="string")this.originalTitle="";this.options.title=this.options.title||this.originalTitle;var a=this,b=a.options,d=b.title||" ",e=c.ui.dialog.getTitleId(a.element),g=(a.uiDialog=c("<div></div>")).appendTo(document.body).hide().addClass("ui-dialog ui-widget ui-widget-content ui-corner-all "+
-b.dialogClass).css({zIndex:b.zIndex}).attr("tabIndex",-1).css("outline",0).keydown(function(i){if(b.closeOnEscape&&i.keyCode&&i.keyCode===c.ui.keyCode.ESCAPE){a.close(i);i.preventDefault()}}).attr({role:"dialog","aria-labelledby":e}).mousedown(function(i){a.moveToTop(false,i)});a.element.show().removeAttr("title").addClass("ui-dialog-content ui-widget-content").appendTo(g);var f=(a.uiDialogTitlebar=c("<div></div>")).addClass("ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix").prependTo(g),
-h=c('<a href="#"></a>').addClass("ui-dialog-titlebar-close ui-corner-all").attr("role","button").hover(function(){h.addClass("ui-state-hover")},function(){h.removeClass("ui-state-hover")}).focus(function(){h.addClass("ui-state-focus")}).blur(function(){h.removeClass("ui-state-focus")}).click(function(i){a.close(i);return false}).appendTo(f);(a.uiDialogTitlebarCloseText=c("<span></span>")).addClass("ui-icon ui-icon-closethick").text(b.closeText).appendTo(h);c("<span></span>").addClass("ui-dialog-title").attr("id",
-e).html(d).prependTo(f);if(c.isFunction(b.beforeclose)&&!c.isFunction(b.beforeClose))b.beforeClose=b.beforeclose;f.find("*").add(f).disableSelection();b.draggable&&c.fn.draggable&&a._makeDraggable();b.resizable&&c.fn.resizable&&a._makeResizable();a._createButtons(b.buttons);a._isOpen=false;c.fn.bgiframe&&g.bgiframe()},_init:function(){this.options.autoOpen&&this.open()},destroy:function(){var a=this;a.overlay&&a.overlay.destroy();a.uiDialog.hide();a.element.unbind(".dialog").removeData("dialog").removeClass("ui-dialog-content ui-widget-content").hide().appendTo("body");
-a.uiDialog.remove();a.originalTitle&&a.element.attr("title",a.originalTitle);return a},widget:function(){return this.uiDialog},close:function(a){var b=this,d,e;if(false!==b._trigger("beforeClose",a)){b.overlay&&b.overlay.destroy();b.uiDialog.unbind("keypress.ui-dialog");b._isOpen=false;if(b.options.hide)b.uiDialog.hide(b.options.hide,function(){b._trigger("close",a)});else{b.uiDialog.hide();b._trigger("close",a)}c.ui.dialog.overlay.resize();if(b.options.modal){d=0;c(".ui-dialog").each(function(){if(this!==
-b.uiDialog[0]){e=c(this).css("z-index");isNaN(e)||(d=Math.max(d,e))}});c.ui.dialog.maxZ=d}return b}},isOpen:function(){return this._isOpen},moveToTop:function(a,b){var d=this,e=d.options;if(e.modal&&!a||!e.stack&&!e.modal)return d._trigger("focus",b);if(e.zIndex>c.ui.dialog.maxZ)c.ui.dialog.maxZ=e.zIndex;if(d.overlay){c.ui.dialog.maxZ+=1;d.overlay.$el.css("z-index",c.ui.dialog.overlay.maxZ=c.ui.dialog.maxZ)}a={scrollTop:d.element.attr("scrollTop"),scrollLeft:d.element.attr("scrollLeft")};c.ui.dialog.maxZ+=
-1;d.uiDialog.css("z-index",c.ui.dialog.maxZ);d.element.attr(a);d._trigger("focus",b);return d},open:function(){if(!this._isOpen){var a=this,b=a.options,d=a.uiDialog;a.overlay=b.modal?new c.ui.dialog.overlay(a):null;a._size();a._position(b.position);d.show(b.show);a.moveToTop(true);b.modal&&d.bind("keypress.ui-dialog",function(e){if(e.keyCode===c.ui.keyCode.TAB){var g=c(":tabbable",this),f=g.filter(":first");g=g.filter(":last");if(e.target===g[0]&&!e.shiftKey){f.focus(1);return false}else if(e.target===
-f[0]&&e.shiftKey){g.focus(1);return false}}});c(a.element.find(":tabbable").get().concat(d.find(".ui-dialog-buttonpane :tabbable").get().concat(d.get()))).eq(0).focus();a._isOpen=true;a._trigger("open");return a}},_createButtons:function(a){var b=this,d=false,e=c("<div></div>").addClass("ui-dialog-buttonpane ui-widget-content ui-helper-clearfix"),g=c("<div></div>").addClass("ui-dialog-buttonset").appendTo(e);b.uiDialog.find(".ui-dialog-buttonpane").remove();typeof a==="object"&&a!==null&&c.each(a,
-function(){return!(d=true)});if(d){c.each(a,function(f,h){h=c.isFunction(h)?{click:h,text:f}:h;var i=c('<button type="button"></button>').click(function(){h.click.apply(b.element[0],arguments)}).appendTo(g);c.each(h,function(j,k){if(j!=="click")j in o?i[j](k):i.attr(j,k)});c.fn.button&&i.button()});e.appendTo(b.uiDialog)}},_makeDraggable:function(){function a(f){return{position:f.position,offset:f.offset}}var b=this,d=b.options,e=c(document),g;b.uiDialog.draggable({cancel:".ui-dialog-content, .ui-dialog-titlebar-close",
-handle:".ui-dialog-titlebar",containment:"document",start:function(f,h){g=d.height==="auto"?"auto":c(this).height();c(this).height(c(this).height()).addClass("ui-dialog-dragging");b._trigger("dragStart",f,a(h))},drag:function(f,h){b._trigger("drag",f,a(h))},stop:function(f,h){d.position=[h.position.left-e.scrollLeft(),h.position.top-e.scrollTop()];c(this).removeClass("ui-dialog-dragging").height(g);b._trigger("dragStop",f,a(h));c.ui.dialog.overlay.resize()}})},_makeResizable:function(a){function b(f){return{originalPosition:f.originalPosition,
-originalSize:f.originalSize,position:f.position,size:f.size}}a=a===l?this.options.resizable:a;var d=this,e=d.options,g=d.uiDialog.css("position");a=typeof a==="string"?a:"n,e,s,w,se,sw,ne,nw";d.uiDialog.resizable({cancel:".ui-dialog-content",containment:"document",alsoResize:d.element,maxWidth:e.maxWidth,maxHeight:e.maxHeight,minWidth:e.minWidth,minHeight:d._minHeight(),handles:a,start:function(f,h){c(this).addClass("ui-dialog-resizing");d._trigger("resizeStart",f,b(h))},resize:function(f,h){d._trigger("resize",
-f,b(h))},stop:function(f,h){c(this).removeClass("ui-dialog-resizing");e.height=c(this).height();e.width=c(this).width();d._trigger("resizeStop",f,b(h));c.ui.dialog.overlay.resize()}}).css("position",g).find(".ui-resizable-se").addClass("ui-icon ui-icon-grip-diagonal-se")},_minHeight:function(){var a=this.options;return a.height==="auto"?a.minHeight:Math.min(a.minHeight,a.height)},_position:function(a){var b=[],d=[0,0],e;if(a){if(typeof a==="string"||typeof a==="object"&&"0"in a){b=a.split?a.split(" "):
-[a[0],a[1]];if(b.length===1)b[1]=b[0];c.each(["left","top"],function(g,f){if(+b[g]===b[g]){d[g]=b[g];b[g]=f}});a={my:b.join(" "),at:b.join(" "),offset:d.join(" ")}}a=c.extend({},c.ui.dialog.prototype.options.position,a)}else a=c.ui.dialog.prototype.options.position;(e=this.uiDialog.is(":visible"))||this.uiDialog.show();this.uiDialog.css({top:0,left:0}).position(c.extend({of:window},a));e||this.uiDialog.hide()},_setOptions:function(a){var b=this,d={},e=false;c.each(a,function(g,f){b._setOption(g,f);
-if(g in m)e=true;if(g in n)d[g]=f});e&&this._size();this.uiDialog.is(":data(resizable)")&&this.uiDialog.resizable("option",d)},_setOption:function(a,b){var d=this,e=d.uiDialog;switch(a){case "beforeclose":a="beforeClose";break;case "buttons":d._createButtons(b);break;case "closeText":d.uiDialogTitlebarCloseText.text(""+b);break;case "dialogClass":e.removeClass(d.options.dialogClass).addClass("ui-dialog ui-widget ui-widget-content ui-corner-all "+b);break;case "disabled":b?e.addClass("ui-dialog-disabled"):
-e.removeClass("ui-dialog-disabled");break;case "draggable":var g=e.is(":data(draggable)");g&&!b&&e.draggable("destroy");!g&&b&&d._makeDraggable();break;case "position":d._position(b);break;case "resizable":(g=e.is(":data(resizable)"))&&!b&&e.resizable("destroy");g&&typeof b==="string"&&e.resizable("option","handles",b);!g&&b!==false&&d._makeResizable(b);break;case "title":c(".ui-dialog-title",d.uiDialogTitlebar).html(""+(b||" "));break}c.Widget.prototype._setOption.apply(d,arguments)},_size:function(){var a=
-this.options,b,d,e=this.uiDialog.is(":visible");this.element.show().css({width:"auto",minHeight:0,height:0});if(a.minWidth>a.width)a.width=a.minWidth;b=this.uiDialog.css({height:"auto",width:a.width}).height();d=Math.max(0,a.minHeight-b);if(a.height==="auto")if(c.support.minHeight)this.element.css({minHeight:d,height:"auto"});else{this.uiDialog.show();a=this.element.css("height","auto").height();e||this.uiDialog.hide();this.element.height(Math.max(a,d))}else this.element.height(Math.max(a.height-
-b,0));this.uiDialog.is(":data(resizable)")&&this.uiDialog.resizable("option","minHeight",this._minHeight())}});c.extend(c.ui.dialog,{version:"1.8.14",uuid:0,maxZ:0,getTitleId:function(a){a=a.attr("id");if(!a){this.uuid+=1;a=this.uuid}return"ui-dialog-title-"+a},overlay:function(a){this.$el=c.ui.dialog.overlay.create(a)}});c.extend(c.ui.dialog.overlay,{instances:[],oldInstances:[],maxZ:0,events:c.map("focus,mousedown,mouseup,keydown,keypress,click".split(","),function(a){return a+".dialog-overlay"}).join(" "),
-create:function(a){if(this.instances.length===0){setTimeout(function(){c.ui.dialog.overlay.instances.length&&c(document).bind(c.ui.dialog.overlay.events,function(d){if(c(d.target).zIndex()<c.ui.dialog.overlay.maxZ)return false})},1);c(document).bind("keydown.dialog-overlay",function(d){if(a.options.closeOnEscape&&d.keyCode&&d.keyCode===c.ui.keyCode.ESCAPE){a.close(d);d.preventDefault()}});c(window).bind("resize.dialog-overlay",c.ui.dialog.overlay.resize)}var b=(this.oldInstances.pop()||c("<div></div>").addClass("ui-widget-overlay")).appendTo(document.body).css({width:this.width(),
-height:this.height()});c.fn.bgiframe&&b.bgiframe();this.instances.push(b);return b},destroy:function(a){var b=c.inArray(a,this.instances);b!=-1&&this.oldInstances.push(this.instances.splice(b,1)[0]);this.instances.length===0&&c([document,window]).unbind(".dialog-overlay");a.remove();var d=0;c.each(this.instances,function(){d=Math.max(d,this.css("z-index"))});this.maxZ=d},height:function(){var a,b;if(c.browser.msie&&c.browser.version<7){a=Math.max(document.documentElement.scrollHeight,document.body.scrollHeight);
-b=Math.max(document.documentElement.offsetHeight,document.body.offsetHeight);return a<b?c(window).height()+"px":a+"px"}else return c(document).height()+"px"},width:function(){var a,b;if(c.browser.msie){a=Math.max(document.documentElement.scrollWidth,document.body.scrollWidth);b=Math.max(document.documentElement.offsetWidth,document.body.offsetWidth);return a<b?c(window).width()+"px":a+"px"}else return c(document).width()+"px"},resize:function(){var a=c([]);c.each(c.ui.dialog.overlay.instances,function(){a=
-a.add(this)});a.css({width:0,height:0}).css({width:c.ui.dialog.overlay.width(),height:c.ui.dialog.overlay.height()})}});c.extend(c.ui.dialog.overlay.prototype,{destroy:function(){c.ui.dialog.overlay.destroy(this.$el)}})})(jQuery);
-;/*
- * jQuery UI Slider 1.8.14
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Slider
- *
- * Depends:
- * jquery.ui.core.js
- * jquery.ui.mouse.js
- * jquery.ui.widget.js
- */
-(function(d){d.widget("ui.slider",d.ui.mouse,{widgetEventPrefix:"slide",options:{animate:false,distance:0,max:100,min:0,orientation:"horizontal",range:false,step:1,value:0,values:null},_create:function(){var b=this,a=this.options,c=this.element.find(".ui-slider-handle").addClass("ui-state-default ui-corner-all"),f=a.values&&a.values.length||1,e=[];this._mouseSliding=this._keySliding=false;this._animateOff=true;this._handleIndex=null;this._detectOrientation();this._mouseInit();this.element.addClass("ui-slider ui-slider-"+
-this.orientation+" ui-widget ui-widget-content ui-corner-all"+(a.disabled?" ui-slider-disabled ui-disabled":""));this.range=d([]);if(a.range){if(a.range===true){if(!a.values)a.values=[this._valueMin(),this._valueMin()];if(a.values.length&&a.values.length!==2)a.values=[a.values[0],a.values[0]]}this.range=d("<div></div>").appendTo(this.element).addClass("ui-slider-range ui-widget-header"+(a.range==="min"||a.range==="max"?" ui-slider-range-"+a.range:""))}for(var j=c.length;j<f;j+=1)e.push("<a class='ui-slider-handle ui-state-default ui-corner-all' href='#'></a>");
-this.handles=c.add(d(e.join("")).appendTo(b.element));this.handle=this.handles.eq(0);this.handles.add(this.range).filter("a").click(function(g){g.preventDefault()}).hover(function(){a.disabled||d(this).addClass("ui-state-hover")},function(){d(this).removeClass("ui-state-hover")}).focus(function(){if(a.disabled)d(this).blur();else{d(".ui-slider .ui-state-focus").removeClass("ui-state-focus");d(this).addClass("ui-state-focus")}}).blur(function(){d(this).removeClass("ui-state-focus")});this.handles.each(function(g){d(this).data("index.ui-slider-handle",
-g)});this.handles.keydown(function(g){var k=true,l=d(this).data("index.ui-slider-handle"),i,h,m;if(!b.options.disabled){switch(g.keyCode){case d.ui.keyCode.HOME:case d.ui.keyCode.END:case d.ui.keyCode.PAGE_UP:case d.ui.keyCode.PAGE_DOWN:case d.ui.keyCode.UP:case d.ui.keyCode.RIGHT:case d.ui.keyCode.DOWN:case d.ui.keyCode.LEFT:k=false;if(!b._keySliding){b._keySliding=true;d(this).addClass("ui-state-active");i=b._start(g,l);if(i===false)return}break}m=b.options.step;i=b.options.values&&b.options.values.length?
-(h=b.values(l)):(h=b.value());switch(g.keyCode){case d.ui.keyCode.HOME:h=b._valueMin();break;case d.ui.keyCode.END:h=b._valueMax();break;case d.ui.keyCode.PAGE_UP:h=b._trimAlignValue(i+(b._valueMax()-b._valueMin())/5);break;case d.ui.keyCode.PAGE_DOWN:h=b._trimAlignValue(i-(b._valueMax()-b._valueMin())/5);break;case d.ui.keyCode.UP:case d.ui.keyCode.RIGHT:if(i===b._valueMax())return;h=b._trimAlignValue(i+m);break;case d.ui.keyCode.DOWN:case d.ui.keyCode.LEFT:if(i===b._valueMin())return;h=b._trimAlignValue(i-
-m);break}b._slide(g,l,h);return k}}).keyup(function(g){var k=d(this).data("index.ui-slider-handle");if(b._keySliding){b._keySliding=false;b._stop(g,k);b._change(g,k);d(this).removeClass("ui-state-active")}});this._refreshValue();this._animateOff=false},destroy:function(){this.handles.remove();this.range.remove();this.element.removeClass("ui-slider ui-slider-horizontal ui-slider-vertical ui-slider-disabled ui-widget ui-widget-content ui-corner-all").removeData("slider").unbind(".slider");this._mouseDestroy();
-return this},_mouseCapture:function(b){var a=this.options,c,f,e,j,g;if(a.disabled)return false;this.elementSize={width:this.element.outerWidth(),height:this.element.outerHeight()};this.elementOffset=this.element.offset();c=this._normValueFromMouse({x:b.pageX,y:b.pageY});f=this._valueMax()-this._valueMin()+1;j=this;this.handles.each(function(k){var l=Math.abs(c-j.values(k));if(f>l){f=l;e=d(this);g=k}});if(a.range===true&&this.values(1)===a.min){g+=1;e=d(this.handles[g])}if(this._start(b,g)===false)return false;
-this._mouseSliding=true;j._handleIndex=g;e.addClass("ui-state-active").focus();a=e.offset();this._clickOffset=!d(b.target).parents().andSelf().is(".ui-slider-handle")?{left:0,top:0}:{left:b.pageX-a.left-e.width()/2,top:b.pageY-a.top-e.height()/2-(parseInt(e.css("borderTopWidth"),10)||0)-(parseInt(e.css("borderBottomWidth"),10)||0)+(parseInt(e.css("marginTop"),10)||0)};this.handles.hasClass("ui-state-hover")||this._slide(b,g,c);return this._animateOff=true},_mouseStart:function(){return true},_mouseDrag:function(b){var a=
-this._normValueFromMouse({x:b.pageX,y:b.pageY});this._slide(b,this._handleIndex,a);return false},_mouseStop:function(b){this.handles.removeClass("ui-state-active");this._mouseSliding=false;this._stop(b,this._handleIndex);this._change(b,this._handleIndex);this._clickOffset=this._handleIndex=null;return this._animateOff=false},_detectOrientation:function(){this.orientation=this.options.orientation==="vertical"?"vertical":"horizontal"},_normValueFromMouse:function(b){var a;if(this.orientation==="horizontal"){a=
-this.elementSize.width;b=b.x-this.elementOffset.left-(this._clickOffset?this._clickOffset.left:0)}else{a=this.elementSize.height;b=b.y-this.elementOffset.top-(this._clickOffset?this._clickOffset.top:0)}a=b/a;if(a>1)a=1;if(a<0)a=0;if(this.orientation==="vertical")a=1-a;b=this._valueMax()-this._valueMin();return this._trimAlignValue(this._valueMin()+a*b)},_start:function(b,a){var c={handle:this.handles[a],value:this.value()};if(this.options.values&&this.options.values.length){c.value=this.values(a);
-c.values=this.values()}return this._trigger("start",b,c)},_slide:function(b,a,c){var f;if(this.options.values&&this.options.values.length){f=this.values(a?0:1);if(this.options.values.length===2&&this.options.range===true&&(a===0&&c>f||a===1&&c<f))c=f;if(c!==this.values(a)){f=this.values();f[a]=c;b=this._trigger("slide",b,{handle:this.handles[a],value:c,values:f});this.values(a?0:1);b!==false&&this.values(a,c,true)}}else if(c!==this.value()){b=this._trigger("slide",b,{handle:this.handles[a],value:c});
-b!==false&&this.value(c)}},_stop:function(b,a){var c={handle:this.handles[a],value:this.value()};if(this.options.values&&this.options.values.length){c.value=this.values(a);c.values=this.values()}this._trigger("stop",b,c)},_change:function(b,a){if(!this._keySliding&&!this._mouseSliding){var c={handle:this.handles[a],value:this.value()};if(this.options.values&&this.options.values.length){c.value=this.values(a);c.values=this.values()}this._trigger("change",b,c)}},value:function(b){if(arguments.length){this.options.value=
-this._trimAlignValue(b);this._refreshValue();this._change(null,0)}else return this._value()},values:function(b,a){var c,f,e;if(arguments.length>1){this.options.values[b]=this._trimAlignValue(a);this._refreshValue();this._change(null,b)}else if(arguments.length)if(d.isArray(arguments[0])){c=this.options.values;f=arguments[0];for(e=0;e<c.length;e+=1){c[e]=this._trimAlignValue(f[e]);this._change(null,e)}this._refreshValue()}else return this.options.values&&this.options.values.length?this._values(b):
-this.value();else return this._values()},_setOption:function(b,a){var c,f=0;if(d.isArray(this.options.values))f=this.options.values.length;d.Widget.prototype._setOption.apply(this,arguments);switch(b){case "disabled":if(a){this.handles.filter(".ui-state-focus").blur();this.handles.removeClass("ui-state-hover");this.handles.attr("disabled","disabled");this.element.addClass("ui-disabled")}else{this.handles.removeAttr("disabled");this.element.removeClass("ui-disabled")}break;case "orientation":this._detectOrientation();
-this.element.removeClass("ui-slider-horizontal ui-slider-vertical").addClass("ui-slider-"+this.orientation);this._refreshValue();break;case "value":this._animateOff=true;this._refreshValue();this._change(null,0);this._animateOff=false;break;case "values":this._animateOff=true;this._refreshValue();for(c=0;c<f;c+=1)this._change(null,c);this._animateOff=false;break}},_value:function(){var b=this.options.value;return b=this._trimAlignValue(b)},_values:function(b){var a,c;if(arguments.length){a=this.options.values[b];
-return a=this._trimAlignValue(a)}else{a=this.options.values.slice();for(c=0;c<a.length;c+=1)a[c]=this._trimAlignValue(a[c]);return a}},_trimAlignValue:function(b){if(b<=this._valueMin())return this._valueMin();if(b>=this._valueMax())return this._valueMax();var a=this.options.step>0?this.options.step:1,c=(b-this._valueMin())%a;alignValue=b-c;if(Math.abs(c)*2>=a)alignValue+=c>0?a:-a;return parseFloat(alignValue.toFixed(5))},_valueMin:function(){return this.options.min},_valueMax:function(){return this.options.max},
-_refreshValue:function(){var b=this.options.range,a=this.options,c=this,f=!this._animateOff?a.animate:false,e,j={},g,k,l,i;if(this.options.values&&this.options.values.length)this.handles.each(function(h){e=(c.values(h)-c._valueMin())/(c._valueMax()-c._valueMin())*100;j[c.orientation==="horizontal"?"left":"bottom"]=e+"%";d(this).stop(1,1)[f?"animate":"css"](j,a.animate);if(c.options.range===true)if(c.orientation==="horizontal"){if(h===0)c.range.stop(1,1)[f?"animate":"css"]({left:e+"%"},a.animate);
-if(h===1)c.range[f?"animate":"css"]({width:e-g+"%"},{queue:false,duration:a.animate})}else{if(h===0)c.range.stop(1,1)[f?"animate":"css"]({bottom:e+"%"},a.animate);if(h===1)c.range[f?"animate":"css"]({height:e-g+"%"},{queue:false,duration:a.animate})}g=e});else{k=this.value();l=this._valueMin();i=this._valueMax();e=i!==l?(k-l)/(i-l)*100:0;j[c.orientation==="horizontal"?"left":"bottom"]=e+"%";this.handle.stop(1,1)[f?"animate":"css"](j,a.animate);if(b==="min"&&this.orientation==="horizontal")this.range.stop(1,
-1)[f?"animate":"css"]({width:e+"%"},a.animate);if(b==="max"&&this.orientation==="horizontal")this.range[f?"animate":"css"]({width:100-e+"%"},{queue:false,duration:a.animate});if(b==="min"&&this.orientation==="vertical")this.range.stop(1,1)[f?"animate":"css"]({height:e+"%"},a.animate);if(b==="max"&&this.orientation==="vertical")this.range[f?"animate":"css"]({height:100-e+"%"},{queue:false,duration:a.animate})}}});d.extend(d.ui.slider,{version:"1.8.14"})})(jQuery);
-;/*
- * jQuery UI Tabs 1.8.14
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Tabs
- *
- * Depends:
- * jquery.ui.core.js
- * jquery.ui.widget.js
- */
-(function(d,p){function u(){return++v}function w(){return++x}var v=0,x=0;d.widget("ui.tabs",{options:{add:null,ajaxOptions:null,cache:false,cookie:null,collapsible:false,disable:null,disabled:[],enable:null,event:"click",fx:null,idPrefix:"ui-tabs-",load:null,panelTemplate:"<div></div>",remove:null,select:null,show:null,spinner:"<em>Loading…</em>",tabTemplate:"<li><a href='#{href}'><span>#{label}</span></a></li>"},_create:function(){this._tabify(true)},_setOption:function(b,e){if(b=="selected")this.options.collapsible&&
-e==this.options.selected||this.select(e);else{this.options[b]=e;this._tabify()}},_tabId:function(b){return b.title&&b.title.replace(/\s/g,"_").replace(/[^\w\u00c0-\uFFFF-]/g,"")||this.options.idPrefix+u()},_sanitizeSelector:function(b){return b.replace(/:/g,"\\:")},_cookie:function(){var b=this.cookie||(this.cookie=this.options.cookie.name||"ui-tabs-"+w());return d.cookie.apply(null,[b].concat(d.makeArray(arguments)))},_ui:function(b,e){return{tab:b,panel:e,index:this.anchors.index(b)}},_cleanup:function(){this.lis.filter(".ui-state-processing").removeClass("ui-state-processing").find("span:data(label.tabs)").each(function(){var b=
-d(this);b.html(b.data("label.tabs")).removeData("label.tabs")})},_tabify:function(b){function e(g,f){g.css("display","");!d.support.opacity&&f.opacity&&g[0].style.removeAttribute("filter")}var a=this,c=this.options,h=/^#.+/;this.list=this.element.find("ol,ul").eq(0);this.lis=d(" > li:has(a[href])",this.list);this.anchors=this.lis.map(function(){return d("a",this)[0]});this.panels=d([]);this.anchors.each(function(g,f){var i=d(f).attr("href"),l=i.split("#")[0],q;if(l&&(l===location.toString().split("#")[0]||
-(q=d("base")[0])&&l===q.href)){i=f.hash;f.href=i}if(h.test(i))a.panels=a.panels.add(a.element.find(a._sanitizeSelector(i)));else if(i&&i!=="#"){d.data(f,"href.tabs",i);d.data(f,"load.tabs",i.replace(/#.*$/,""));i=a._tabId(f);f.href="#"+i;f=a.element.find("#"+i);if(!f.length){f=d(c.panelTemplate).attr("id",i).addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").insertAfter(a.panels[g-1]||a.list);f.data("destroy.tabs",true)}a.panels=a.panels.add(f)}else c.disabled.push(g)});if(b){this.element.addClass("ui-tabs ui-widget ui-widget-content ui-corner-all");
-this.list.addClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all");this.lis.addClass("ui-state-default ui-corner-top");this.panels.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom");if(c.selected===p){location.hash&&this.anchors.each(function(g,f){if(f.hash==location.hash){c.selected=g;return false}});if(typeof c.selected!=="number"&&c.cookie)c.selected=parseInt(a._cookie(),10);if(typeof c.selected!=="number"&&this.lis.filter(".ui-tabs-selected").length)c.selected=
-this.lis.index(this.lis.filter(".ui-tabs-selected"));c.selected=c.selected||(this.lis.length?0:-1)}else if(c.selected===null)c.selected=-1;c.selected=c.selected>=0&&this.anchors[c.selected]||c.selected<0?c.selected:0;c.disabled=d.unique(c.disabled.concat(d.map(this.lis.filter(".ui-state-disabled"),function(g){return a.lis.index(g)}))).sort();d.inArray(c.selected,c.disabled)!=-1&&c.disabled.splice(d.inArray(c.selected,c.disabled),1);this.panels.addClass("ui-tabs-hide");this.lis.removeClass("ui-tabs-selected ui-state-active");
-if(c.selected>=0&&this.anchors.length){a.element.find(a._sanitizeSelector(a.anchors[c.selected].hash)).removeClass("ui-tabs-hide");this.lis.eq(c.selected).addClass("ui-tabs-selected ui-state-active");a.element.queue("tabs",function(){a._trigger("show",null,a._ui(a.anchors[c.selected],a.element.find(a._sanitizeSelector(a.anchors[c.selected].hash))[0]))});this.load(c.selected)}d(window).bind("unload",function(){a.lis.add(a.anchors).unbind(".tabs");a.lis=a.anchors=a.panels=null})}else c.selected=this.lis.index(this.lis.filter(".ui-tabs-selected"));
-this.element[c.collapsible?"addClass":"removeClass"]("ui-tabs-collapsible");c.cookie&&this._cookie(c.selected,c.cookie);b=0;for(var j;j=this.lis[b];b++)d(j)[d.inArray(b,c.disabled)!=-1&&!d(j).hasClass("ui-tabs-selected")?"addClass":"removeClass"]("ui-state-disabled");c.cache===false&&this.anchors.removeData("cache.tabs");this.lis.add(this.anchors).unbind(".tabs");if(c.event!=="mouseover"){var k=function(g,f){f.is(":not(.ui-state-disabled)")&&f.addClass("ui-state-"+g)},n=function(g,f){f.removeClass("ui-state-"+
-g)};this.lis.bind("mouseover.tabs",function(){k("hover",d(this))});this.lis.bind("mouseout.tabs",function(){n("hover",d(this))});this.anchors.bind("focus.tabs",function(){k("focus",d(this).closest("li"))});this.anchors.bind("blur.tabs",function(){n("focus",d(this).closest("li"))})}var m,o;if(c.fx)if(d.isArray(c.fx)){m=c.fx[0];o=c.fx[1]}else m=o=c.fx;var r=o?function(g,f){d(g).closest("li").addClass("ui-tabs-selected ui-state-active");f.hide().removeClass("ui-tabs-hide").animate(o,o.duration||"normal",
-function(){e(f,o);a._trigger("show",null,a._ui(g,f[0]))})}:function(g,f){d(g).closest("li").addClass("ui-tabs-selected ui-state-active");f.removeClass("ui-tabs-hide");a._trigger("show",null,a._ui(g,f[0]))},s=m?function(g,f){f.animate(m,m.duration||"normal",function(){a.lis.removeClass("ui-tabs-selected ui-state-active");f.addClass("ui-tabs-hide");e(f,m);a.element.dequeue("tabs")})}:function(g,f){a.lis.removeClass("ui-tabs-selected ui-state-active");f.addClass("ui-tabs-hide");a.element.dequeue("tabs")};
-this.anchors.bind(c.event+".tabs",function(){var g=this,f=d(g).closest("li"),i=a.panels.filter(":not(.ui-tabs-hide)"),l=a.element.find(a._sanitizeSelector(g.hash));if(f.hasClass("ui-tabs-selected")&&!c.collapsible||f.hasClass("ui-state-disabled")||f.hasClass("ui-state-processing")||a.panels.filter(":animated").length||a._trigger("select",null,a._ui(this,l[0]))===false){this.blur();return false}c.selected=a.anchors.index(this);a.abort();if(c.collapsible)if(f.hasClass("ui-tabs-selected")){c.selected=
--1;c.cookie&&a._cookie(c.selected,c.cookie);a.element.queue("tabs",function(){s(g,i)}).dequeue("tabs");this.blur();return false}else if(!i.length){c.cookie&&a._cookie(c.selected,c.cookie);a.element.queue("tabs",function(){r(g,l)});a.load(a.anchors.index(this));this.blur();return false}c.cookie&&a._cookie(c.selected,c.cookie);if(l.length){i.length&&a.element.queue("tabs",function(){s(g,i)});a.element.queue("tabs",function(){r(g,l)});a.load(a.anchors.index(this))}else throw"jQuery UI Tabs: Mismatching fragment identifier.";
-d.browser.msie&&this.blur()});this.anchors.bind("click.tabs",function(){return false})},_getIndex:function(b){if(typeof b=="string")b=this.anchors.index(this.anchors.filter("[href$="+b+"]"));return b},destroy:function(){var b=this.options;this.abort();this.element.unbind(".tabs").removeClass("ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible").removeData("tabs");this.list.removeClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all");this.anchors.each(function(){var e=
-d.data(this,"href.tabs");if(e)this.href=e;var a=d(this).unbind(".tabs");d.each(["href","load","cache"],function(c,h){a.removeData(h+".tabs")})});this.lis.unbind(".tabs").add(this.panels).each(function(){d.data(this,"destroy.tabs")?d(this).remove():d(this).removeClass("ui-state-default ui-corner-top ui-tabs-selected ui-state-active ui-state-hover ui-state-focus ui-state-disabled ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide")});b.cookie&&this._cookie(null,b.cookie);return this},add:function(b,
-e,a){if(a===p)a=this.anchors.length;var c=this,h=this.options;e=d(h.tabTemplate.replace(/#\{href\}/g,b).replace(/#\{label\}/g,e));b=!b.indexOf("#")?b.replace("#",""):this._tabId(d("a",e)[0]);e.addClass("ui-state-default ui-corner-top").data("destroy.tabs",true);var j=c.element.find("#"+b);j.length||(j=d(h.panelTemplate).attr("id",b).data("destroy.tabs",true));j.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide");if(a>=this.lis.length){e.appendTo(this.list);j.appendTo(this.list[0].parentNode)}else{e.insertBefore(this.lis[a]);
-j.insertBefore(this.panels[a])}h.disabled=d.map(h.disabled,function(k){return k>=a?++k:k});this._tabify();if(this.anchors.length==1){h.selected=0;e.addClass("ui-tabs-selected ui-state-active");j.removeClass("ui-tabs-hide");this.element.queue("tabs",function(){c._trigger("show",null,c._ui(c.anchors[0],c.panels[0]))});this.load(0)}this._trigger("add",null,this._ui(this.anchors[a],this.panels[a]));return this},remove:function(b){b=this._getIndex(b);var e=this.options,a=this.lis.eq(b).remove(),c=this.panels.eq(b).remove();
-if(a.hasClass("ui-tabs-selected")&&this.anchors.length>1)this.select(b+(b+1<this.anchors.length?1:-1));e.disabled=d.map(d.grep(e.disabled,function(h){return h!=b}),function(h){return h>=b?--h:h});this._tabify();this._trigger("remove",null,this._ui(a.find("a")[0],c[0]));return this},enable:function(b){b=this._getIndex(b);var e=this.options;if(d.inArray(b,e.disabled)!=-1){this.lis.eq(b).removeClass("ui-state-disabled");e.disabled=d.grep(e.disabled,function(a){return a!=b});this._trigger("enable",null,
-this._ui(this.anchors[b],this.panels[b]));return this}},disable:function(b){b=this._getIndex(b);var e=this.options;if(b!=e.selected){this.lis.eq(b).addClass("ui-state-disabled");e.disabled.push(b);e.disabled.sort();this._trigger("disable",null,this._ui(this.anchors[b],this.panels[b]))}return this},select:function(b){b=this._getIndex(b);if(b==-1)if(this.options.collapsible&&this.options.selected!=-1)b=this.options.selected;else return this;this.anchors.eq(b).trigger(this.options.event+".tabs");return this},
-load:function(b){b=this._getIndex(b);var e=this,a=this.options,c=this.anchors.eq(b)[0],h=d.data(c,"load.tabs");this.abort();if(!h||this.element.queue("tabs").length!==0&&d.data(c,"cache.tabs"))this.element.dequeue("tabs");else{this.lis.eq(b).addClass("ui-state-processing");if(a.spinner){var j=d("span",c);j.data("label.tabs",j.html()).html(a.spinner)}this.xhr=d.ajax(d.extend({},a.ajaxOptions,{url:h,success:function(k,n){e.element.find(e._sanitizeSelector(c.hash)).html(k);e._cleanup();a.cache&&d.data(c,
-"cache.tabs",true);e._trigger("load",null,e._ui(e.anchors[b],e.panels[b]));try{a.ajaxOptions.success(k,n)}catch(m){}},error:function(k,n){e._cleanup();e._trigger("load",null,e._ui(e.anchors[b],e.panels[b]));try{a.ajaxOptions.error(k,n,b,c)}catch(m){}}}));e.element.dequeue("tabs");return this}},abort:function(){this.element.queue([]);this.panels.stop(false,true);this.element.queue("tabs",this.element.queue("tabs").splice(-2,2));if(this.xhr){this.xhr.abort();delete this.xhr}this._cleanup();return this},
-url:function(b,e){this.anchors.eq(b).removeData("cache.tabs").data("load.tabs",e);return this},length:function(){return this.anchors.length}});d.extend(d.ui.tabs,{version:"1.8.14"});d.extend(d.ui.tabs.prototype,{rotation:null,rotate:function(b,e){var a=this,c=this.options,h=a._rotate||(a._rotate=function(j){clearTimeout(a.rotation);a.rotation=setTimeout(function(){var k=c.selected;a.select(++k<a.anchors.length?k:0)},b);j&&j.stopPropagation()});e=a._unrotate||(a._unrotate=!e?function(j){j.clientX&&
-a.rotate(null)}:function(){t=c.selected;h()});if(b){this.element.bind("tabsshow",h);this.anchors.bind(c.event+".tabs",e);h()}else{clearTimeout(a.rotation);this.element.unbind("tabsshow",h);this.anchors.unbind(c.event+".tabs",e);delete this._rotate;delete this._unrotate}return this}})})(jQuery);
-;/*
- * jQuery UI Datepicker 1.8.14
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Datepicker
- *
- * Depends:
- * jquery.ui.core.js
- */
-(function(d,C){function M(){this.debug=false;this._curInst=null;this._keyEvent=false;this._disabledInputs=[];this._inDialog=this._datepickerShowing=false;this._mainDivId="ui-datepicker-div";this._inlineClass="ui-datepicker-inline";this._appendClass="ui-datepicker-append";this._triggerClass="ui-datepicker-trigger";this._dialogClass="ui-datepicker-dialog";this._disableClass="ui-datepicker-disabled";this._unselectableClass="ui-datepicker-unselectable";this._currentClass="ui-datepicker-current-day";this._dayOverClass=
-"ui-datepicker-days-cell-over";this.regional=[];this.regional[""]={closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su",
-"Mo","Tu","We","Th","Fr","Sa"],weekHeader:"Wk",dateFormat:"mm/dd/yy",firstDay:0,isRTL:false,showMonthAfterYear:false,yearSuffix:""};this._defaults={showOn:"focus",showAnim:"fadeIn",showOptions:{},defaultDate:null,appendText:"",buttonText:"...",buttonImage:"",buttonImageOnly:false,hideIfNoPrevNext:false,navigationAsDateFormat:false,gotoCurrent:false,changeMonth:false,changeYear:false,yearRange:"c-10:c+10",showOtherMonths:false,selectOtherMonths:false,showWeek:false,calculateWeek:this.iso8601Week,shortYearCutoff:"+10",
-minDate:null,maxDate:null,duration:"fast",beforeShowDay:null,beforeShow:null,onSelect:null,onChangeMonthYear:null,onClose:null,numberOfMonths:1,showCurrentAtPos:0,stepMonths:1,stepBigMonths:12,altField:"",altFormat:"",constrainInput:true,showButtonPanel:false,autoSize:false};d.extend(this._defaults,this.regional[""]);this.dpDiv=N(d('<div id="'+this._mainDivId+'" class="ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all"></div>'))}function N(a){return a.bind("mouseout",function(b){b=
-d(b.target).closest("button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a");b.length&&b.removeClass("ui-state-hover ui-datepicker-prev-hover ui-datepicker-next-hover")}).bind("mouseover",function(b){b=d(b.target).closest("button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a");if(!(d.datepicker._isDisabledDatepicker(J.inline?a.parent()[0]:J.input[0])||!b.length)){b.parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover");b.addClass("ui-state-hover");
-b.hasClass("ui-datepicker-prev")&&b.addClass("ui-datepicker-prev-hover");b.hasClass("ui-datepicker-next")&&b.addClass("ui-datepicker-next-hover")}})}function H(a,b){d.extend(a,b);for(var c in b)if(b[c]==null||b[c]==C)a[c]=b[c];return a}d.extend(d.ui,{datepicker:{version:"1.8.14"}});var A=(new Date).getTime(),J;d.extend(M.prototype,{markerClassName:"hasDatepicker",maxRows:4,log:function(){this.debug&&console.log.apply("",arguments)},_widgetDatepicker:function(){return this.dpDiv},setDefaults:function(a){H(this._defaults,
-a||{});return this},_attachDatepicker:function(a,b){var c=null;for(var e in this._defaults){var f=a.getAttribute("date:"+e);if(f){c=c||{};try{c[e]=eval(f)}catch(h){c[e]=f}}}e=a.nodeName.toLowerCase();f=e=="div"||e=="span";if(!a.id){this.uuid+=1;a.id="dp"+this.uuid}var i=this._newInst(d(a),f);i.settings=d.extend({},b||{},c||{});if(e=="input")this._connectDatepicker(a,i);else f&&this._inlineDatepicker(a,i)},_newInst:function(a,b){return{id:a[0].id.replace(/([^A-Za-z0-9_-])/g,"\\\\$1"),input:a,selectedDay:0,
-selectedMonth:0,selectedYear:0,drawMonth:0,drawYear:0,inline:b,dpDiv:!b?this.dpDiv:N(d('<div class="'+this._inlineClass+' ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all"></div>'))}},_connectDatepicker:function(a,b){var c=d(a);b.append=d([]);b.trigger=d([]);if(!c.hasClass(this.markerClassName)){this._attachments(c,b);c.addClass(this.markerClassName).keydown(this._doKeyDown).keypress(this._doKeyPress).keyup(this._doKeyUp).bind("setData.datepicker",function(e,f,h){b.settings[f]=
-h}).bind("getData.datepicker",function(e,f){return this._get(b,f)});this._autoSize(b);d.data(a,"datepicker",b)}},_attachments:function(a,b){var c=this._get(b,"appendText"),e=this._get(b,"isRTL");b.append&&b.append.remove();if(c){b.append=d('<span class="'+this._appendClass+'">'+c+"</span>");a[e?"before":"after"](b.append)}a.unbind("focus",this._showDatepicker);b.trigger&&b.trigger.remove();c=this._get(b,"showOn");if(c=="focus"||c=="both")a.focus(this._showDatepicker);if(c=="button"||c=="both"){c=
-this._get(b,"buttonText");var f=this._get(b,"buttonImage");b.trigger=d(this._get(b,"buttonImageOnly")?d("<img/>").addClass(this._triggerClass).attr({src:f,alt:c,title:c}):d('<button type="button"></button>').addClass(this._triggerClass).html(f==""?c:d("<img/>").attr({src:f,alt:c,title:c})));a[e?"before":"after"](b.trigger);b.trigger.click(function(){d.datepicker._datepickerShowing&&d.datepicker._lastInput==a[0]?d.datepicker._hideDatepicker():d.datepicker._showDatepicker(a[0]);return false})}},_autoSize:function(a){if(this._get(a,
-"autoSize")&&!a.inline){var b=new Date(2009,11,20),c=this._get(a,"dateFormat");if(c.match(/[DM]/)){var e=function(f){for(var h=0,i=0,g=0;g<f.length;g++)if(f[g].length>h){h=f[g].length;i=g}return i};b.setMonth(e(this._get(a,c.match(/MM/)?"monthNames":"monthNamesShort")));b.setDate(e(this._get(a,c.match(/DD/)?"dayNames":"dayNamesShort"))+20-b.getDay())}a.input.attr("size",this._formatDate(a,b).length)}},_inlineDatepicker:function(a,b){var c=d(a);if(!c.hasClass(this.markerClassName)){c.addClass(this.markerClassName).append(b.dpDiv).bind("setData.datepicker",
-function(e,f,h){b.settings[f]=h}).bind("getData.datepicker",function(e,f){return this._get(b,f)});d.data(a,"datepicker",b);this._setDate(b,this._getDefaultDate(b),true);this._updateDatepicker(b);this._updateAlternate(b);b.dpDiv.show()}},_dialogDatepicker:function(a,b,c,e,f){a=this._dialogInst;if(!a){this.uuid+=1;this._dialogInput=d('<input type="text" id="'+("dp"+this.uuid)+'" style="position: absolute; top: -100px; width: 0px; z-index: -10;"/>');this._dialogInput.keydown(this._doKeyDown);d("body").append(this._dialogInput);
-a=this._dialogInst=this._newInst(this._dialogInput,false);a.settings={};d.data(this._dialogInput[0],"datepicker",a)}H(a.settings,e||{});b=b&&b.constructor==Date?this._formatDate(a,b):b;this._dialogInput.val(b);this._pos=f?f.length?f:[f.pageX,f.pageY]:null;if(!this._pos)this._pos=[document.documentElement.clientWidth/2-100+(document.documentElement.scrollLeft||document.body.scrollLeft),document.documentElement.clientHeight/2-150+(document.documentElement.scrollTop||document.body.scrollTop)];this._dialogInput.css("left",
-this._pos[0]+20+"px").css("top",this._pos[1]+"px");a.settings.onSelect=c;this._inDialog=true;this.dpDiv.addClass(this._dialogClass);this._showDatepicker(this._dialogInput[0]);d.blockUI&&d.blockUI(this.dpDiv);d.data(this._dialogInput[0],"datepicker",a);return this},_destroyDatepicker:function(a){var b=d(a),c=d.data(a,"datepicker");if(b.hasClass(this.markerClassName)){var e=a.nodeName.toLowerCase();d.removeData(a,"datepicker");if(e=="input"){c.append.remove();c.trigger.remove();b.removeClass(this.markerClassName).unbind("focus",
-this._showDatepicker).unbind("keydown",this._doKeyDown).unbind("keypress",this._doKeyPress).unbind("keyup",this._doKeyUp)}else if(e=="div"||e=="span")b.removeClass(this.markerClassName).empty()}},_enableDatepicker:function(a){var b=d(a),c=d.data(a,"datepicker");if(b.hasClass(this.markerClassName)){var e=a.nodeName.toLowerCase();if(e=="input"){a.disabled=false;c.trigger.filter("button").each(function(){this.disabled=false}).end().filter("img").css({opacity:"1.0",cursor:""})}else if(e=="div"||e=="span"){b=
-b.children("."+this._inlineClass);b.children().removeClass("ui-state-disabled");b.find("select.ui-datepicker-month, select.ui-datepicker-year").removeAttr("disabled")}this._disabledInputs=d.map(this._disabledInputs,function(f){return f==a?null:f})}},_disableDatepicker:function(a){var b=d(a),c=d.data(a,"datepicker");if(b.hasClass(this.markerClassName)){var e=a.nodeName.toLowerCase();if(e=="input"){a.disabled=true;c.trigger.filter("button").each(function(){this.disabled=true}).end().filter("img").css({opacity:"0.5",
-cursor:"default"})}else if(e=="div"||e=="span"){b=b.children("."+this._inlineClass);b.children().addClass("ui-state-disabled");b.find("select.ui-datepicker-month, select.ui-datepicker-year").attr("disabled","disabled")}this._disabledInputs=d.map(this._disabledInputs,function(f){return f==a?null:f});this._disabledInputs[this._disabledInputs.length]=a}},_isDisabledDatepicker:function(a){if(!a)return false;for(var b=0;b<this._disabledInputs.length;b++)if(this._disabledInputs[b]==a)return true;return false},
-_getInst:function(a){try{return d.data(a,"datepicker")}catch(b){throw"Missing instance data for this datepicker";}},_optionDatepicker:function(a,b,c){var e=this._getInst(a);if(arguments.length==2&&typeof b=="string")return b=="defaults"?d.extend({},d.datepicker._defaults):e?b=="all"?d.extend({},e.settings):this._get(e,b):null;var f=b||{};if(typeof b=="string"){f={};f[b]=c}if(e){this._curInst==e&&this._hideDatepicker();var h=this._getDateDatepicker(a,true),i=this._getMinMaxDate(e,"min"),g=this._getMinMaxDate(e,
-"max");H(e.settings,f);if(i!==null&&f.dateFormat!==C&&f.minDate===C)e.settings.minDate=this._formatDate(e,i);if(g!==null&&f.dateFormat!==C&&f.maxDate===C)e.settings.maxDate=this._formatDate(e,g);this._attachments(d(a),e);this._autoSize(e);this._setDate(e,h);this._updateAlternate(e);this._updateDatepicker(e)}},_changeDatepicker:function(a,b,c){this._optionDatepicker(a,b,c)},_refreshDatepicker:function(a){(a=this._getInst(a))&&this._updateDatepicker(a)},_setDateDatepicker:function(a,b){if(a=this._getInst(a)){this._setDate(a,
-b);this._updateDatepicker(a);this._updateAlternate(a)}},_getDateDatepicker:function(a,b){(a=this._getInst(a))&&!a.inline&&this._setDateFromField(a,b);return a?this._getDate(a):null},_doKeyDown:function(a){var b=d.datepicker._getInst(a.target),c=true,e=b.dpDiv.is(".ui-datepicker-rtl");b._keyEvent=true;if(d.datepicker._datepickerShowing)switch(a.keyCode){case 9:d.datepicker._hideDatepicker();c=false;break;case 13:c=d("td."+d.datepicker._dayOverClass+":not(."+d.datepicker._currentClass+")",b.dpDiv);
-c[0]?d.datepicker._selectDay(a.target,b.selectedMonth,b.selectedYear,c[0]):d.datepicker._hideDatepicker();return false;case 27:d.datepicker._hideDatepicker();break;case 33:d.datepicker._adjustDate(a.target,a.ctrlKey?-d.datepicker._get(b,"stepBigMonths"):-d.datepicker._get(b,"stepMonths"),"M");break;case 34:d.datepicker._adjustDate(a.target,a.ctrlKey?+d.datepicker._get(b,"stepBigMonths"):+d.datepicker._get(b,"stepMonths"),"M");break;case 35:if(a.ctrlKey||a.metaKey)d.datepicker._clearDate(a.target);
-c=a.ctrlKey||a.metaKey;break;case 36:if(a.ctrlKey||a.metaKey)d.datepicker._gotoToday(a.target);c=a.ctrlKey||a.metaKey;break;case 37:if(a.ctrlKey||a.metaKey)d.datepicker._adjustDate(a.target,e?+1:-1,"D");c=a.ctrlKey||a.metaKey;if(a.originalEvent.altKey)d.datepicker._adjustDate(a.target,a.ctrlKey?-d.datepicker._get(b,"stepBigMonths"):-d.datepicker._get(b,"stepMonths"),"M");break;case 38:if(a.ctrlKey||a.metaKey)d.datepicker._adjustDate(a.target,-7,"D");c=a.ctrlKey||a.metaKey;break;case 39:if(a.ctrlKey||
-a.metaKey)d.datepicker._adjustDate(a.target,e?-1:+1,"D");c=a.ctrlKey||a.metaKey;if(a.originalEvent.altKey)d.datepicker._adjustDate(a.target,a.ctrlKey?+d.datepicker._get(b,"stepBigMonths"):+d.datepicker._get(b,"stepMonths"),"M");break;case 40:if(a.ctrlKey||a.metaKey)d.datepicker._adjustDate(a.target,+7,"D");c=a.ctrlKey||a.metaKey;break;default:c=false}else if(a.keyCode==36&&a.ctrlKey)d.datepicker._showDatepicker(this);else c=false;if(c){a.preventDefault();a.stopPropagation()}},_doKeyPress:function(a){var b=
-d.datepicker._getInst(a.target);if(d.datepicker._get(b,"constrainInput")){b=d.datepicker._possibleChars(d.datepicker._get(b,"dateFormat"));var c=String.fromCharCode(a.charCode==C?a.keyCode:a.charCode);return a.ctrlKey||a.metaKey||c<" "||!b||b.indexOf(c)>-1}},_doKeyUp:function(a){a=d.datepicker._getInst(a.target);if(a.input.val()!=a.lastVal)try{if(d.datepicker.parseDate(d.datepicker._get(a,"dateFormat"),a.input?a.input.val():null,d.datepicker._getFormatConfig(a))){d.datepicker._setDateFromField(a);
-d.datepicker._updateAlternate(a);d.datepicker._updateDatepicker(a)}}catch(b){d.datepicker.log(b)}return true},_showDatepicker:function(a){a=a.target||a;if(a.nodeName.toLowerCase()!="input")a=d("input",a.parentNode)[0];if(!(d.datepicker._isDisabledDatepicker(a)||d.datepicker._lastInput==a)){var b=d.datepicker._getInst(a);if(d.datepicker._curInst&&d.datepicker._curInst!=b){d.datepicker._datepickerShowing&&d.datepicker._triggerOnClose(d.datepicker._curInst);d.datepicker._curInst.dpDiv.stop(true,true)}var c=
-d.datepicker._get(b,"beforeShow");H(b.settings,c?c.apply(a,[a,b]):{});b.lastVal=null;d.datepicker._lastInput=a;d.datepicker._setDateFromField(b);if(d.datepicker._inDialog)a.value="";if(!d.datepicker._pos){d.datepicker._pos=d.datepicker._findPos(a);d.datepicker._pos[1]+=a.offsetHeight}var e=false;d(a).parents().each(function(){e|=d(this).css("position")=="fixed";return!e});if(e&&d.browser.opera){d.datepicker._pos[0]-=document.documentElement.scrollLeft;d.datepicker._pos[1]-=document.documentElement.scrollTop}c=
-{left:d.datepicker._pos[0],top:d.datepicker._pos[1]};d.datepicker._pos=null;b.dpDiv.empty();b.dpDiv.css({position:"absolute",display:"block",top:"-1000px"});d.datepicker._updateDatepicker(b);c=d.datepicker._checkOffset(b,c,e);b.dpDiv.css({position:d.datepicker._inDialog&&d.blockUI?"static":e?"fixed":"absolute",display:"none",left:c.left+"px",top:c.top+"px"});if(!b.inline){c=d.datepicker._get(b,"showAnim");var f=d.datepicker._get(b,"duration"),h=function(){var i=b.dpDiv.find("iframe.ui-datepicker-cover");
-if(i.length){var g=d.datepicker._getBorders(b.dpDiv);i.css({left:-g[0],top:-g[1],width:b.dpDiv.outerWidth(),height:b.dpDiv.outerHeight()})}};b.dpDiv.zIndex(d(a).zIndex()+1);d.datepicker._datepickerShowing=true;d.effects&&d.effects[c]?b.dpDiv.show(c,d.datepicker._get(b,"showOptions"),f,h):b.dpDiv[c||"show"](c?f:null,h);if(!c||!f)h();b.input.is(":visible")&&!b.input.is(":disabled")&&b.input.focus();d.datepicker._curInst=b}}},_updateDatepicker:function(a){this.maxRows=4;var b=d.datepicker._getBorders(a.dpDiv);
-J=a;a.dpDiv.empty().append(this._generateHTML(a));var c=a.dpDiv.find("iframe.ui-datepicker-cover");c.length&&c.css({left:-b[0],top:-b[1],width:a.dpDiv.outerWidth(),height:a.dpDiv.outerHeight()});a.dpDiv.find("."+this._dayOverClass+" a").mouseover();b=this._getNumberOfMonths(a);c=b[1];a.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width("");c>1&&a.dpDiv.addClass("ui-datepicker-multi-"+c).css("width",17*c+"em");a.dpDiv[(b[0]!=1||b[1]!=1?"add":"remove")+"Class"]("ui-datepicker-multi");
-a.dpDiv[(this._get(a,"isRTL")?"add":"remove")+"Class"]("ui-datepicker-rtl");a==d.datepicker._curInst&&d.datepicker._datepickerShowing&&a.input&&a.input.is(":visible")&&!a.input.is(":disabled")&&a.input[0]!=document.activeElement&&a.input.focus();if(a.yearshtml){var e=a.yearshtml;setTimeout(function(){e===a.yearshtml&&a.yearshtml&&a.dpDiv.find("select.ui-datepicker-year:first").replaceWith(a.yearshtml);e=a.yearshtml=null},0)}},_getBorders:function(a){var b=function(c){return{thin:1,medium:2,thick:3}[c]||
-c};return[parseFloat(b(a.css("border-left-width"))),parseFloat(b(a.css("border-top-width")))]},_checkOffset:function(a,b,c){var e=a.dpDiv.outerWidth(),f=a.dpDiv.outerHeight(),h=a.input?a.input.outerWidth():0,i=a.input?a.input.outerHeight():0,g=document.documentElement.clientWidth+d(document).scrollLeft(),j=document.documentElement.clientHeight+d(document).scrollTop();b.left-=this._get(a,"isRTL")?e-h:0;b.left-=c&&b.left==a.input.offset().left?d(document).scrollLeft():0;b.top-=c&&b.top==a.input.offset().top+
-i?d(document).scrollTop():0;b.left-=Math.min(b.left,b.left+e>g&&g>e?Math.abs(b.left+e-g):0);b.top-=Math.min(b.top,b.top+f>j&&j>f?Math.abs(f+i):0);return b},_findPos:function(a){for(var b=this._get(this._getInst(a),"isRTL");a&&(a.type=="hidden"||a.nodeType!=1||d.expr.filters.hidden(a));)a=a[b?"previousSibling":"nextSibling"];a=d(a).offset();return[a.left,a.top]},_triggerOnClose:function(a){var b=this._get(a,"onClose");if(b)b.apply(a.input?a.input[0]:null,[a.input?a.input.val():"",a])},_hideDatepicker:function(a){var b=
-this._curInst;if(!(!b||a&&b!=d.data(a,"datepicker")))if(this._datepickerShowing){a=this._get(b,"showAnim");var c=this._get(b,"duration"),e=function(){d.datepicker._tidyDialog(b);this._curInst=null};d.effects&&d.effects[a]?b.dpDiv.hide(a,d.datepicker._get(b,"showOptions"),c,e):b.dpDiv[a=="slideDown"?"slideUp":a=="fadeIn"?"fadeOut":"hide"](a?c:null,e);a||e();d.datepicker._triggerOnClose(b);this._datepickerShowing=false;this._lastInput=null;if(this._inDialog){this._dialogInput.css({position:"absolute",
-left:"0",top:"-100px"});if(d.blockUI){d.unblockUI();d("body").append(this.dpDiv)}}this._inDialog=false}},_tidyDialog:function(a){a.dpDiv.removeClass(this._dialogClass).unbind(".ui-datepicker-calendar")},_checkExternalClick:function(a){if(d.datepicker._curInst){a=d(a.target);a[0].id!=d.datepicker._mainDivId&&a.parents("#"+d.datepicker._mainDivId).length==0&&!a.hasClass(d.datepicker.markerClassName)&&!a.hasClass(d.datepicker._triggerClass)&&d.datepicker._datepickerShowing&&!(d.datepicker._inDialog&&
-d.blockUI)&&d.datepicker._hideDatepicker()}},_adjustDate:function(a,b,c){a=d(a);var e=this._getInst(a[0]);if(!this._isDisabledDatepicker(a[0])){this._adjustInstDate(e,b+(c=="M"?this._get(e,"showCurrentAtPos"):0),c);this._updateDatepicker(e)}},_gotoToday:function(a){a=d(a);var b=this._getInst(a[0]);if(this._get(b,"gotoCurrent")&&b.currentDay){b.selectedDay=b.currentDay;b.drawMonth=b.selectedMonth=b.currentMonth;b.drawYear=b.selectedYear=b.currentYear}else{var c=new Date;b.selectedDay=c.getDate();b.drawMonth=
-b.selectedMonth=c.getMonth();b.drawYear=b.selectedYear=c.getFullYear()}this._notifyChange(b);this._adjustDate(a)},_selectMonthYear:function(a,b,c){a=d(a);var e=this._getInst(a[0]);e._selectingMonthYear=false;e["selected"+(c=="M"?"Month":"Year")]=e["draw"+(c=="M"?"Month":"Year")]=parseInt(b.options[b.selectedIndex].value,10);this._notifyChange(e);this._adjustDate(a)},_clickMonthYear:function(a){var b=this._getInst(d(a)[0]);b.input&&b._selectingMonthYear&&setTimeout(function(){b.input.focus()},0);b._selectingMonthYear=
-!b._selectingMonthYear},_selectDay:function(a,b,c,e){var f=d(a);if(!(d(e).hasClass(this._unselectableClass)||this._isDisabledDatepicker(f[0]))){f=this._getInst(f[0]);f.selectedDay=f.currentDay=d("a",e).html();f.selectedMonth=f.currentMonth=b;f.selectedYear=f.currentYear=c;this._selectDate(a,this._formatDate(f,f.currentDay,f.currentMonth,f.currentYear))}},_clearDate:function(a){a=d(a);this._getInst(a[0]);this._selectDate(a,"")},_selectDate:function(a,b){a=this._getInst(d(a)[0]);b=b!=null?b:this._formatDate(a);
-a.input&&a.input.val(b);this._updateAlternate(a);var c=this._get(a,"onSelect");if(c)c.apply(a.input?a.input[0]:null,[b,a]);else a.input&&a.input.trigger("change");if(a.inline)this._updateDatepicker(a);else{this._hideDatepicker();this._lastInput=a.input[0];typeof a.input[0]!="object"&&a.input.focus();this._lastInput=null}},_updateAlternate:function(a){var b=this._get(a,"altField");if(b){var c=this._get(a,"altFormat")||this._get(a,"dateFormat"),e=this._getDate(a),f=this.formatDate(c,e,this._getFormatConfig(a));
-d(b).each(function(){d(this).val(f)})}},noWeekends:function(a){a=a.getDay();return[a>0&&a<6,""]},iso8601Week:function(a){a=new Date(a.getTime());a.setDate(a.getDate()+4-(a.getDay()||7));var b=a.getTime();a.setMonth(0);a.setDate(1);return Math.floor(Math.round((b-a)/864E5)/7)+1},parseDate:function(a,b,c){if(a==null||b==null)throw"Invalid arguments";b=typeof b=="object"?b.toString():b+"";if(b=="")return null;var e=(c?c.shortYearCutoff:null)||this._defaults.shortYearCutoff;e=typeof e!="string"?e:(new Date).getFullYear()%
-100+parseInt(e,10);for(var f=(c?c.dayNamesShort:null)||this._defaults.dayNamesShort,h=(c?c.dayNames:null)||this._defaults.dayNames,i=(c?c.monthNamesShort:null)||this._defaults.monthNamesShort,g=(c?c.monthNames:null)||this._defaults.monthNames,j=c=-1,l=-1,u=-1,k=false,o=function(p){(p=B+1<a.length&&a.charAt(B+1)==p)&&B++;return p},m=function(p){var D=o(p);p=new RegExp("^\\d{1,"+(p=="@"?14:p=="!"?20:p=="y"&&D?4:p=="o"?3:2)+"}");p=b.substring(q).match(p);if(!p)throw"Missing number at position "+q;q+=
-p[0].length;return parseInt(p[0],10)},n=function(p,D,K){p=d.map(o(p)?K:D,function(w,x){return[[x,w]]}).sort(function(w,x){return-(w[1].length-x[1].length)});var E=-1;d.each(p,function(w,x){w=x[1];if(b.substr(q,w.length).toLowerCase()==w.toLowerCase()){E=x[0];q+=w.length;return false}});if(E!=-1)return E+1;else throw"Unknown name at position "+q;},s=function(){if(b.charAt(q)!=a.charAt(B))throw"Unexpected literal at position "+q;q++},q=0,B=0;B<a.length;B++)if(k)if(a.charAt(B)=="'"&&!o("'"))k=false;
-else s();else switch(a.charAt(B)){case "d":l=m("d");break;case "D":n("D",f,h);break;case "o":u=m("o");break;case "m":j=m("m");break;case "M":j=n("M",i,g);break;case "y":c=m("y");break;case "@":var v=new Date(m("@"));c=v.getFullYear();j=v.getMonth()+1;l=v.getDate();break;case "!":v=new Date((m("!")-this._ticksTo1970)/1E4);c=v.getFullYear();j=v.getMonth()+1;l=v.getDate();break;case "'":if(o("'"))s();else k=true;break;default:s()}if(q<b.length)throw"Extra/unparsed characters found in date: "+b.substring(q);
-if(c==-1)c=(new Date).getFullYear();else if(c<100)c+=(new Date).getFullYear()-(new Date).getFullYear()%100+(c<=e?0:-100);if(u>-1){j=1;l=u;do{e=this._getDaysInMonth(c,j-1);if(l<=e)break;j++;l-=e}while(1)}v=this._daylightSavingAdjust(new Date(c,j-1,l));if(v.getFullYear()!=c||v.getMonth()+1!=j||v.getDate()!=l)throw"Invalid date";return v},ATOM:"yy-mm-dd",COOKIE:"D, dd M yy",ISO_8601:"yy-mm-dd",RFC_822:"D, d M y",RFC_850:"DD, dd-M-y",RFC_1036:"D, d M y",RFC_1123:"D, d M yy",RFC_2822:"D, d M yy",RSS:"D, d M y",
-TICKS:"!",TIMESTAMP:"@",W3C:"yy-mm-dd",_ticksTo1970:(718685+Math.floor(492.5)-Math.floor(19.7)+Math.floor(4.925))*24*60*60*1E7,formatDate:function(a,b,c){if(!b)return"";var e=(c?c.dayNamesShort:null)||this._defaults.dayNamesShort,f=(c?c.dayNames:null)||this._defaults.dayNames,h=(c?c.monthNamesShort:null)||this._defaults.monthNamesShort;c=(c?c.monthNames:null)||this._defaults.monthNames;var i=function(o){(o=k+1<a.length&&a.charAt(k+1)==o)&&k++;return o},g=function(o,m,n){m=""+m;if(i(o))for(;m.length<
-n;)m="0"+m;return m},j=function(o,m,n,s){return i(o)?s[m]:n[m]},l="",u=false;if(b)for(var k=0;k<a.length;k++)if(u)if(a.charAt(k)=="'"&&!i("'"))u=false;else l+=a.charAt(k);else switch(a.charAt(k)){case "d":l+=g("d",b.getDate(),2);break;case "D":l+=j("D",b.getDay(),e,f);break;case "o":l+=g("o",Math.round(((new Date(b.getFullYear(),b.getMonth(),b.getDate())).getTime()-(new Date(b.getFullYear(),0,0)).getTime())/864E5),3);break;case "m":l+=g("m",b.getMonth()+1,2);break;case "M":l+=j("M",b.getMonth(),h,
-c);break;case "y":l+=i("y")?b.getFullYear():(b.getYear()%100<10?"0":"")+b.getYear()%100;break;case "@":l+=b.getTime();break;case "!":l+=b.getTime()*1E4+this._ticksTo1970;break;case "'":if(i("'"))l+="'";else u=true;break;default:l+=a.charAt(k)}return l},_possibleChars:function(a){for(var b="",c=false,e=function(h){(h=f+1<a.length&&a.charAt(f+1)==h)&&f++;return h},f=0;f<a.length;f++)if(c)if(a.charAt(f)=="'"&&!e("'"))c=false;else b+=a.charAt(f);else switch(a.charAt(f)){case "d":case "m":case "y":case "@":b+=
-"0123456789";break;case "D":case "M":return null;case "'":if(e("'"))b+="'";else c=true;break;default:b+=a.charAt(f)}return b},_get:function(a,b){return a.settings[b]!==C?a.settings[b]:this._defaults[b]},_setDateFromField:function(a,b){if(a.input.val()!=a.lastVal){var c=this._get(a,"dateFormat"),e=a.lastVal=a.input?a.input.val():null,f,h;f=h=this._getDefaultDate(a);var i=this._getFormatConfig(a);try{f=this.parseDate(c,e,i)||h}catch(g){this.log(g);e=b?"":e}a.selectedDay=f.getDate();a.drawMonth=a.selectedMonth=
-f.getMonth();a.drawYear=a.selectedYear=f.getFullYear();a.currentDay=e?f.getDate():0;a.currentMonth=e?f.getMonth():0;a.currentYear=e?f.getFullYear():0;this._adjustInstDate(a)}},_getDefaultDate:function(a){return this._restrictMinMax(a,this._determineDate(a,this._get(a,"defaultDate"),new Date))},_determineDate:function(a,b,c){var e=function(h){var i=new Date;i.setDate(i.getDate()+h);return i},f=function(h){try{return d.datepicker.parseDate(d.datepicker._get(a,"dateFormat"),h,d.datepicker._getFormatConfig(a))}catch(i){}var g=
-(h.toLowerCase().match(/^c/)?d.datepicker._getDate(a):null)||new Date,j=g.getFullYear(),l=g.getMonth();g=g.getDate();for(var u=/([+-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g,k=u.exec(h);k;){switch(k[2]||"d"){case "d":case "D":g+=parseInt(k[1],10);break;case "w":case "W":g+=parseInt(k[1],10)*7;break;case "m":case "M":l+=parseInt(k[1],10);g=Math.min(g,d.datepicker._getDaysInMonth(j,l));break;case "y":case "Y":j+=parseInt(k[1],10);g=Math.min(g,d.datepicker._getDaysInMonth(j,l));break}k=u.exec(h)}return new Date(j,
-l,g)};if(b=(b=b==null||b===""?c:typeof b=="string"?f(b):typeof b=="number"?isNaN(b)?c:e(b):new Date(b.getTime()))&&b.toString()=="Invalid Date"?c:b){b.setHours(0);b.setMinutes(0);b.setSeconds(0);b.setMilliseconds(0)}return this._daylightSavingAdjust(b)},_daylightSavingAdjust:function(a){if(!a)return null;a.setHours(a.getHours()>12?a.getHours()+2:0);return a},_setDate:function(a,b,c){var e=!b,f=a.selectedMonth,h=a.selectedYear;b=this._restrictMinMax(a,this._determineDate(a,b,new Date));a.selectedDay=
-a.currentDay=b.getDate();a.drawMonth=a.selectedMonth=a.currentMonth=b.getMonth();a.drawYear=a.selectedYear=a.currentYear=b.getFullYear();if((f!=a.selectedMonth||h!=a.selectedYear)&&!c)this._notifyChange(a);this._adjustInstDate(a);if(a.input)a.input.val(e?"":this._formatDate(a))},_getDate:function(a){return!a.currentYear||a.input&&a.input.val()==""?null:this._daylightSavingAdjust(new Date(a.currentYear,a.currentMonth,a.currentDay))},_generateHTML:function(a){var b=new Date;b=this._daylightSavingAdjust(new Date(b.getFullYear(),
-b.getMonth(),b.getDate()));var c=this._get(a,"isRTL"),e=this._get(a,"showButtonPanel"),f=this._get(a,"hideIfNoPrevNext"),h=this._get(a,"navigationAsDateFormat"),i=this._getNumberOfMonths(a),g=this._get(a,"showCurrentAtPos"),j=this._get(a,"stepMonths"),l=i[0]!=1||i[1]!=1,u=this._daylightSavingAdjust(!a.currentDay?new Date(9999,9,9):new Date(a.currentYear,a.currentMonth,a.currentDay)),k=this._getMinMaxDate(a,"min"),o=this._getMinMaxDate(a,"max");g=a.drawMonth-g;var m=a.drawYear;if(g<0){g+=12;m--}if(o){var n=
-this._daylightSavingAdjust(new Date(o.getFullYear(),o.getMonth()-i[0]*i[1]+1,o.getDate()));for(n=k&&n<k?k:n;this._daylightSavingAdjust(new Date(m,g,1))>n;){g--;if(g<0){g=11;m--}}}a.drawMonth=g;a.drawYear=m;n=this._get(a,"prevText");n=!h?n:this.formatDate(n,this._daylightSavingAdjust(new Date(m,g-j,1)),this._getFormatConfig(a));n=this._canAdjustMonth(a,-1,m,g)?'<a class="ui-datepicker-prev ui-corner-all" onclick="DP_jQuery_'+A+".datepicker._adjustDate('#"+a.id+"', -"+j+", 'M');\" title=\""+n+'"><span class="ui-icon ui-icon-circle-triangle-'+
-(c?"e":"w")+'">'+n+"</span></a>":f?"":'<a class="ui-datepicker-prev ui-corner-all ui-state-disabled" title="'+n+'"><span class="ui-icon ui-icon-circle-triangle-'+(c?"e":"w")+'">'+n+"</span></a>";var s=this._get(a,"nextText");s=!h?s:this.formatDate(s,this._daylightSavingAdjust(new Date(m,g+j,1)),this._getFormatConfig(a));f=this._canAdjustMonth(a,+1,m,g)?'<a class="ui-datepicker-next ui-corner-all" onclick="DP_jQuery_'+A+".datepicker._adjustDate('#"+a.id+"', +"+j+", 'M');\" title=\""+s+'"><span class="ui-icon ui-icon-circle-triangle-'+
-(c?"w":"e")+'">'+s+"</span></a>":f?"":'<a class="ui-datepicker-next ui-corner-all ui-state-disabled" title="'+s+'"><span class="ui-icon ui-icon-circle-triangle-'+(c?"w":"e")+'">'+s+"</span></a>";j=this._get(a,"currentText");s=this._get(a,"gotoCurrent")&&a.currentDay?u:b;j=!h?j:this.formatDate(j,s,this._getFormatConfig(a));h=!a.inline?'<button type="button" class="ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all" onclick="DP_jQuery_'+A+'.datepicker._hideDatepicker();">'+this._get(a,
-"closeText")+"</button>":"";e=e?'<div class="ui-datepicker-buttonpane ui-widget-content">'+(c?h:"")+(this._isInRange(a,s)?'<button type="button" class="ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all" onclick="DP_jQuery_'+A+".datepicker._gotoToday('#"+a.id+"');\">"+j+"</button>":"")+(c?"":h)+"</div>":"";h=parseInt(this._get(a,"firstDay"),10);h=isNaN(h)?0:h;j=this._get(a,"showWeek");s=this._get(a,"dayNames");this._get(a,"dayNamesShort");var q=this._get(a,"dayNamesMin"),B=
-this._get(a,"monthNames"),v=this._get(a,"monthNamesShort"),p=this._get(a,"beforeShowDay"),D=this._get(a,"showOtherMonths"),K=this._get(a,"selectOtherMonths");this._get(a,"calculateWeek");for(var E=this._getDefaultDate(a),w="",x=0;x<i[0];x++){var O="";this.maxRows=4;for(var G=0;G<i[1];G++){var P=this._daylightSavingAdjust(new Date(m,g,a.selectedDay)),t=" ui-corner-all",y="";if(l){y+='<div class="ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+=" ui-datepicker-group-first";t=" ui-corner-"+(c?"right":
-"left");break;case i[1]-1:y+=" ui-datepicker-group-last";t=" ui-corner-"+(c?"left":"right");break;default:y+=" ui-datepicker-group-middle";t="";break}y+='">'}y+='<div class="ui-datepicker-header ui-widget-header ui-helper-clearfix'+t+'">'+(/all|left/.test(t)&&x==0?c?f:n:"")+(/all|right/.test(t)&&x==0?c?n:f:"")+this._generateMonthYearHeader(a,g,m,k,o,x>0||G>0,B,v)+'</div><table class="ui-datepicker-calendar"><thead><tr>';var z=j?'<th class="ui-datepicker-week-col">'+this._get(a,"weekHeader")+"</th>":
-"";for(t=0;t<7;t++){var r=(t+h)%7;z+="<th"+((t+h+6)%7>=5?' class="ui-datepicker-week-end"':"")+'><span title="'+s[r]+'">'+q[r]+"</span></th>"}y+=z+"</tr></thead><tbody>";z=this._getDaysInMonth(m,g);if(m==a.selectedYear&&g==a.selectedMonth)a.selectedDay=Math.min(a.selectedDay,z);t=(this._getFirstDayOfMonth(m,g)-h+7)%7;z=Math.ceil((t+z)/7);this.maxRows=z=l?this.maxRows>z?this.maxRows:z:z;r=this._daylightSavingAdjust(new Date(m,g,1-t));for(var Q=0;Q<z;Q++){y+="<tr>";var R=!j?"":'<td class="ui-datepicker-week-col">'+
-this._get(a,"calculateWeek")(r)+"</td>";for(t=0;t<7;t++){var I=p?p.apply(a.input?a.input[0]:null,[r]):[true,""],F=r.getMonth()!=g,L=F&&!K||!I[0]||k&&r<k||o&&r>o;R+='<td class="'+((t+h+6)%7>=5?" ui-datepicker-week-end":"")+(F?" ui-datepicker-other-month":"")+(r.getTime()==P.getTime()&&g==a.selectedMonth&&a._keyEvent||E.getTime()==r.getTime()&&E.getTime()==P.getTime()?" "+this._dayOverClass:"")+(L?" "+this._unselectableClass+" ui-state-disabled":"")+(F&&!D?"":" "+I[1]+(r.getTime()==u.getTime()?" "+
-this._currentClass:"")+(r.getTime()==b.getTime()?" ui-datepicker-today":""))+'"'+((!F||D)&&I[2]?' title="'+I[2]+'"':"")+(L?"":' onclick="DP_jQuery_'+A+".datepicker._selectDay('#"+a.id+"',"+r.getMonth()+","+r.getFullYear()+', this);return false;"')+">"+(F&&!D?" ":L?'<span class="ui-state-default">'+r.getDate()+"</span>":'<a class="ui-state-default'+(r.getTime()==b.getTime()?" ui-state-highlight":"")+(r.getTime()==u.getTime()?" ui-state-active":"")+(F?" ui-priority-secondary":"")+'" href="#">'+
-r.getDate()+"</a>")+"</td>";r.setDate(r.getDate()+1);r=this._daylightSavingAdjust(r)}y+=R+"</tr>"}g++;if(g>11){g=0;m++}y+="</tbody></table>"+(l?"</div>"+(i[0]>0&&G==i[1]-1?'<div class="ui-datepicker-row-break"></div>':""):"");O+=y}w+=O}w+=e+(d.browser.msie&&parseInt(d.browser.version,10)<7&&!a.inline?'<iframe src="javascript:false;" class="ui-datepicker-cover" frameborder="0"></iframe>':"");a._keyEvent=false;return w},_generateMonthYearHeader:function(a,b,c,e,f,h,i,g){var j=this._get(a,"changeMonth"),
-l=this._get(a,"changeYear"),u=this._get(a,"showMonthAfterYear"),k='<div class="ui-datepicker-title">',o="";if(h||!j)o+='<span class="ui-datepicker-month">'+i[b]+"</span>";else{i=e&&e.getFullYear()==c;var m=f&&f.getFullYear()==c;o+='<select class="ui-datepicker-month" onchange="DP_jQuery_'+A+".datepicker._selectMonthYear('#"+a.id+"', this, 'M');\" onclick=\"DP_jQuery_"+A+".datepicker._clickMonthYear('#"+a.id+"');\">";for(var n=0;n<12;n++)if((!i||n>=e.getMonth())&&(!m||n<=f.getMonth()))o+='<option value="'+
-n+'"'+(n==b?' selected="selected"':"")+">"+g[n]+"</option>";o+="</select>"}u||(k+=o+(h||!(j&&l)?" ":""));if(!a.yearshtml){a.yearshtml="";if(h||!l)k+='<span class="ui-datepicker-year">'+c+"</span>";else{g=this._get(a,"yearRange").split(":");var s=(new Date).getFullYear();i=function(q){q=q.match(/c[+-].*/)?c+parseInt(q.substring(1),10):q.match(/[+-].*/)?s+parseInt(q,10):parseInt(q,10);return isNaN(q)?s:q};b=i(g[0]);g=Math.max(b,i(g[1]||""));b=e?Math.max(b,e.getFullYear()):b;g=f?Math.min(g,f.getFullYear()):
-g;for(a.yearshtml+='<select class="ui-datepicker-year" onchange="DP_jQuery_'+A+".datepicker._selectMonthYear('#"+a.id+"', this, 'Y');\" onclick=\"DP_jQuery_"+A+".datepicker._clickMonthYear('#"+a.id+"');\">";b<=g;b++)a.yearshtml+='<option value="'+b+'"'+(b==c?' selected="selected"':"")+">"+b+"</option>";a.yearshtml+="</select>";k+=a.yearshtml;a.yearshtml=null}}k+=this._get(a,"yearSuffix");if(u)k+=(h||!(j&&l)?" ":"")+o;k+="</div>";return k},_adjustInstDate:function(a,b,c){var e=a.drawYear+(c==
-"Y"?b:0),f=a.drawMonth+(c=="M"?b:0);b=Math.min(a.selectedDay,this._getDaysInMonth(e,f))+(c=="D"?b:0);e=this._restrictMinMax(a,this._daylightSavingAdjust(new Date(e,f,b)));a.selectedDay=e.getDate();a.drawMonth=a.selectedMonth=e.getMonth();a.drawYear=a.selectedYear=e.getFullYear();if(c=="M"||c=="Y")this._notifyChange(a)},_restrictMinMax:function(a,b){var c=this._getMinMaxDate(a,"min");a=this._getMinMaxDate(a,"max");b=c&&b<c?c:b;return b=a&&b>a?a:b},_notifyChange:function(a){var b=this._get(a,"onChangeMonthYear");
-if(b)b.apply(a.input?a.input[0]:null,[a.selectedYear,a.selectedMonth+1,a])},_getNumberOfMonths:function(a){a=this._get(a,"numberOfMonths");return a==null?[1,1]:typeof a=="number"?[1,a]:a},_getMinMaxDate:function(a,b){return this._determineDate(a,this._get(a,b+"Date"),null)},_getDaysInMonth:function(a,b){return 32-this._daylightSavingAdjust(new Date(a,b,32)).getDate()},_getFirstDayOfMonth:function(a,b){return(new Date(a,b,1)).getDay()},_canAdjustMonth:function(a,b,c,e){var f=this._getNumberOfMonths(a);
-c=this._daylightSavingAdjust(new Date(c,e+(b<0?b:f[0]*f[1]),1));b<0&&c.setDate(this._getDaysInMonth(c.getFullYear(),c.getMonth()));return this._isInRange(a,c)},_isInRange:function(a,b){var c=this._getMinMaxDate(a,"min");a=this._getMinMaxDate(a,"max");return(!c||b.getTime()>=c.getTime())&&(!a||b.getTime()<=a.getTime())},_getFormatConfig:function(a){var b=this._get(a,"shortYearCutoff");b=typeof b!="string"?b:(new Date).getFullYear()%100+parseInt(b,10);return{shortYearCutoff:b,dayNamesShort:this._get(a,
-"dayNamesShort"),dayNames:this._get(a,"dayNames"),monthNamesShort:this._get(a,"monthNamesShort"),monthNames:this._get(a,"monthNames")}},_formatDate:function(a,b,c,e){if(!b){a.currentDay=a.selectedDay;a.currentMonth=a.selectedMonth;a.currentYear=a.selectedYear}b=b?typeof b=="object"?b:this._daylightSavingAdjust(new Date(e,c,b)):this._daylightSavingAdjust(new Date(a.currentYear,a.currentMonth,a.currentDay));return this.formatDate(this._get(a,"dateFormat"),b,this._getFormatConfig(a))}});d.fn.datepicker=
-function(a){if(!this.length)return this;if(!d.datepicker.initialized){d(document).mousedown(d.datepicker._checkExternalClick).find("body").append(d.datepicker.dpDiv);d.datepicker.initialized=true}var b=Array.prototype.slice.call(arguments,1);if(typeof a=="string"&&(a=="isDisabled"||a=="getDate"||a=="widget"))return d.datepicker["_"+a+"Datepicker"].apply(d.datepicker,[this[0]].concat(b));if(a=="option"&&arguments.length==2&&typeof arguments[1]=="string")return d.datepicker["_"+a+"Datepicker"].apply(d.datepicker,
-[this[0]].concat(b));return this.each(function(){typeof a=="string"?d.datepicker["_"+a+"Datepicker"].apply(d.datepicker,[this].concat(b)):d.datepicker._attachDatepicker(this,a)})};d.datepicker=new M;d.datepicker.initialized=false;d.datepicker.uuid=(new Date).getTime();d.datepicker.version="1.8.14";window["DP_jQuery_"+A]=d})(jQuery);
-;/*
- * jQuery UI Progressbar 1.8.14
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Progressbar
- *
- * Depends:
- * jquery.ui.core.js
- * jquery.ui.widget.js
- */
-(function(b,d){b.widget("ui.progressbar",{options:{value:0,max:100},min:0,_create:function(){this.element.addClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").attr({role:"progressbar","aria-valuemin":this.min,"aria-valuemax":this.options.max,"aria-valuenow":this._value()});this.valueDiv=b("<div class='ui-progressbar-value ui-widget-header ui-corner-left'></div>").appendTo(this.element);this.oldValue=this._value();this._refreshValue()},destroy:function(){this.element.removeClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").removeAttr("role").removeAttr("aria-valuemin").removeAttr("aria-valuemax").removeAttr("aria-valuenow");
-this.valueDiv.remove();b.Widget.prototype.destroy.apply(this,arguments)},value:function(a){if(a===d)return this._value();this._setOption("value",a);return this},_setOption:function(a,c){if(a==="value"){this.options.value=c;this._refreshValue();this._value()===this.options.max&&this._trigger("complete")}b.Widget.prototype._setOption.apply(this,arguments)},_value:function(){var a=this.options.value;if(typeof a!=="number")a=0;return Math.min(this.options.max,Math.max(this.min,a))},_percentage:function(){return 100*
-this._value()/this.options.max},_refreshValue:function(){var a=this.value(),c=this._percentage();if(this.oldValue!==a){this.oldValue=a;this._trigger("change")}this.valueDiv.toggle(a>this.min).toggleClass("ui-corner-right",a===this.options.max).width(c.toFixed(0)+"%");this.element.attr("aria-valuenow",a)}});b.extend(b.ui.progressbar,{version:"1.8.14"})})(jQuery);
-;/*
- * jQuery UI Effects 1.8.14
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Effects/
- */
-jQuery.effects||function(f,j){function m(c){var a;if(c&&c.constructor==Array&&c.length==3)return c;if(a=/rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(c))return[parseInt(a[1],10),parseInt(a[2],10),parseInt(a[3],10)];if(a=/rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(c))return[parseFloat(a[1])*2.55,parseFloat(a[2])*2.55,parseFloat(a[3])*2.55];if(a=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(c))return[parseInt(a[1],
-16),parseInt(a[2],16),parseInt(a[3],16)];if(a=/#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(c))return[parseInt(a[1]+a[1],16),parseInt(a[2]+a[2],16),parseInt(a[3]+a[3],16)];if(/rgba\(0, 0, 0, 0\)/.exec(c))return n.transparent;return n[f.trim(c).toLowerCase()]}function s(c,a){var b;do{b=f.curCSS(c,a);if(b!=""&&b!="transparent"||f.nodeName(c,"body"))break;a="backgroundColor"}while(c=c.parentNode);return m(b)}function o(){var c=document.defaultView?document.defaultView.getComputedStyle(this,null):this.currentStyle,
-a={},b,d;if(c&&c.length&&c[0]&&c[c[0]])for(var e=c.length;e--;){b=c[e];if(typeof c[b]=="string"){d=b.replace(/\-(\w)/g,function(g,h){return h.toUpperCase()});a[d]=c[b]}}else for(b in c)if(typeof c[b]==="string")a[b]=c[b];return a}function p(c){var a,b;for(a in c){b=c[a];if(b==null||f.isFunction(b)||a in t||/scrollbar/.test(a)||!/color/i.test(a)&&isNaN(parseFloat(b)))delete c[a]}return c}function u(c,a){var b={_:0},d;for(d in a)if(c[d]!=a[d])b[d]=a[d];return b}function k(c,a,b,d){if(typeof c=="object"){d=
-a;b=null;a=c;c=a.effect}if(f.isFunction(a)){d=a;b=null;a={}}if(typeof a=="number"||f.fx.speeds[a]){d=b;b=a;a={}}if(f.isFunction(b)){d=b;b=null}a=a||{};b=b||a.duration;b=f.fx.off?0:typeof b=="number"?b:b in f.fx.speeds?f.fx.speeds[b]:f.fx.speeds._default;d=d||a.complete;return[c,a,b,d]}function l(c){if(!c||typeof c==="number"||f.fx.speeds[c])return true;if(typeof c==="string"&&!f.effects[c])return true;return false}f.effects={};f.each(["backgroundColor","borderBottomColor","borderLeftColor","borderRightColor",
-"borderTopColor","borderColor","color","outlineColor"],function(c,a){f.fx.step[a]=function(b){if(!b.colorInit){b.start=s(b.elem,a);b.end=m(b.end);b.colorInit=true}b.elem.style[a]="rgb("+Math.max(Math.min(parseInt(b.pos*(b.end[0]-b.start[0])+b.start[0],10),255),0)+","+Math.max(Math.min(parseInt(b.pos*(b.end[1]-b.start[1])+b.start[1],10),255),0)+","+Math.max(Math.min(parseInt(b.pos*(b.end[2]-b.start[2])+b.start[2],10),255),0)+")"}});var n={aqua:[0,255,255],azure:[240,255,255],beige:[245,245,220],black:[0,
-0,0],blue:[0,0,255],brown:[165,42,42],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgrey:[169,169,169],darkgreen:[0,100,0],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkviolet:[148,0,211],fuchsia:[255,0,255],gold:[255,215,0],green:[0,128,0],indigo:[75,0,130],khaki:[240,230,140],lightblue:[173,216,230],lightcyan:[224,255,255],lightgreen:[144,238,144],lightgrey:[211,
-211,211],lightpink:[255,182,193],lightyellow:[255,255,224],lime:[0,255,0],magenta:[255,0,255],maroon:[128,0,0],navy:[0,0,128],olive:[128,128,0],orange:[255,165,0],pink:[255,192,203],purple:[128,0,128],violet:[128,0,128],red:[255,0,0],silver:[192,192,192],white:[255,255,255],yellow:[255,255,0],transparent:[255,255,255]},q=["add","remove","toggle"],t={border:1,borderBottom:1,borderColor:1,borderLeft:1,borderRight:1,borderTop:1,borderWidth:1,margin:1,padding:1};f.effects.animateClass=function(c,a,b,
-d){if(f.isFunction(b)){d=b;b=null}return this.queue(function(){var e=f(this),g=e.attr("style")||" ",h=p(o.call(this)),r,v=e.attr("class");f.each(q,function(w,i){c[i]&&e[i+"Class"](c[i])});r=p(o.call(this));e.attr("class",v);e.animate(u(h,r),{queue:false,duration:a,easing:b,complete:function(){f.each(q,function(w,i){c[i]&&e[i+"Class"](c[i])});if(typeof e.attr("style")=="object"){e.attr("style").cssText="";e.attr("style").cssText=g}else e.attr("style",g);d&&d.apply(this,arguments);f.dequeue(this)}})})};
-f.fn.extend({_addClass:f.fn.addClass,addClass:function(c,a,b,d){return a?f.effects.animateClass.apply(this,[{add:c},a,b,d]):this._addClass(c)},_removeClass:f.fn.removeClass,removeClass:function(c,a,b,d){return a?f.effects.animateClass.apply(this,[{remove:c},a,b,d]):this._removeClass(c)},_toggleClass:f.fn.toggleClass,toggleClass:function(c,a,b,d,e){return typeof a=="boolean"||a===j?b?f.effects.animateClass.apply(this,[a?{add:c}:{remove:c},b,d,e]):this._toggleClass(c,a):f.effects.animateClass.apply(this,
-[{toggle:c},a,b,d])},switchClass:function(c,a,b,d,e){return f.effects.animateClass.apply(this,[{add:a,remove:c},b,d,e])}});f.extend(f.effects,{version:"1.8.14",save:function(c,a){for(var b=0;b<a.length;b++)a[b]!==null&&c.data("ec.storage."+a[b],c[0].style[a[b]])},restore:function(c,a){for(var b=0;b<a.length;b++)a[b]!==null&&c.css(a[b],c.data("ec.storage."+a[b]))},setMode:function(c,a){if(a=="toggle")a=c.is(":hidden")?"show":"hide";return a},getBaseline:function(c,a){var b;switch(c[0]){case "top":b=
-0;break;case "middle":b=0.5;break;case "bottom":b=1;break;default:b=c[0]/a.height}switch(c[1]){case "left":c=0;break;case "center":c=0.5;break;case "right":c=1;break;default:c=c[1]/a.width}return{x:c,y:b}},createWrapper:function(c){if(c.parent().is(".ui-effects-wrapper"))return c.parent();var a={width:c.outerWidth(true),height:c.outerHeight(true),"float":c.css("float")},b=f("<div></div>").addClass("ui-effects-wrapper").css({fontSize:"100%",background:"transparent",border:"none",margin:0,padding:0});
-c.wrap(b);b=c.parent();if(c.css("position")=="static"){b.css({position:"relative"});c.css({position:"relative"})}else{f.extend(a,{position:c.css("position"),zIndex:c.css("z-index")});f.each(["top","left","bottom","right"],function(d,e){a[e]=c.css(e);if(isNaN(parseInt(a[e],10)))a[e]="auto"});c.css({position:"relative",top:0,left:0,right:"auto",bottom:"auto"})}return b.css(a).show()},removeWrapper:function(c){if(c.parent().is(".ui-effects-wrapper"))return c.parent().replaceWith(c);return c},setTransition:function(c,
-a,b,d){d=d||{};f.each(a,function(e,g){unit=c.cssUnit(g);if(unit[0]>0)d[g]=unit[0]*b+unit[1]});return d}});f.fn.extend({effect:function(c){var a=k.apply(this,arguments),b={options:a[1],duration:a[2],callback:a[3]};a=b.options.mode;var d=f.effects[c];if(f.fx.off||!d)return a?this[a](b.duration,b.callback):this.each(function(){b.callback&&b.callback.call(this)});return d.call(this,b)},_show:f.fn.show,show:function(c){if(l(c))return this._show.apply(this,arguments);else{var a=k.apply(this,arguments);
-a[1].mode="show";return this.effect.apply(this,a)}},_hide:f.fn.hide,hide:function(c){if(l(c))return this._hide.apply(this,arguments);else{var a=k.apply(this,arguments);a[1].mode="hide";return this.effect.apply(this,a)}},__toggle:f.fn.toggle,toggle:function(c){if(l(c)||typeof c==="boolean"||f.isFunction(c))return this.__toggle.apply(this,arguments);else{var a=k.apply(this,arguments);a[1].mode="toggle";return this.effect.apply(this,a)}},cssUnit:function(c){var a=this.css(c),b=[];f.each(["em","px","%",
-"pt"],function(d,e){if(a.indexOf(e)>0)b=[parseFloat(a),e]});return b}});f.easing.jswing=f.easing.swing;f.extend(f.easing,{def:"easeOutQuad",swing:function(c,a,b,d,e){return f.easing[f.easing.def](c,a,b,d,e)},easeInQuad:function(c,a,b,d,e){return d*(a/=e)*a+b},easeOutQuad:function(c,a,b,d,e){return-d*(a/=e)*(a-2)+b},easeInOutQuad:function(c,a,b,d,e){if((a/=e/2)<1)return d/2*a*a+b;return-d/2*(--a*(a-2)-1)+b},easeInCubic:function(c,a,b,d,e){return d*(a/=e)*a*a+b},easeOutCubic:function(c,a,b,d,e){return d*
-((a=a/e-1)*a*a+1)+b},easeInOutCubic:function(c,a,b,d,e){if((a/=e/2)<1)return d/2*a*a*a+b;return d/2*((a-=2)*a*a+2)+b},easeInQuart:function(c,a,b,d,e){return d*(a/=e)*a*a*a+b},easeOutQuart:function(c,a,b,d,e){return-d*((a=a/e-1)*a*a*a-1)+b},easeInOutQuart:function(c,a,b,d,e){if((a/=e/2)<1)return d/2*a*a*a*a+b;return-d/2*((a-=2)*a*a*a-2)+b},easeInQuint:function(c,a,b,d,e){return d*(a/=e)*a*a*a*a+b},easeOutQuint:function(c,a,b,d,e){return d*((a=a/e-1)*a*a*a*a+1)+b},easeInOutQuint:function(c,a,b,d,e){if((a/=
-e/2)<1)return d/2*a*a*a*a*a+b;return d/2*((a-=2)*a*a*a*a+2)+b},easeInSine:function(c,a,b,d,e){return-d*Math.cos(a/e*(Math.PI/2))+d+b},easeOutSine:function(c,a,b,d,e){return d*Math.sin(a/e*(Math.PI/2))+b},easeInOutSine:function(c,a,b,d,e){return-d/2*(Math.cos(Math.PI*a/e)-1)+b},easeInExpo:function(c,a,b,d,e){return a==0?b:d*Math.pow(2,10*(a/e-1))+b},easeOutExpo:function(c,a,b,d,e){return a==e?b+d:d*(-Math.pow(2,-10*a/e)+1)+b},easeInOutExpo:function(c,a,b,d,e){if(a==0)return b;if(a==e)return b+d;if((a/=
-e/2)<1)return d/2*Math.pow(2,10*(a-1))+b;return d/2*(-Math.pow(2,-10*--a)+2)+b},easeInCirc:function(c,a,b,d,e){return-d*(Math.sqrt(1-(a/=e)*a)-1)+b},easeOutCirc:function(c,a,b,d,e){return d*Math.sqrt(1-(a=a/e-1)*a)+b},easeInOutCirc:function(c,a,b,d,e){if((a/=e/2)<1)return-d/2*(Math.sqrt(1-a*a)-1)+b;return d/2*(Math.sqrt(1-(a-=2)*a)+1)+b},easeInElastic:function(c,a,b,d,e){c=1.70158;var g=0,h=d;if(a==0)return b;if((a/=e)==1)return b+d;g||(g=e*0.3);if(h<Math.abs(d)){h=d;c=g/4}else c=g/(2*Math.PI)*Math.asin(d/
-h);return-(h*Math.pow(2,10*(a-=1))*Math.sin((a*e-c)*2*Math.PI/g))+b},easeOutElastic:function(c,a,b,d,e){c=1.70158;var g=0,h=d;if(a==0)return b;if((a/=e)==1)return b+d;g||(g=e*0.3);if(h<Math.abs(d)){h=d;c=g/4}else c=g/(2*Math.PI)*Math.asin(d/h);return h*Math.pow(2,-10*a)*Math.sin((a*e-c)*2*Math.PI/g)+d+b},easeInOutElastic:function(c,a,b,d,e){c=1.70158;var g=0,h=d;if(a==0)return b;if((a/=e/2)==2)return b+d;g||(g=e*0.3*1.5);if(h<Math.abs(d)){h=d;c=g/4}else c=g/(2*Math.PI)*Math.asin(d/h);if(a<1)return-0.5*
-h*Math.pow(2,10*(a-=1))*Math.sin((a*e-c)*2*Math.PI/g)+b;return h*Math.pow(2,-10*(a-=1))*Math.sin((a*e-c)*2*Math.PI/g)*0.5+d+b},easeInBack:function(c,a,b,d,e,g){if(g==j)g=1.70158;return d*(a/=e)*a*((g+1)*a-g)+b},easeOutBack:function(c,a,b,d,e,g){if(g==j)g=1.70158;return d*((a=a/e-1)*a*((g+1)*a+g)+1)+b},easeInOutBack:function(c,a,b,d,e,g){if(g==j)g=1.70158;if((a/=e/2)<1)return d/2*a*a*(((g*=1.525)+1)*a-g)+b;return d/2*((a-=2)*a*(((g*=1.525)+1)*a+g)+2)+b},easeInBounce:function(c,a,b,d,e){return d-f.easing.easeOutBounce(c,
-e-a,0,d,e)+b},easeOutBounce:function(c,a,b,d,e){return(a/=e)<1/2.75?d*7.5625*a*a+b:a<2/2.75?d*(7.5625*(a-=1.5/2.75)*a+0.75)+b:a<2.5/2.75?d*(7.5625*(a-=2.25/2.75)*a+0.9375)+b:d*(7.5625*(a-=2.625/2.75)*a+0.984375)+b},easeInOutBounce:function(c,a,b,d,e){if(a<e/2)return f.easing.easeInBounce(c,a*2,0,d,e)*0.5+b;return f.easing.easeOutBounce(c,a*2-e,0,d,e)*0.5+d*0.5+b}})}(jQuery);
-;/*
- * jQuery UI Effects Blind 1.8.14
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Effects/Blind
- *
- * Depends:
- * jquery.effects.core.js
- */
-(function(b){b.effects.blind=function(c){return this.queue(function(){var a=b(this),g=["position","top","bottom","left","right"],f=b.effects.setMode(a,c.options.mode||"hide"),d=c.options.direction||"vertical";b.effects.save(a,g);a.show();var e=b.effects.createWrapper(a).css({overflow:"hidden"}),h=d=="vertical"?"height":"width";d=d=="vertical"?e.height():e.width();f=="show"&&e.css(h,0);var i={};i[h]=f=="show"?d:0;e.animate(i,c.duration,c.options.easing,function(){f=="hide"&&a.hide();b.effects.restore(a,
-g);b.effects.removeWrapper(a);c.callback&&c.callback.apply(a[0],arguments);a.dequeue()})})}})(jQuery);
-;/*
- * jQuery UI Effects Bounce 1.8.14
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Effects/Bounce
- *
- * Depends:
- * jquery.effects.core.js
- */
-(function(e){e.effects.bounce=function(b){return this.queue(function(){var a=e(this),l=["position","top","bottom","left","right"],h=e.effects.setMode(a,b.options.mode||"effect"),d=b.options.direction||"up",c=b.options.distance||20,m=b.options.times||5,i=b.duration||250;/show|hide/.test(h)&&l.push("opacity");e.effects.save(a,l);a.show();e.effects.createWrapper(a);var f=d=="up"||d=="down"?"top":"left";d=d=="up"||d=="left"?"pos":"neg";c=b.options.distance||(f=="top"?a.outerHeight({margin:true})/3:a.outerWidth({margin:true})/
-3);if(h=="show")a.css("opacity",0).css(f,d=="pos"?-c:c);if(h=="hide")c/=m*2;h!="hide"&&m--;if(h=="show"){var g={opacity:1};g[f]=(d=="pos"?"+=":"-=")+c;a.animate(g,i/2,b.options.easing);c/=2;m--}for(g=0;g<m;g++){var j={},k={};j[f]=(d=="pos"?"-=":"+=")+c;k[f]=(d=="pos"?"+=":"-=")+c;a.animate(j,i/2,b.options.easing).animate(k,i/2,b.options.easing);c=h=="hide"?c*2:c/2}if(h=="hide"){g={opacity:0};g[f]=(d=="pos"?"-=":"+=")+c;a.animate(g,i/2,b.options.easing,function(){a.hide();e.effects.restore(a,l);e.effects.removeWrapper(a);
-b.callback&&b.callback.apply(this,arguments)})}else{j={};k={};j[f]=(d=="pos"?"-=":"+=")+c;k[f]=(d=="pos"?"+=":"-=")+c;a.animate(j,i/2,b.options.easing).animate(k,i/2,b.options.easing,function(){e.effects.restore(a,l);e.effects.removeWrapper(a);b.callback&&b.callback.apply(this,arguments)})}a.queue("fx",function(){a.dequeue()});a.dequeue()})}})(jQuery);
-;/*
- * jQuery UI Effects Clip 1.8.14
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Effects/Clip
- *
- * Depends:
- * jquery.effects.core.js
- */
-(function(b){b.effects.clip=function(e){return this.queue(function(){var a=b(this),i=["position","top","bottom","left","right","height","width"],f=b.effects.setMode(a,e.options.mode||"hide"),c=e.options.direction||"vertical";b.effects.save(a,i);a.show();var d=b.effects.createWrapper(a).css({overflow:"hidden"});d=a[0].tagName=="IMG"?d:a;var g={size:c=="vertical"?"height":"width",position:c=="vertical"?"top":"left"};c=c=="vertical"?d.height():d.width();if(f=="show"){d.css(g.size,0);d.css(g.position,
-c/2)}var h={};h[g.size]=f=="show"?c:0;h[g.position]=f=="show"?0:c/2;d.animate(h,{queue:false,duration:e.duration,easing:e.options.easing,complete:function(){f=="hide"&&a.hide();b.effects.restore(a,i);b.effects.removeWrapper(a);e.callback&&e.callback.apply(a[0],arguments);a.dequeue()}})})}})(jQuery);
-;/*
- * jQuery UI Effects Drop 1.8.14
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Effects/Drop
- *
- * Depends:
- * jquery.effects.core.js
- */
-(function(c){c.effects.drop=function(d){return this.queue(function(){var a=c(this),h=["position","top","bottom","left","right","opacity"],e=c.effects.setMode(a,d.options.mode||"hide"),b=d.options.direction||"left";c.effects.save(a,h);a.show();c.effects.createWrapper(a);var f=b=="up"||b=="down"?"top":"left";b=b=="up"||b=="left"?"pos":"neg";var g=d.options.distance||(f=="top"?a.outerHeight({margin:true})/2:a.outerWidth({margin:true})/2);if(e=="show")a.css("opacity",0).css(f,b=="pos"?-g:g);var i={opacity:e==
-"show"?1:0};i[f]=(e=="show"?b=="pos"?"+=":"-=":b=="pos"?"-=":"+=")+g;a.animate(i,{queue:false,duration:d.duration,easing:d.options.easing,complete:function(){e=="hide"&&a.hide();c.effects.restore(a,h);c.effects.removeWrapper(a);d.callback&&d.callback.apply(this,arguments);a.dequeue()}})})}})(jQuery);
-;/*
- * jQuery UI Effects Explode 1.8.14
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Effects/Explode
- *
- * Depends:
- * jquery.effects.core.js
- */
-(function(j){j.effects.explode=function(a){return this.queue(function(){var c=a.options.pieces?Math.round(Math.sqrt(a.options.pieces)):3,d=a.options.pieces?Math.round(Math.sqrt(a.options.pieces)):3;a.options.mode=a.options.mode=="toggle"?j(this).is(":visible")?"hide":"show":a.options.mode;var b=j(this).show().css("visibility","hidden"),g=b.offset();g.top-=parseInt(b.css("marginTop"),10)||0;g.left-=parseInt(b.css("marginLeft"),10)||0;for(var h=b.outerWidth(true),i=b.outerHeight(true),e=0;e<c;e++)for(var f=
-0;f<d;f++)b.clone().appendTo("body").wrap("<div></div>").css({position:"absolute",visibility:"visible",left:-f*(h/d),top:-e*(i/c)}).parent().addClass("ui-effects-explode").css({position:"absolute",overflow:"hidden",width:h/d,height:i/c,left:g.left+f*(h/d)+(a.options.mode=="show"?(f-Math.floor(d/2))*(h/d):0),top:g.top+e*(i/c)+(a.options.mode=="show"?(e-Math.floor(c/2))*(i/c):0),opacity:a.options.mode=="show"?0:1}).animate({left:g.left+f*(h/d)+(a.options.mode=="show"?0:(f-Math.floor(d/2))*(h/d)),top:g.top+
-e*(i/c)+(a.options.mode=="show"?0:(e-Math.floor(c/2))*(i/c)),opacity:a.options.mode=="show"?1:0},a.duration||500);setTimeout(function(){a.options.mode=="show"?b.css({visibility:"visible"}):b.css({visibility:"visible"}).hide();a.callback&&a.callback.apply(b[0]);b.dequeue();j("div.ui-effects-explode").remove()},a.duration||500)})}})(jQuery);
-;/*
- * jQuery UI Effects Fade 1.8.14
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Effects/Fade
- *
- * Depends:
- * jquery.effects.core.js
- */
-(function(b){b.effects.fade=function(a){return this.queue(function(){var c=b(this),d=b.effects.setMode(c,a.options.mode||"hide");c.animate({opacity:d},{queue:false,duration:a.duration,easing:a.options.easing,complete:function(){a.callback&&a.callback.apply(this,arguments);c.dequeue()}})})}})(jQuery);
-;/*
- * jQuery UI Effects Fold 1.8.14
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Effects/Fold
- *
- * Depends:
- * jquery.effects.core.js
- */
-(function(c){c.effects.fold=function(a){return this.queue(function(){var b=c(this),j=["position","top","bottom","left","right"],d=c.effects.setMode(b,a.options.mode||"hide"),g=a.options.size||15,h=!!a.options.horizFirst,k=a.duration?a.duration/2:c.fx.speeds._default/2;c.effects.save(b,j);b.show();var e=c.effects.createWrapper(b).css({overflow:"hidden"}),f=d=="show"!=h,l=f?["width","height"]:["height","width"];f=f?[e.width(),e.height()]:[e.height(),e.width()];var i=/([0-9]+)%/.exec(g);if(i)g=parseInt(i[1],
-10)/100*f[d=="hide"?0:1];if(d=="show")e.css(h?{height:0,width:g}:{height:g,width:0});h={};i={};h[l[0]]=d=="show"?f[0]:g;i[l[1]]=d=="show"?f[1]:0;e.animate(h,k,a.options.easing).animate(i,k,a.options.easing,function(){d=="hide"&&b.hide();c.effects.restore(b,j);c.effects.removeWrapper(b);a.callback&&a.callback.apply(b[0],arguments);b.dequeue()})})}})(jQuery);
-;/*
- * jQuery UI Effects Highlight 1.8.14
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Effects/Highlight
- *
- * Depends:
- * jquery.effects.core.js
- */
-(function(b){b.effects.highlight=function(c){return this.queue(function(){var a=b(this),e=["backgroundImage","backgroundColor","opacity"],d=b.effects.setMode(a,c.options.mode||"show"),f={backgroundColor:a.css("backgroundColor")};if(d=="hide")f.opacity=0;b.effects.save(a,e);a.show().css({backgroundImage:"none",backgroundColor:c.options.color||"#ffff99"}).animate(f,{queue:false,duration:c.duration,easing:c.options.easing,complete:function(){d=="hide"&&a.hide();b.effects.restore(a,e);d=="show"&&!b.support.opacity&&
-this.style.removeAttribute("filter");c.callback&&c.callback.apply(this,arguments);a.dequeue()}})})}})(jQuery);
-;/*
- * jQuery UI Effects Pulsate 1.8.14
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Effects/Pulsate
- *
- * Depends:
- * jquery.effects.core.js
- */
-(function(d){d.effects.pulsate=function(a){return this.queue(function(){var b=d(this),c=d.effects.setMode(b,a.options.mode||"show");times=(a.options.times||5)*2-1;duration=a.duration?a.duration/2:d.fx.speeds._default/2;isVisible=b.is(":visible");animateTo=0;if(!isVisible){b.css("opacity",0).show();animateTo=1}if(c=="hide"&&isVisible||c=="show"&&!isVisible)times--;for(c=0;c<times;c++){b.animate({opacity:animateTo},duration,a.options.easing);animateTo=(animateTo+1)%2}b.animate({opacity:animateTo},duration,
-a.options.easing,function(){animateTo==0&&b.hide();a.callback&&a.callback.apply(this,arguments)});b.queue("fx",function(){b.dequeue()}).dequeue()})}})(jQuery);
-;/*
- * jQuery UI Effects Scale 1.8.14
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Effects/Scale
- *
- * Depends:
- * jquery.effects.core.js
- */
-(function(c){c.effects.puff=function(b){return this.queue(function(){var a=c(this),e=c.effects.setMode(a,b.options.mode||"hide"),g=parseInt(b.options.percent,10)||150,h=g/100,i={height:a.height(),width:a.width()};c.extend(b.options,{fade:true,mode:e,percent:e=="hide"?g:100,from:e=="hide"?i:{height:i.height*h,width:i.width*h}});a.effect("scale",b.options,b.duration,b.callback);a.dequeue()})};c.effects.scale=function(b){return this.queue(function(){var a=c(this),e=c.extend(true,{},b.options),g=c.effects.setMode(a,
-b.options.mode||"effect"),h=parseInt(b.options.percent,10)||(parseInt(b.options.percent,10)==0?0:g=="hide"?0:100),i=b.options.direction||"both",f=b.options.origin;if(g!="effect"){e.origin=f||["middle","center"];e.restore=true}f={height:a.height(),width:a.width()};a.from=b.options.from||(g=="show"?{height:0,width:0}:f);h={y:i!="horizontal"?h/100:1,x:i!="vertical"?h/100:1};a.to={height:f.height*h.y,width:f.width*h.x};if(b.options.fade){if(g=="show"){a.from.opacity=0;a.to.opacity=1}if(g=="hide"){a.from.opacity=
-1;a.to.opacity=0}}e.from=a.from;e.to=a.to;e.mode=g;a.effect("size",e,b.duration,b.callback);a.dequeue()})};c.effects.size=function(b){return this.queue(function(){var a=c(this),e=["position","top","bottom","left","right","width","height","overflow","opacity"],g=["position","top","bottom","left","right","overflow","opacity"],h=["width","height","overflow"],i=["fontSize"],f=["borderTopWidth","borderBottomWidth","paddingTop","paddingBottom"],k=["borderLeftWidth","borderRightWidth","paddingLeft","paddingRight"],
-p=c.effects.setMode(a,b.options.mode||"effect"),n=b.options.restore||false,m=b.options.scale||"both",l=b.options.origin,j={height:a.height(),width:a.width()};a.from=b.options.from||j;a.to=b.options.to||j;if(l){l=c.effects.getBaseline(l,j);a.from.top=(j.height-a.from.height)*l.y;a.from.left=(j.width-a.from.width)*l.x;a.to.top=(j.height-a.to.height)*l.y;a.to.left=(j.width-a.to.width)*l.x}var d={from:{y:a.from.height/j.height,x:a.from.width/j.width},to:{y:a.to.height/j.height,x:a.to.width/j.width}};
-if(m=="box"||m=="both"){if(d.from.y!=d.to.y){e=e.concat(f);a.from=c.effects.setTransition(a,f,d.from.y,a.from);a.to=c.effects.setTransition(a,f,d.to.y,a.to)}if(d.from.x!=d.to.x){e=e.concat(k);a.from=c.effects.setTransition(a,k,d.from.x,a.from);a.to=c.effects.setTransition(a,k,d.to.x,a.to)}}if(m=="content"||m=="both")if(d.from.y!=d.to.y){e=e.concat(i);a.from=c.effects.setTransition(a,i,d.from.y,a.from);a.to=c.effects.setTransition(a,i,d.to.y,a.to)}c.effects.save(a,n?e:g);a.show();c.effects.createWrapper(a);
-a.css("overflow","hidden").css(a.from);if(m=="content"||m=="both"){f=f.concat(["marginTop","marginBottom"]).concat(i);k=k.concat(["marginLeft","marginRight"]);h=e.concat(f).concat(k);a.find("*[width]").each(function(){child=c(this);n&&c.effects.save(child,h);var o={height:child.height(),width:child.width()};child.from={height:o.height*d.from.y,width:o.width*d.from.x};child.to={height:o.height*d.to.y,width:o.width*d.to.x};if(d.from.y!=d.to.y){child.from=c.effects.setTransition(child,f,d.from.y,child.from);
-child.to=c.effects.setTransition(child,f,d.to.y,child.to)}if(d.from.x!=d.to.x){child.from=c.effects.setTransition(child,k,d.from.x,child.from);child.to=c.effects.setTransition(child,k,d.to.x,child.to)}child.css(child.from);child.animate(child.to,b.duration,b.options.easing,function(){n&&c.effects.restore(child,h)})})}a.animate(a.to,{queue:false,duration:b.duration,easing:b.options.easing,complete:function(){a.to.opacity===0&&a.css("opacity",a.from.opacity);p=="hide"&&a.hide();c.effects.restore(a,
-n?e:g);c.effects.removeWrapper(a);b.callback&&b.callback.apply(this,arguments);a.dequeue()}})})}})(jQuery);
-;/*
- * jQuery UI Effects Shake 1.8.14
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Effects/Shake
- *
- * Depends:
- * jquery.effects.core.js
- */
-(function(d){d.effects.shake=function(a){return this.queue(function(){var b=d(this),j=["position","top","bottom","left","right"];d.effects.setMode(b,a.options.mode||"effect");var c=a.options.direction||"left",e=a.options.distance||20,l=a.options.times||3,f=a.duration||a.options.duration||140;d.effects.save(b,j);b.show();d.effects.createWrapper(b);var g=c=="up"||c=="down"?"top":"left",h=c=="up"||c=="left"?"pos":"neg";c={};var i={},k={};c[g]=(h=="pos"?"-=":"+=")+e;i[g]=(h=="pos"?"+=":"-=")+e*2;k[g]=
-(h=="pos"?"-=":"+=")+e*2;b.animate(c,f,a.options.easing);for(e=1;e<l;e++)b.animate(i,f,a.options.easing).animate(k,f,a.options.easing);b.animate(i,f,a.options.easing).animate(c,f/2,a.options.easing,function(){d.effects.restore(b,j);d.effects.removeWrapper(b);a.callback&&a.callback.apply(this,arguments)});b.queue("fx",function(){b.dequeue()});b.dequeue()})}})(jQuery);
-;/*
- * jQuery UI Effects Slide 1.8.14
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Effects/Slide
- *
- * Depends:
- * jquery.effects.core.js
- */
-(function(c){c.effects.slide=function(d){return this.queue(function(){var a=c(this),h=["position","top","bottom","left","right"],f=c.effects.setMode(a,d.options.mode||"show"),b=d.options.direction||"left";c.effects.save(a,h);a.show();c.effects.createWrapper(a).css({overflow:"hidden"});var g=b=="up"||b=="down"?"top":"left";b=b=="up"||b=="left"?"pos":"neg";var e=d.options.distance||(g=="top"?a.outerHeight({margin:true}):a.outerWidth({margin:true}));if(f=="show")a.css(g,b=="pos"?isNaN(e)?"-"+e:-e:e);
-var i={};i[g]=(f=="show"?b=="pos"?"+=":"-=":b=="pos"?"-=":"+=")+e;a.animate(i,{queue:false,duration:d.duration,easing:d.options.easing,complete:function(){f=="hide"&&a.hide();c.effects.restore(a,h);c.effects.removeWrapper(a);d.callback&&d.callback.apply(this,arguments);a.dequeue()}})})}})(jQuery);
-;/*
- * jQuery UI Effects Transfer 1.8.14
- *
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * http://docs.jquery.com/UI/Effects/Transfer
- *
- * Depends:
- * jquery.effects.core.js
- */
-(function(e){e.effects.transfer=function(a){return this.queue(function(){var b=e(this),c=e(a.options.to),d=c.offset();c={top:d.top,left:d.left,height:c.innerHeight(),width:c.innerWidth()};d=b.offset();var f=e('<div class="ui-effects-transfer"></div>').appendTo(document.body).addClass(a.options.className).css({top:d.top,left:d.left,height:b.innerHeight(),width:b.innerWidth(),position:"absolute"}).animate(c,a.duration,a.options.easing,function(){f.remove();a.callback&&a.callback.apply(b[0],arguments);
-b.dequeue()})})}})(jQuery);
-;
\ No newline at end of file
+++ /dev/null
-/*
- * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
- * Digest Algorithm, as defined in RFC 1321.
- * Version 2.1 Copyright (C) Paul Johnston 1999 - 2002.
- * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
- * Distributed under the BSD License
- * See http://pajhome.org.uk/crypt/md5 for more info.
- */
-
-/*
- * Configurable variables. You may need to tweak these to be compatible with
- * the server-side, but the defaults work in most cases.
- */
-var hexcase = 0; /* hex output format. 0 - lowercase; 1 - uppercase */
-var b64pad = ""; /* base-64 pad character. "=" for strict RFC compliance */
-var chrsz = 8; /* bits per input character. 8 - ASCII; 16 - Unicode */
-
-/*
- * These are the functions you'll usually want to call
- * They take string arguments and return either hex or base-64 encoded strings
- */
-function hex_md5(s){ return binl2hex(core_md5(str2binl(s), s.length * chrsz));}
-function b64_md5(s){ return binl2b64(core_md5(str2binl(s), s.length * chrsz));}
-function str_md5(s){ return binl2str(core_md5(str2binl(s), s.length * chrsz));}
-function hex_hmac_md5(key, data) { return binl2hex(core_hmac_md5(key, data)); }
-function b64_hmac_md5(key, data) { return binl2b64(core_hmac_md5(key, data)); }
-function str_hmac_md5(key, data) { return binl2str(core_hmac_md5(key, data)); }
-
-/*
- * Perform a simple self-test to see if the VM is working
- */
-function md5_vm_test()
-{
- return hex_md5("abc") == "900150983cd24fb0d6963f7d28e17f72";
-}
-
-/*
- * Calculate the MD5 of an array of little-endian words, and a bit length
- */
-function core_md5(x, len)
-{
- /* append padding */
- x[len >> 5] |= 0x80 << ((len) % 32);
- x[(((len + 64) >>> 9) << 4) + 14] = len;
-
- var a = 1732584193;
- var b = -271733879;
- var c = -1732584194;
- var d = 271733878;
-
- for(var i = 0; i < x.length; i += 16)
- {
- var olda = a;
- var oldb = b;
- var oldc = c;
- var oldd = d;
-
- a = md5_ff(a, b, c, d, x[i+ 0], 7 , -680876936);
- d = md5_ff(d, a, b, c, x[i+ 1], 12, -389564586);
- c = md5_ff(c, d, a, b, x[i+ 2], 17, 606105819);
- b = md5_ff(b, c, d, a, x[i+ 3], 22, -1044525330);
- a = md5_ff(a, b, c, d, x[i+ 4], 7 , -176418897);
- d = md5_ff(d, a, b, c, x[i+ 5], 12, 1200080426);
- c = md5_ff(c, d, a, b, x[i+ 6], 17, -1473231341);
- b = md5_ff(b, c, d, a, x[i+ 7], 22, -45705983);
- a = md5_ff(a, b, c, d, x[i+ 8], 7 , 1770035416);
- d = md5_ff(d, a, b, c, x[i+ 9], 12, -1958414417);
- c = md5_ff(c, d, a, b, x[i+10], 17, -42063);
- b = md5_ff(b, c, d, a, x[i+11], 22, -1990404162);
- a = md5_ff(a, b, c, d, x[i+12], 7 , 1804603682);
- d = md5_ff(d, a, b, c, x[i+13], 12, -40341101);
- c = md5_ff(c, d, a, b, x[i+14], 17, -1502002290);
- b = md5_ff(b, c, d, a, x[i+15], 22, 1236535329);
-
- a = md5_gg(a, b, c, d, x[i+ 1], 5 , -165796510);
- d = md5_gg(d, a, b, c, x[i+ 6], 9 , -1069501632);
- c = md5_gg(c, d, a, b, x[i+11], 14, 643717713);
- b = md5_gg(b, c, d, a, x[i+ 0], 20, -373897302);
- a = md5_gg(a, b, c, d, x[i+ 5], 5 , -701558691);
- d = md5_gg(d, a, b, c, x[i+10], 9 , 38016083);
- c = md5_gg(c, d, a, b, x[i+15], 14, -660478335);
- b = md5_gg(b, c, d, a, x[i+ 4], 20, -405537848);
- a = md5_gg(a, b, c, d, x[i+ 9], 5 , 568446438);
- d = md5_gg(d, a, b, c, x[i+14], 9 , -1019803690);
- c = md5_gg(c, d, a, b, x[i+ 3], 14, -187363961);
- b = md5_gg(b, c, d, a, x[i+ 8], 20, 1163531501);
- a = md5_gg(a, b, c, d, x[i+13], 5 , -1444681467);
- d = md5_gg(d, a, b, c, x[i+ 2], 9 , -51403784);
- c = md5_gg(c, d, a, b, x[i+ 7], 14, 1735328473);
- b = md5_gg(b, c, d, a, x[i+12], 20, -1926607734);
-
- a = md5_hh(a, b, c, d, x[i+ 5], 4 , -378558);
- d = md5_hh(d, a, b, c, x[i+ 8], 11, -2022574463);
- c = md5_hh(c, d, a, b, x[i+11], 16, 1839030562);
- b = md5_hh(b, c, d, a, x[i+14], 23, -35309556);
- a = md5_hh(a, b, c, d, x[i+ 1], 4 , -1530992060);
- d = md5_hh(d, a, b, c, x[i+ 4], 11, 1272893353);
- c = md5_hh(c, d, a, b, x[i+ 7], 16, -155497632);
- b = md5_hh(b, c, d, a, x[i+10], 23, -1094730640);
- a = md5_hh(a, b, c, d, x[i+13], 4 , 681279174);
- d = md5_hh(d, a, b, c, x[i+ 0], 11, -358537222);
- c = md5_hh(c, d, a, b, x[i+ 3], 16, -722521979);
- b = md5_hh(b, c, d, a, x[i+ 6], 23, 76029189);
- a = md5_hh(a, b, c, d, x[i+ 9], 4 , -640364487);
- d = md5_hh(d, a, b, c, x[i+12], 11, -421815835);
- c = md5_hh(c, d, a, b, x[i+15], 16, 530742520);
- b = md5_hh(b, c, d, a, x[i+ 2], 23, -995338651);
-
- a = md5_ii(a, b, c, d, x[i+ 0], 6 , -198630844);
- d = md5_ii(d, a, b, c, x[i+ 7], 10, 1126891415);
- c = md5_ii(c, d, a, b, x[i+14], 15, -1416354905);
- b = md5_ii(b, c, d, a, x[i+ 5], 21, -57434055);
- a = md5_ii(a, b, c, d, x[i+12], 6 , 1700485571);
- d = md5_ii(d, a, b, c, x[i+ 3], 10, -1894986606);
- c = md5_ii(c, d, a, b, x[i+10], 15, -1051523);
- b = md5_ii(b, c, d, a, x[i+ 1], 21, -2054922799);
- a = md5_ii(a, b, c, d, x[i+ 8], 6 , 1873313359);
- d = md5_ii(d, a, b, c, x[i+15], 10, -30611744);
- c = md5_ii(c, d, a, b, x[i+ 6], 15, -1560198380);
- b = md5_ii(b, c, d, a, x[i+13], 21, 1309151649);
- a = md5_ii(a, b, c, d, x[i+ 4], 6 , -145523070);
- d = md5_ii(d, a, b, c, x[i+11], 10, -1120210379);
- c = md5_ii(c, d, a, b, x[i+ 2], 15, 718787259);
- b = md5_ii(b, c, d, a, x[i+ 9], 21, -343485551);
-
- a = safe_add(a, olda);
- b = safe_add(b, oldb);
- c = safe_add(c, oldc);
- d = safe_add(d, oldd);
- }
- return Array(a, b, c, d);
-
-}
-
-/*
- * These functions implement the four basic operations the algorithm uses.
- */
-function md5_cmn(q, a, b, x, s, t)
-{
- return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s),b);
-}
-function md5_ff(a, b, c, d, x, s, t)
-{
- return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t);
-}
-function md5_gg(a, b, c, d, x, s, t)
-{
- return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t);
-}
-function md5_hh(a, b, c, d, x, s, t)
-{
- return md5_cmn(b ^ c ^ d, a, b, x, s, t);
-}
-function md5_ii(a, b, c, d, x, s, t)
-{
- return md5_cmn(c ^ (b | (~d)), a, b, x, s, t);
-}
-
-/*
- * Calculate the HMAC-MD5, of a key and some data
- */
-function core_hmac_md5(key, data)
-{
- var bkey = str2binl(key);
- if(bkey.length > 16) bkey = core_md5(bkey, key.length * chrsz);
-
- var ipad = Array(16), opad = Array(16);
- for(var i = 0; i < 16; i++)
- {
- ipad[i] = bkey[i] ^ 0x36363636;
- opad[i] = bkey[i] ^ 0x5C5C5C5C;
- }
-
- var hash = core_md5(ipad.concat(str2binl(data)), 512 + data.length * chrsz);
- return core_md5(opad.concat(hash), 512 + 128);
-}
-
-/*
- * Add integers, wrapping at 2^32. This uses 16-bit operations internally
- * to work around bugs in some JS interpreters.
- */
-function safe_add(x, y)
-{
- var lsw = (x & 0xFFFF) + (y & 0xFFFF);
- var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
- return (msw << 16) | (lsw & 0xFFFF);
-}
-
-/*
- * Bitwise rotate a 32-bit number to the left.
- */
-function bit_rol(num, cnt)
-{
- return (num << cnt) | (num >>> (32 - cnt));
-}
-
-/*
- * Convert a string to an array of little-endian words
- * If chrsz is ASCII, characters >255 have their hi-byte silently ignored.
- */
-function str2binl(str)
-{
- var bin = Array();
- var mask = (1 << chrsz) - 1;
- for(var i = 0; i < str.length * chrsz; i += chrsz)
- bin[i>>5] |= (str.charCodeAt(i / chrsz) & mask) << (i%32);
- return bin;
-}
-
-/*
- * Convert an array of little-endian words to a string
- */
-function binl2str(bin)
-{
- var str = "";
- var mask = (1 << chrsz) - 1;
- for(var i = 0; i < bin.length * 32; i += chrsz)
- str += String.fromCharCode((bin[i>>5] >>> (i % 32)) & mask);
- return str;
-}
-
-/*
- * Convert an array of little-endian words to a hex string.
- */
-function binl2hex(binarray)
-{
- var hex_tab = hexcase ? "0123456789ABCDEF" : "0123456789abcdef";
- var str = "";
- for(var i = 0; i < binarray.length * 4; i++)
- {
- str += hex_tab.charAt((binarray[i>>2] >> ((i%4)*8+4)) & 0xF) +
- hex_tab.charAt((binarray[i>>2] >> ((i%4)*8 )) & 0xF);
- }
- return str;
-}
-
-/*
- * Convert an array of little-endian words to a base-64 string
- */
-function binl2b64(binarray)
-{
- var tab = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
- var str = "";
- for(var i = 0; i < binarray.length * 4; i += 3)
- {
- var triplet = (((binarray[i >> 2] >> 8 * ( i %4)) & 0xFF) << 16)
- | (((binarray[i+1 >> 2] >> 8 * ((i+1)%4)) & 0xFF) << 8 )
- | ((binarray[i+2 >> 2] >> 8 * ((i+2)%4)) & 0xFF);
- for(var j = 0; j < 4; j++)
- {
- if(i * 8 + j * 6 > binarray.length * 32) str += b64pad;
- else str += tab.charAt((triplet >> 6*(3-j)) & 0x3F);
- }
- }
- return str;
-}
+++ /dev/null
-package org.apache.archiva.configuration;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import org.apache.archiva.redback.components.registry.RegistryListener;
-
-import java.util.ArrayList;
-import java.util.List;
-
-public class TestConfiguration
- implements ArchivaConfiguration
-{
- private Configuration configuration = new Configuration();
-
- private List<ConfigurationListener> configurationListeners = new ArrayList<ConfigurationListener>();
-
- public Configuration getConfiguration()
- {
- return configuration;
- }
-
- public void save( Configuration configuration )
- throws org.apache.archiva.redback.components.registry.RegistryException, IndeterminateConfigurationException
- {
- this.configuration = configuration;
- }
-
- public boolean isDefaulted()
- {
- return false;
- }
-
- public void addListener( ConfigurationListener listener )
- {
- configurationListeners.add( listener );
- }
-
- public void removeListener( ConfigurationListener listener )
- {
- configurationListeners.remove( listener );
- }
-
- public void addChangeListener( RegistryListener listener )
- {
- //noop
- }
-
- public void reload()
- {
- // no op
- }
-}
+++ /dev/null
-package org.apache.archiva.web.action;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import com.opensymphony.xwork2.ActionContext;
-import com.opensymphony.xwork2.config.Configuration;
-import com.opensymphony.xwork2.config.ConfigurationManager;
-import com.opensymphony.xwork2.config.providers.XWorkConfigurationProvider;
-import com.opensymphony.xwork2.inject.Container;
-import com.opensymphony.xwork2.util.ValueStack;
-import com.opensymphony.xwork2.util.ValueStackFactory;
-import org.apache.archiva.metadata.generic.GenericMetadataFacet;
-import org.apache.archiva.metadata.model.CiManagement;
-import org.apache.archiva.metadata.model.IssueManagement;
-import org.apache.archiva.metadata.model.License;
-import org.apache.archiva.metadata.model.Organization;
-import org.apache.archiva.metadata.model.ProjectVersionMetadata;
-import org.apache.archiva.metadata.model.Scm;
-import org.apache.archiva.metadata.repository.storage.maven2.MavenProjectFacet;
-import org.apache.archiva.metadata.repository.storage.maven2.MavenProjectParent;
-import org.apache.archiva.security.UserRepositoriesStub;
-import org.apache.archiva.webtest.memory.TestMetadataResolver;
-import org.apache.jackrabbit.api.JackrabbitRepository;
-import org.apache.struts2.StrutsSpringTestCase;
-
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import org.apache.archiva.test.utils.ArchivaBlockJUnit4ClassRunner;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.runner.RunWith;
-@RunWith( ArchivaBlockJUnit4ClassRunner.class )
-public abstract class AbstractActionTestCase
- extends StrutsSpringTestCase
-{
- protected static final String TEST_REPO = "test-repo";
-
- protected TestMetadataResolver metadataResolver;
-
- protected static final String TEST_GROUP_ID = "groupId";
-
- protected static final String TEST_ARTIFACT_ID = "artifactId";
-
- protected static final String TEST_PACKAGING = "packaging";
-
- protected static final String TEST_ISSUE_URL = "http://jira.codehaus.org/browse/MRM";
-
- protected static final String TEST_ISSUE_SYSTEM = "jira";
-
- protected static final String TEST_CI_SYSTEM = "continuum";
-
- protected static final String TEST_CI_URL = "http://vmbuild.apache.org/";
-
- protected static final String TEST_URL = "url";
-
- protected static final String TEST_NAME = "name";
-
- protected static final String TEST_DESCRIPTION = "description";
-
- protected static final String TEST_PARENT_GROUP_ID = "parentGroupId";
-
- protected static final String TEST_PARENT_ARTIFACT_ID = "parentArtifactId";
-
- protected static final String TEST_PARENT_VERSION = "parentVersion";
-
- protected static final String TEST_ORGANIZATION_NAME = "organizationName";
-
- protected static final String TEST_ORGANIZATION_URL = "organizationUrl";
-
- protected static final String TEST_LICENSE_URL = "licenseUrl";
-
- protected static final String TEST_LICENSE_NAME = "licenseName";
-
- protected static final String TEST_LICENSE_URL_2 = "licenseUrl_2";
-
- protected static final String TEST_LICENSE_NAME_2 = "licenseName_2";
-
- protected static final String TEST_SCM_CONNECTION = "scmConnection";
-
- protected static final String TEST_SCM_DEV_CONNECTION = "scmDevConnection";
-
- protected static final String TEST_SCM_URL = "scmUrl";
-
- protected static final String TEST_GENERIC_METADATA_PROPERTY_NAME = "rating";
-
- protected static final String TEST_GENERIC_METADATA_PROPERTY_VALUE = "5 stars";
-
- @Override
- protected String[] getContextLocations( )
- {
- return new String[]{ "classpath*:/META-INF/spring-context.xml", "classpath*:/spring-context.xml" };
- }
-
- protected void setObservableRepos( List<String> repoIds )
- {
- UserRepositoriesStub repos = applicationContext.getBean( "userRepositories", UserRepositoriesStub.class );
- repos.setObservableRepositoryIds( repoIds );
- }
-
- protected void assertDefaultModel( ProjectVersionMetadata model, String version )
- {
- assertDefaultModel( model, TEST_GROUP_ID, TEST_ARTIFACT_ID, version );
- }
-
- protected void assertDefaultModel( ProjectVersionMetadata model, String groupId, String artifactId, String version )
- {
- assertEquals( version, model.getVersion( ) );
- assertEquals( TEST_URL, model.getUrl( ) );
- assertEquals( TEST_NAME, model.getName( ) );
- assertEquals( TEST_DESCRIPTION, model.getDescription( ) );
- assertEquals( TEST_ORGANIZATION_NAME, model.getOrganization( ).getName( ) );
- assertEquals( TEST_ORGANIZATION_URL, model.getOrganization( ).getUrl( ) );
- assertEquals( 2, model.getLicenses( ).size( ) );
- License l = model.getLicenses( ).get( 0 );
- assertEquals( TEST_LICENSE_NAME, l.getName( ) );
- assertEquals( TEST_LICENSE_URL, l.getUrl( ) );
- l = model.getLicenses( ).get( 1 );
- assertEquals( TEST_LICENSE_NAME_2, l.getName( ) );
- assertEquals( TEST_LICENSE_URL_2, l.getUrl( ) );
- assertEquals( TEST_ISSUE_SYSTEM, model.getIssueManagement( ).getSystem( ) );
- assertEquals( TEST_ISSUE_URL, model.getIssueManagement( ).getUrl( ) );
- assertEquals( TEST_CI_SYSTEM, model.getCiManagement( ).getSystem( ) );
- assertEquals( TEST_CI_URL, model.getCiManagement( ).getUrl( ) );
- assertEquals( TEST_SCM_CONNECTION, model.getScm( ).getConnection( ) );
- assertEquals( TEST_SCM_DEV_CONNECTION, model.getScm( ).getDeveloperConnection( ) );
- assertEquals( TEST_SCM_URL, model.getScm( ).getUrl( ) );
-
- MavenProjectFacet mavenFacet = (MavenProjectFacet) model.getFacet( MavenProjectFacet.FACET_ID );
- assertEquals( groupId, mavenFacet.getGroupId( ) );
- assertEquals( artifactId, mavenFacet.getArtifactId( ) );
- assertEquals( TEST_PACKAGING, mavenFacet.getPackaging( ) );
- assertEquals( TEST_PARENT_GROUP_ID, mavenFacet.getParent( ).getGroupId( ) );
- assertEquals( TEST_PARENT_ARTIFACT_ID, mavenFacet.getParent( ).getArtifactId( ) );
- assertEquals( TEST_PARENT_VERSION, mavenFacet.getParent( ).getVersion( ) );
- }
-
- protected ProjectVersionMetadata createProjectModel( String version )
- {
- return createProjectModel( TEST_GROUP_ID, TEST_ARTIFACT_ID, version );
- }
-
- protected ProjectVersionMetadata createProjectModel( String groupId, String artifactId, String version )
- {
- ProjectVersionMetadata model = new ProjectVersionMetadata( );
- model.setId( version );
- model.setUrl( TEST_URL );
- model.setName( TEST_NAME );
- model.setDescription( TEST_DESCRIPTION );
- CiManagement ci = new CiManagement( );
- ci.setSystem( TEST_CI_SYSTEM );
- ci.setUrl( TEST_CI_URL );
- model.setCiManagement( ci );
- IssueManagement issue = new IssueManagement( );
- issue.setSystem( TEST_ISSUE_SYSTEM );
- issue.setUrl( TEST_ISSUE_URL );
- model.setIssueManagement( issue );
- Organization organization = new Organization( );
- organization.setName( TEST_ORGANIZATION_NAME );
- organization.setUrl( TEST_ORGANIZATION_URL );
- model.setOrganization( organization );
- License l = new License( );
- l.setName( TEST_LICENSE_NAME );
- l.setUrl( TEST_LICENSE_URL );
- model.addLicense( l );
- l = new License( );
- l.setName( TEST_LICENSE_NAME_2 );
- l.setUrl( TEST_LICENSE_URL_2 );
- model.addLicense( l );
- Scm scm = new Scm( );
- scm.setConnection( TEST_SCM_CONNECTION );
- scm.setDeveloperConnection( TEST_SCM_DEV_CONNECTION );
- scm.setUrl( TEST_SCM_URL );
- model.setScm( scm );
-
- MavenProjectFacet mavenProjectFacet = new MavenProjectFacet( );
- mavenProjectFacet.setGroupId( groupId );
- mavenProjectFacet.setArtifactId( artifactId );
- mavenProjectFacet.setPackaging( TEST_PACKAGING );
- MavenProjectParent parent = new MavenProjectParent( );
- parent.setGroupId( TEST_PARENT_GROUP_ID );
- parent.setArtifactId( TEST_PARENT_ARTIFACT_ID );
- parent.setVersion( TEST_PARENT_VERSION );
- mavenProjectFacet.setParent( parent );
- model.addFacet( mavenProjectFacet );
-
- GenericMetadataFacet genericMetadataFacet = new GenericMetadataFacet( );
- Map<String, String> props = new HashMap<String, String>( );
- props.put( TEST_GENERIC_METADATA_PROPERTY_NAME, TEST_GENERIC_METADATA_PROPERTY_VALUE );
- genericMetadataFacet.setAdditionalProperties( props );
- model.addFacet( genericMetadataFacet );
-
- return model;
- }
-
- @Override
- @Before
- public void setUp( )
- throws Exception
- {
- super.setUp( );
-
- ConfigurationManager configurationManager = new ConfigurationManager( );
- configurationManager.addContainerProvider( new XWorkConfigurationProvider( ) );
- Configuration config = configurationManager.getConfiguration( );
- Container container = config.getContainer( );
-
- ValueStack stack = container.getInstance( ValueStackFactory.class ).createValueStack( );
- stack.getContext( ).put( ActionContext.CONTAINER, container );
- ActionContext.setContext( new ActionContext( stack.getContext( ) ) );
- }
-
- @Override
- @After
- public void tearDown( )
- throws Exception
- {
- super.tearDown( );
- applicationContext.getBean( JackrabbitRepository.class ).shutdown( );
- }
-}
+++ /dev/null
-package org.apache.archiva.web.action;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import com.opensymphony.xwork2.ActionSupport;
-import org.apache.commons.lang.StringUtils;
-import org.apache.struts2.StrutsSpringTestCase;
-
-import java.lang.reflect.Method;
-import java.util.Collection;
-import java.util.List;
-import org.apache.archiva.test.utils.ArchivaBlockJUnit4ClassRunner;
-import org.junit.runner.RunWith;
-/**
- * AbstractWebworkTestCase
- *
- *
- */
-@RunWith( ArchivaBlockJUnit4ClassRunner.class )
-public abstract class AbstractWebworkTestCase
- extends StrutsSpringTestCase
-{
-
-
- @Override
- protected String[] getContextLocations()
- {
- return new String[]{ "classpath*:/META-INF/spring-context.xml", "classpath*:/spring-context.xml" };
- }
-
- /**
- * This is a conveinence method for mimicking how the webwork interceptors
- * operate on an action, before the request is processed.
- *
- * Call this before each major request to the action to be sure you mimic the webwork process correctly.
- */
- protected void preRequest( ActionSupport action )
- {
- action.clearErrorsAndMessages();
- }
-
- /**
- * Tests the action to ensure that it has errors.
- *
- * NOTE: Don't forget to run {@link #preRequest(ActionSupport)} before each request to your action!
- */
- protected void assertHasErrors( ActionSupport action )
- {
- assertNotNull( action.getActionErrors() );
- assertTrue( "Expected an error to occur.", action.getActionErrors().size() > 0 );
- }
-
- /**
- * Tests the action to ensure that it has messages.
- *
- * NOTE: Don't forget to run {@link #preRequest(ActionSupport)} before each request to your action!
- */
- protected void assertHasMessages( ActionSupport action )
- {
- assertNotNull( action.getActionMessages() );
- assertTrue( "Expected an message to be set.", action.getActionMessages().size() > 0 );
- }
-
- /**
- * Tests the action to ensure that it has NO errors.
- *
- * NOTE: Don't forget to run {@link #preRequest(ActionSupport)} before each request to your action!
- */
- @SuppressWarnings("unchecked")
- protected void assertNoErrors( ActionSupport action )
- {
- List<String> errors = (List<String>) action.getActionErrors();
-
- assertNotNull( errors );
- if ( errors.size() > 0 )
- {
- StringBuilder msg = new StringBuilder();
- msg.append( "Should have had no errors. but found the following errors." );
-
- for ( String error : errors )
- {
- msg.append( "\n " ).append( error );
- }
- fail( msg.toString() );
- }
- }
-
- @SuppressWarnings("unchecked")
- protected void assertRequestStatus( ActionSupport action, String expectedStatus, String methodName )
- throws Exception
- {
- action.clearErrorsAndMessages();
-
- Method method = action.getClass().getDeclaredMethod( methodName, (Class[]) null );
- Object actualStatus = method.invoke( action, (Object[]) null );
- assertTrue( "return should be of type String", actualStatus instanceof String );
-
- if ( !StringUtils.equals( expectedStatus, (String) actualStatus ) )
- {
- StringBuilder msg = new StringBuilder();
- msg.append( "Unexpected status returned from method <" );
- msg.append( methodName ).append( "> on action <" );
- String clazzname = action.getClass().getName();
- msg.append( clazzname.substring( clazzname.lastIndexOf( '.' ) ) );
- msg.append( ">: expected:<" ).append( expectedStatus ).append( "> but was:<" );
- msg.append( (String) actualStatus ).append( ">. (see attached action messages and errors below)" );
-
- for ( String message : (Collection<String>) action.getActionMessages() )
- {
- msg.append( "\n [MESSAGE]: " ).append( message );
- }
-
- for ( String error : (Collection<String>) action.getActionErrors() )
- {
- msg.append( "\n [ERROR]: " ).append( error );
- }
-
- fail( msg.toString() );
- }
- }
-}
+++ /dev/null
-package org.apache.archiva.web.action;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import org.apache.archiva.audit.AuditEvent;
-import org.easymock.ArgumentsMatcher;
-
-import java.util.Arrays;
-
-public class AuditEventArgumentsMatcher
- implements ArgumentsMatcher
-{
- public boolean matches( Object[] objects, Object[] objects1 )
- {
- if ( objects.length != 1 || objects1.length != 1 )
- {
- return false;
- }
- else
- {
- AuditEvent o1 = (AuditEvent) objects[0];
- AuditEvent o2 = (AuditEvent) objects1[0];
- o2.setTimestamp( o1.getTimestamp() ); // effectively ignore the timestamp
- return o1.equals( o2 );
- }
- }
-
- public String toString( Object[] objects )
- {
- return Arrays.asList( objects ).toString();
- }
-}
+++ /dev/null
-package org.apache.archiva.web.action;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import com.google.common.collect.Lists;
-import com.opensymphony.xwork2.Action;
-import org.apache.archiva.metadata.model.ProjectVersionMetadata;
-import org.apache.archiva.metadata.repository.RepositorySession;
-import org.apache.archiva.webtest.memory.TestMetadataResolver;
-import org.apache.archiva.webtest.memory.TestRepositorySessionFactory;
-import org.apache.archiva.scheduler.indexing.DefaultDownloadRemoteIndexScheduler;
-
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.List;
-import org.junit.Test;
-
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.when;
-
-public class BrowseActionTest
- extends AbstractActionTestCase
-{
- private static final String ACTION_HINT = "browseAction";
-
- private BrowseAction action;
-
- private static final List<String> GROUPS =
- Arrays.asList( "org.apache.archiva", "commons-lang", "org.apache.maven", "com.sun", "com.oracle",
- "repeat.repeat" );
-
- private static final String OTHER_TEST_REPO = "other-repo";
-
- @Override
- public void setUp()
- throws Exception
- {
- super.setUp();
- setObservableRepos( Lists.<String>newArrayList( "test-repo" ) );
- action = (BrowseAction) getActionProxy( "/browse.action" ).getAction();
- metadataResolver = new TestMetadataResolver();
- RepositorySession repositorySession = mock( RepositorySession.class );
- when( repositorySession.getResolver() ).thenReturn( metadataResolver );
- TestRepositorySessionFactory factory =
- applicationContext.getBean( "repositorySessionFactory#test", TestRepositorySessionFactory.class );
- factory.setRepositorySession( repositorySession );
- }
-
- @Override
- public void tearDown()
- throws Exception
- {
- super.tearDown();
- applicationContext.getBean( DefaultDownloadRemoteIndexScheduler.class ).shutdown();
- setObservableRepos( Lists.<String>newArrayList( "test-repo" ) );
- }
-
- @Test
- public void testInstantiation()
- {
- assertFalse( action == getActionProxy( "/browse.action" ).getAction() );
- }
-
- @Test
- public void testBrowse()
- throws Exception
- {
- metadataResolver.setNamespaces( TEST_REPO, GROUPS );
-
- String result = action.browse();
- assertSuccessResult( result );
-
- assertEquals( Arrays.asList( "com", "commons-lang", "org.apache", "repeat.repeat" ), action.getNamespaces() );
- assertNull( action.getProjectIds() );
- assertNull( action.getProjectVersions() );
-
- assertNull( action.getGroupId() );
- assertNull( action.getArtifactId() );
- assertNull( action.getRepositoryId() );
- assertNull( action.getSharedModel() );
- }
-
- @Test
- public void testBrowseNoObservableRepos()
- throws Exception
- {
- setObservableRepos( Collections.<String>emptyList() );
-
- String result = action.browse();
- assertNoAccessResult( result );
-
- assertNoOutputVariables();
- }
-
- @Test
- public void testBrowseGroupNoObservableRepos()
- throws Exception
- {
- setObservableRepos( Collections.<String>emptyList() );
- String selectedGroupId = "org";
-
- action.setGroupId( selectedGroupId );
- String result = action.browseGroup();
- assertNoAccessResult( result );
-
- assertEquals( selectedGroupId, action.getGroupId() );
- assertNull( action.getNamespaces() );
- assertNull( action.getProjectIds() );
- assertNull( action.getProjectVersions() );
- assertNull( action.getArtifactId() );
- assertNull( action.getRepositoryId() );
- assertNull( action.getSharedModel() );
- }
-
- @Test
- public void testBrowseArtifactNoObservableRepos()
- throws Exception
- {
- setObservableRepos( Collections.<String>emptyList() );
- String selectedGroupId = "org.apache";
- String selectedArtifactId = "apache";
-
- action.setGroupId( selectedGroupId );
- action.setArtifactId( selectedArtifactId );
- String result = action.browseArtifact();
- assertNoAccessResult( result );
-
- assertEquals( selectedGroupId, action.getGroupId() );
- assertEquals( selectedArtifactId, action.getArtifactId() );
- assertNull( action.getNamespaces() );
- assertNull( action.getProjectIds() );
- assertNull( action.getProjectVersions() );
- assertNull( action.getRepositoryId() );
- assertNull( action.getSharedModel() );
- }
-
- @Test
- public void testBrowseGroupNoGroupId()
- throws Exception
- {
- String result = action.browseGroup();
- assertErrorResult( result );
- assertNoOutputVariables();
- }
-
- @Test
- public void testBrowseGroupNoArtifacts()
- throws Exception
- {
- String selectedGroupId = "org";
- List<String> groups = Arrays.asList( "org.apache.archiva", "org.apache.maven" );
-
- metadataResolver.setNamespaces( TEST_REPO, groups );
- action.setGroupId( selectedGroupId );
- String result = action.browseGroup();
- assertSuccessResult( result );
-
- assertEquals( Collections.singletonList( "org.apache" ), action.getNamespaces() );
- assertEquals( Collections.<String>emptyList(), action.getProjectIds() );
- assertNull( action.getProjectVersions() );
-
- assertEquals( selectedGroupId, action.getGroupId() );
- assertNull( action.getArtifactId() );
- assertNull( action.getRepositoryId() );
- assertNull( action.getSharedModel() );
- }
-
- @Test
- public void testBrowseGroupWithArtifacts()
- throws Exception
- {
- String artifacts = "apache";
- String selectedGroupId = "org.apache";
- List<String> groups = Arrays.asList( "org.apache.archiva", "org.apache.maven" );
-
- metadataResolver.setNamespaces( TEST_REPO, groups );
- metadataResolver.setProjectVersion( TEST_REPO, selectedGroupId, artifacts, new ProjectVersionMetadata() );
- action.setGroupId( selectedGroupId );
- String result = action.browseGroup();
- assertSuccessResult( result );
-
- assertEquals( groups, action.getNamespaces() );
- assertEquals( Collections.singletonList( artifacts ), action.getProjectIds() );
- assertNull( action.getProjectVersions() );
-
- assertEquals( selectedGroupId, action.getGroupId() );
- assertNull( action.getArtifactId() );
- assertNull( action.getRepositoryId() );
- assertNull( action.getSharedModel() );
- }
-
- @Test
- public void testBrowseWithCollapsedGroupsAndArtifacts()
- throws Exception
- {
- List<String> groups = Arrays.asList( "org.apache.archiva", "org.apache" );
-
- metadataResolver.setNamespaces( TEST_REPO, groups );
- // add an artifact in the tree to make sure "single" is not collapsed
- metadataResolver.setProjectVersion( TEST_REPO, "org.apache", "apache", new ProjectVersionMetadata() );
-
- String result = action.browse();
- assertSuccessResult( result );
-
- assertEquals( Collections.singletonList( "org.apache" ), action.getNamespaces() );
- assertNull( action.getProjectIds() );
- assertNull( action.getProjectVersions() );
-
- assertNull( action.getGroupId() );
- assertNull( action.getArtifactId() );
- assertNull( action.getRepositoryId() );
- assertNull( action.getSharedModel() );
- }
-
- @Test
- public void testBrowseWithCollapsedGroupsAndArtifactsAcrossRepositories()
- throws Exception
- {
- setObservableRepos( Arrays.asList( TEST_REPO, OTHER_TEST_REPO ) );
-
- metadataResolver.setNamespaces( TEST_REPO, Arrays.asList( "org.apache.archiva", "org.apache" ) );
- metadataResolver.setNamespaces( OTHER_TEST_REPO, Arrays.asList( "org.codehaus.plexus", "org.codehaus" ) );
-
- // add an artifact in the tree to make sure "single" is not collapsed
- metadataResolver.setProjectVersion( TEST_REPO, "org.apache", "apache", new ProjectVersionMetadata() );
-
- String result = action.browse();
- assertSuccessResult( result );
-
- assertEquals( Collections.singletonList( "org" ), action.getNamespaces() );
- assertNull( action.getProjectIds() );
- assertNull( action.getProjectVersions() );
-
- assertNull( action.getGroupId() );
- assertNull( action.getArtifactId() );
- assertNull( action.getRepositoryId() );
- assertNull( action.getSharedModel() );
- }
-
- @Test
- public void testBrowseGroupWithCollapsedGroupsAndArtifacts()
- throws Exception
- {
- String artifacts = "apache";
- String selectedGroupId = "org.apache";
- List<String> groups = Arrays.asList( "org.apache.archiva", "org.apache" );
-
- metadataResolver.setNamespaces( TEST_REPO, groups );
- // add an artifact in the tree to make sure "single" is not collapsed
- metadataResolver.setProjectVersion( TEST_REPO, "org.apache", "apache", new ProjectVersionMetadata() );
-
- action.setGroupId( selectedGroupId );
- String result = action.browseGroup();
- assertSuccessResult( result );
-
- assertEquals( Collections.singletonList( "org.apache.archiva" ), action.getNamespaces() );
- assertEquals( Collections.singletonList( artifacts ), action.getProjectIds() );
- assertNull( action.getProjectVersions() );
-
- assertEquals( selectedGroupId, action.getGroupId() );
- assertNull( action.getArtifactId() );
- assertNull( action.getRepositoryId() );
- assertNull( action.getSharedModel() );
- }
-
- @Test
- public void testBrowseArtifactNoGroupId()
- throws Exception
- {
- String selectedArtifactId = "apache";
-
- action.setArtifactId( selectedArtifactId );
- String result = action.browseArtifact();
- assertErrorResult( result );
-
- assertNull( action.getNamespaces() );
- assertNull( action.getProjectIds() );
- assertNull( action.getProjectVersions() );
- assertNull( action.getGroupId() );
- assertEquals( selectedArtifactId, action.getArtifactId() );
- assertNull( action.getRepositoryId() );
- assertNull( action.getSharedModel() );
- }
-
- @Test
- public void testBrowseArtifactNoArtifactId()
- throws Exception
- {
- String selectedGroupId = "org.apache";
-
- action.setGroupId( selectedGroupId );
- String result = action.browseArtifact();
- assertErrorResult( result );
-
- assertNull( action.getNamespaces() );
- assertNull( action.getProjectIds() );
- assertNull( action.getProjectVersions() );
- assertEquals( selectedGroupId, action.getGroupId() );
- assertNull( action.getArtifactId() );
- assertNull( action.getRepositoryId() );
- assertNull( action.getSharedModel() );
- }
-
- @Test
- public void testBrowseArtifact()
- throws Exception
-
- {
- String selectedGroupId = "org.apache";
- String selectedArtifactId = "apache";
-
- List<String> versions = Arrays.asList( "1", "2", "3", "4" );
- metadataResolver.setProjectVersion( TEST_REPO, selectedGroupId, selectedArtifactId,
- createProjectModel( selectedGroupId, selectedArtifactId, "1" ) );
- metadataResolver.setProjectVersion( TEST_REPO, selectedGroupId, selectedArtifactId,
- createProjectModel( selectedGroupId, selectedArtifactId, "2" ) );
- metadataResolver.setProjectVersion( TEST_REPO, selectedGroupId, selectedArtifactId,
- createProjectModel( selectedGroupId, selectedArtifactId, "3" ) );
- metadataResolver.setProjectVersion( TEST_REPO, selectedGroupId, selectedArtifactId,
- createProjectModel( selectedGroupId, selectedArtifactId, "4" ) );
-
- action.setGroupId( selectedGroupId );
- action.setArtifactId( selectedArtifactId );
- String result = action.browseArtifact();
- assertSuccessResult( result );
-
- assertEquals( selectedGroupId, action.getGroupId() );
- assertEquals( selectedArtifactId, action.getArtifactId() );
- assertNull( action.getRepositoryId() );
-
- assertNull( action.getNamespaces() );
- assertNull( action.getProjectIds() );
- assertEquals( versions, action.getProjectVersions() );
-
- ProjectVersionMetadata model = action.getSharedModel();
- assertDefaultModel( model, selectedGroupId, selectedArtifactId, null );
- }
-
- @Test
- public void testBrowseArtifactWithSnapshots()
- throws Exception
-
- {
- String selectedGroupId = "org.apache";
- String selectedArtifactId = "apache";
-
- List<String> versions = Arrays.asList( "1", "2", "3", "4-SNAPSHOT", "4", "5-SNAPSHOT" );
- metadataResolver.setProjectVersion( TEST_REPO, selectedGroupId, selectedArtifactId,
- createProjectModel( selectedGroupId, selectedArtifactId, "1" ) );
- metadataResolver.setProjectVersion( TEST_REPO, selectedGroupId, selectedArtifactId,
- createProjectModel( selectedGroupId, selectedArtifactId, "2" ) );
- metadataResolver.setProjectVersion( TEST_REPO, selectedGroupId, selectedArtifactId,
- createProjectModel( selectedGroupId, selectedArtifactId, "3" ) );
- metadataResolver.setProjectVersion( TEST_REPO, selectedGroupId, selectedArtifactId,
- createProjectModel( selectedGroupId, selectedArtifactId, "4-SNAPSHOT" ) );
- metadataResolver.setProjectVersion( TEST_REPO, selectedGroupId, selectedArtifactId,
- createProjectModel( selectedGroupId, selectedArtifactId, "4" ) );
- metadataResolver.setProjectVersion( TEST_REPO, selectedGroupId, selectedArtifactId,
- createProjectModel( selectedGroupId, selectedArtifactId, "5-SNAPSHOT" ) );
-
- action.setGroupId( selectedGroupId );
- action.setArtifactId( selectedArtifactId );
- String result = action.browseArtifact();
- assertSuccessResult( result );
-
- assertEquals( selectedGroupId, action.getGroupId() );
- assertEquals( selectedArtifactId, action.getArtifactId() );
- assertNull( action.getRepositoryId() );
-
- assertNull( action.getNamespaces() );
- assertNull( action.getProjectIds() );
- assertEquals( versions, action.getProjectVersions() );
-
- ProjectVersionMetadata model = action.getSharedModel();
- assertDefaultModel( model, selectedGroupId, selectedArtifactId, null );
- }
-
- // TODO: test with restricted observable repos
- // TODO: current behaviour is to ignore values that differ between models - instead, pick the latest and use that.
- // Need to update the tests to verify this as models are currently the same
-
- private void assertNoAccessResult( String result )
- {
- assertEquals( GlobalResults.ACCESS_TO_NO_REPOS, result );
- assertEquals( 0, action.getActionErrors().size() );
- assertEquals( 0, action.getActionMessages().size() );
- }
-
- private void assertSuccessResult( String result )
- {
- assertEquals( Action.SUCCESS, result );
- assertEquals( 0, action.getActionErrors().size() );
- assertEquals( 0, action.getActionMessages().size() );
- }
-
- private void assertErrorResult( String result )
- {
- assertEquals( Action.ERROR, result );
- assertEquals( 1, action.getActionErrors().size() );
- assertEquals( 0, action.getActionMessages().size() );
- }
-
- private void assertNoOutputVariables()
- {
- assertNull( action.getNamespaces() );
- assertNull( action.getProjectIds() );
- assertNull( action.getProjectVersions() );
- assertNull( action.getGroupId() );
- assertNull( action.getArtifactId() );
- assertNull( action.getRepositoryId() );
- assertNull( action.getSharedModel() );
- }
-
-
-}
\ No newline at end of file
+++ /dev/null
-package org.apache.archiva.web.action;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import com.opensymphony.xwork2.Action;
-import net.sf.beanlib.provider.replicator.BeanReplicator;
-import org.apache.archiva.admin.model.beans.ManagedRepository;
-import org.apache.archiva.admin.repository.managed.DefaultManagedRepositoryAdmin;
-import org.apache.archiva.configuration.ArchivaConfiguration;
-import org.apache.archiva.configuration.Configuration;
-import org.apache.archiva.configuration.ManagedRepositoryConfiguration;
-import org.apache.archiva.metadata.model.ArtifactMetadata;
-import org.apache.archiva.metadata.repository.MetadataRepository;
-import org.apache.archiva.metadata.repository.RepositorySession;
-import org.apache.archiva.repository.ManagedRepositoryContent;
-import org.apache.archiva.repository.RepositoryContentFactory;
-import org.apache.archiva.repository.content.ManagedDefaultRepositoryContent;
-import org.apache.archiva.rest.services.DefaultRepositoriesService;
-import org.apache.archiva.webtest.memory.TestRepositorySessionFactory;
-import org.apache.commons.lang.StringUtils;
-import org.apache.struts2.StrutsSpringTestCase;
-import org.easymock.MockControl;
-import org.easymock.classextension.MockClassControl;
-
-import java.io.File;
-import java.util.ArrayList;
-
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.when;
-import org.apache.archiva.test.utils.ArchivaBlockJUnit4ClassRunner;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-@RunWith( ArchivaBlockJUnit4ClassRunner.class )
-public class DeleteArtifactActionTest
- extends StrutsSpringTestCase
-{
- private DeleteArtifactAction action;
-
- private ArchivaConfiguration configuration;
-
- private MockControl configurationControl;
-
- private RepositoryContentFactory repositoryFactory;
-
- private MockControl repositoryFactoryControl;
-
- private MetadataRepository metadataRepository;
-
- private MockControl metadataRepositoryControl;
-
- private static final String REPOSITORY_ID = "test-repo";
-
- private static final String GROUP_ID = "org.apache.archiva";
-
- private static final String ARTIFACT_ID = "npe-metadata";
-
- private static final String VERSION = "1.0";
-
- private static final String REPO_LOCATION = "target/test-classes/test-repo";
-
- @Override
- protected String[] getContextLocations()
- {
- return new String[]{ "classpath*:/META-INF/spring-context.xml", "classpath*:/spring-context.xml" };
- }
-
- @Override
- @Before
- public void setUp()
- throws Exception
- {
- super.setUp();
-
- action = (DeleteArtifactAction) getActionProxy( "/deleteArtifact.action" ).getAction();
- action.setPrincipal( "admin" );
- assertNotNull( action );
-
- configurationControl = MockControl.createControl( ArchivaConfiguration.class );
- configuration = (ArchivaConfiguration) configurationControl.getMock();
-
- repositoryFactoryControl = MockClassControl.createControl( RepositoryContentFactory.class );
- repositoryFactory = (RepositoryContentFactory) repositoryFactoryControl.getMock();
-
- metadataRepositoryControl = MockControl.createControl( MetadataRepository.class );
- metadataRepository = (MetadataRepository) metadataRepositoryControl.getMock();
-
- RepositorySession repositorySession = mock( RepositorySession.class );
- when( repositorySession.getRepository() ).thenReturn( metadataRepository );
-
- TestRepositorySessionFactory repositorySessionFactory =
- applicationContext.getBean( "repositorySessionFactory#test", TestRepositorySessionFactory.class );
-
- repositorySessionFactory.setRepositorySession( repositorySession );
-
- ( (DefaultManagedRepositoryAdmin) ( (DefaultRepositoriesService) action.getRepositoriesService() ).getManagedRepositoryAdmin() ).setArchivaConfiguration(
- configuration );
- ( (DefaultRepositoriesService) action.getRepositoriesService() ).setRepositoryFactory( repositoryFactory );
- }
-
- @Override
- @After
- public void tearDown()
- throws Exception
- {
- action = null;
-
- super.tearDown();
- }
-
-
- @Test
- public void testNPEInDeleteArtifact()
- throws Exception
- {
- action.setGroupId( GROUP_ID );
- action.setArtifactId( ARTIFACT_ID );
- action.setVersion( VERSION );
- action.setRepositoryId( REPOSITORY_ID );
-
- Configuration config = createConfiguration();
-
- ManagedRepositoryContent repoContent = new ManagedDefaultRepositoryContent();
- repoContent.setRepository(
- new BeanReplicator().replicateBean( config.findManagedRepositoryById( REPOSITORY_ID ),
- ManagedRepository.class ) );
-
- configurationControl.expectAndReturn( configuration.getConfiguration(), config );
- repositoryFactoryControl.expectAndReturn( repositoryFactory.getManagedRepositoryContent( REPOSITORY_ID ),
- repoContent );
- metadataRepositoryControl.expectAndReturn(
- metadataRepository.getArtifacts( REPOSITORY_ID, GROUP_ID, ARTIFACT_ID, VERSION ),
- new ArrayList<ArtifactMetadata>() );
-
- configurationControl.replay();
- repositoryFactoryControl.replay();
- metadataRepositoryControl.replay();
-
- assertEquals( Action.SUCCESS, action.doDelete() );
-
- String artifactPath =
- REPO_LOCATION + "/" + StringUtils.replace( GROUP_ID, ".", "/" ) + "/" + StringUtils.replace( ARTIFACT_ID,
- ".", "/" )
- + "/" + VERSION + "/" + ARTIFACT_ID + "-" + VERSION;
-
- assertFalse( new File( artifactPath + ".jar" ).exists() );
- assertFalse( new File( artifactPath + ".jar.sha1" ).exists() );
- assertFalse( new File( artifactPath + ".jar.md5" ).exists() );
-
- assertFalse( new File( artifactPath + ".pom" ).exists() );
- assertFalse( new File( artifactPath + ".pom.sha1" ).exists() );
- assertFalse( new File( artifactPath + ".pom.md5" ).exists() );
- }
-
- private Configuration createConfiguration()
- {
- ManagedRepositoryConfiguration managedRepo = new ManagedRepositoryConfiguration();
- managedRepo.setId( REPOSITORY_ID );
- managedRepo.setName( "Test Repository" );
-
- managedRepo.setLocation( REPO_LOCATION );
- managedRepo.setReleases( true );
-
- Configuration config = new Configuration();
- config.addManagedRepository( managedRepo );
-
- return config;
- }
-}
+++ /dev/null
-package org.apache.archiva.web.action;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import com.opensymphony.xwork2.Action;
-import org.apache.archiva.admin.model.managed.ManagedRepositoryAdmin;
-import org.apache.archiva.configuration.ArchivaConfiguration;
-import org.apache.archiva.indexer.search.RepositorySearch;
-import org.apache.archiva.indexer.search.SearchFields;
-import org.apache.archiva.indexer.search.SearchResultHit;
-import org.apache.archiva.indexer.search.SearchResultLimits;
-import org.apache.archiva.indexer.search.SearchResults;
-import org.apache.archiva.indexer.util.SearchUtil;
-import org.apache.archiva.metadata.model.ArtifactMetadata;
-import org.apache.archiva.metadata.repository.MetadataRepository;
-import org.apache.archiva.metadata.repository.RepositorySession;
-import org.apache.archiva.security.UserRepositories;
-import org.apache.archiva.webtest.memory.TestRepositorySessionFactory;
-import org.easymock.MockControl;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.List;
-import org.junit.Test;
-
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.when;
-
-/**
- *
- */
-public class SearchActionTest
- extends AbstractActionTestCase
-{
- private SearchAction action;
-
- private MockControl userReposControl;
-
- private UserRepositories userRepos;
-
- private MockControl searchControl;
-
- private MockControl repoAdminControl;
-
- private ManagedRepositoryAdmin managedRepositoryAdmin;
-
- private RepositorySearch search;
-
- private static final String TEST_CHECKSUM = "afbcdeaadbcffceabbba1";
-
- private static final String TEST_REPO = "test-repo";
-
- private static final String GUEST = "guest";
-
- private RepositorySession session;
-
- @Override
- public void setUp()
- throws Exception
- {
- super.setUp();
-
- action = new SearchAction();
-
- session = mock(RepositorySession.class);
- //TestRepositorySessionFactory factory = (TestRepositorySessionFactory) lookup( RepositorySessionFactory.class );
- TestRepositorySessionFactory factory = new TestRepositorySessionFactory();
- factory.setRepositorySession(session);
- action.setRepositorySessionFactory(factory);
-
- MockControl archivaConfigControl = MockControl.createControl(ArchivaConfiguration.class);
- ArchivaConfiguration archivaConfig = (ArchivaConfiguration) archivaConfigControl.getMock();
-
- userReposControl = MockControl.createControl(UserRepositories.class);
- userRepos = (UserRepositories) userReposControl.getMock();
-
- searchControl = MockControl.createControl(RepositorySearch.class);
- searchControl.setDefaultMatcher(MockControl.ALWAYS_MATCHER);
- search = (RepositorySearch) searchControl.getMock();
-
- repoAdminControl = MockControl.createControl(ManagedRepositoryAdmin.class);
- managedRepositoryAdmin = (ManagedRepositoryAdmin) repoAdminControl.getMock();
-
- //( (DefaultManagedRepositoryAdmin) action.getManagedRepositoryAdmin() ).setArchivaConfiguration( archivaConfig );
-
- action.setManagedRepositoryAdmin(managedRepositoryAdmin);
- action.setUserRepositories(userRepos);
- action.setNexusSearch(search);
- }
-
- // quick search...
-
- @Test
- public void testQuickSearch()
- throws Exception
- {
- action.setQ("archiva");
- action.setCurrentPage(0);
- action.setSearchResultsOnly(false);
- action.setCompleteQueryString("");
-
- List<String> selectedRepos = new ArrayList<String>();
- selectedRepos.add("internal");
- selectedRepos.add("snapshots");
-
- SearchResultLimits limits = new SearchResultLimits(action.getCurrentPage());
- limits.setPageSize(30);
-
- SearchResultHit hit = new SearchResultHit();
- hit.setGroupId("org.apache.archiva");
- hit.setArtifactId("archiva-configuration");
- hit.setUrl("url");
- hit.addVersion("1.0");
- hit.addVersion("1.1");
-
- SearchResults results = new SearchResults();
- results.setLimits(limits);
- results.setTotalHits(1);
- results.addHit(SearchUtil.getHitId("org.apache.archiva", "archiva-configuration", null, "jar"), hit);
- results.setTotalHitsMapSize( results.getHitsMap().values().size() );
-
- userReposControl.expectAndReturn(userRepos.getObservableRepositoryIds("user"), selectedRepos);
-
- searchControl.expectAndReturn(search.search("user", selectedRepos, "archiva", limits, null), results);
-
- userReposControl.replay();
- searchControl.replay();
-
- action.setPrincipal("user");
- String result = action.quickSearch();
-
- assertEquals(Action.SUCCESS, result);
- assertEquals("total pages not 1", 1, action.getTotalPages());
- assertEquals("totol hits not 1", 1, action.getResults().getTotalHits());
-
- userReposControl.verify();
- searchControl.verify();
- }
-
- @Test
- public void testSearchWithinSearchResults()
- throws Exception
- {
- action.setQ("archiva");
- action.setCurrentPage(0);
- action.setSearchResultsOnly(true);
- action.setCompleteQueryString("org;apache");
-
- List<String> parsed = new ArrayList<String>();
- parsed.add("org");
- parsed.add("apache");
-
- List<String> selectedRepos = new ArrayList<String>();
- selectedRepos.add("internal");
- selectedRepos.add("snapshots");
-
- SearchResultLimits limits = new SearchResultLimits(action.getCurrentPage());
- limits.setPageSize(30);
-
- SearchResultHit hit = new SearchResultHit();
- hit.setGroupId("org.apache.archiva");
- hit.setArtifactId("archiva-configuration");
- hit.setUrl("url");
- hit.addVersion("1.0");
- hit.addVersion("1.1");
-
- SearchResults results = new SearchResults();
- results.setLimits(limits);
- results.setTotalHits(1);
- results.addHit(SearchUtil.getHitId("org.apache.archiva", "archiva-configuration", null, "jar"), hit);
- results.setTotalHitsMapSize( results.getHitsMap().values().size() );
- userReposControl.expectAndReturn(userRepos.getObservableRepositoryIds("user"), selectedRepos);
-
- searchControl.expectAndReturn(search.search("user", selectedRepos, "archiva", limits, parsed), results);
-
- userReposControl.replay();
- searchControl.replay();
-
- action.setPrincipal("user");
- String result = action.quickSearch();
-
- assertEquals(Action.SUCCESS, result);
- assertEquals("org;apache;archiva", action.getCompleteQueryString());
- assertEquals(1, action.getTotalPages());
- assertEquals(1, action.getResults().getTotalHits());
-
- userReposControl.verify();
- searchControl.verify();
- }
-
- @Test
- public void testQuickSearchUserHasNoAccessToAnyRepository()
- throws Exception
- {
- action.setQ("archiva");
- action.setCurrentPage(0);
-
- List<String> selectedRepos = new ArrayList<String>();
-
- userReposControl.expectAndReturn(userRepos.getObservableRepositoryIds("user"), selectedRepos);
-
- userReposControl.replay();
-
- action.setPrincipal("user");
- String result = action.quickSearch();
-
- assertEquals(GlobalResults.ACCESS_TO_NO_REPOS, result);
-
- userReposControl.verify();
- }
-
- @Test
- public void testQuickSearchNoSearchHits()
- throws Exception
- {
- action.setQ("archiva");
- action.setCurrentPage(0);
- action.setSearchResultsOnly(false);
- action.setCompleteQueryString("");
-
- List<String> selectedRepos = new ArrayList<String>();
- selectedRepos.add("internal");
- selectedRepos.add("snapshots");
-
- SearchResultLimits limits = new SearchResultLimits(action.getCurrentPage());
- limits.setPageSize(30);
-
- SearchResults results = new SearchResults();
-
- userReposControl.expectAndReturn(userRepos.getObservableRepositoryIds("user"), selectedRepos);
-
- searchControl.expectAndReturn(search.search("user", selectedRepos, "archiva", limits, null), results);
-
- userReposControl.replay();
- searchControl.replay();
-
- action.setPrincipal("user");
- String result = action.quickSearch();
-
- assertEquals(Action.INPUT, result);
-
- userReposControl.verify();
- searchControl.verify();
- }
-
- // advanced/filtered search...
-
- @Test
- public void testAdvancedSearchOneRepository()
- throws Exception
- {
- List<String> managedRepos = new ArrayList<String>();
- managedRepos.add("internal");
- managedRepos.add("snapshots");
-
- action.setRepositoryId("internal");
- action.setManagedRepositoryList(managedRepos);
- action.setCurrentPage(0);
- action.setRowCount(30);
- action.setGroupId("org");
-
- SearchResultLimits limits = new SearchResultLimits(action.getCurrentPage());
- limits.setPageSize(30);
-
- SearchResultHit hit = new SearchResultHit();
- hit.setGroupId("org.apache.archiva");
- hit.setArtifactId("archiva-configuration");
- hit.setUrl("url");
- hit.addVersion("1.0");
- hit.addVersion("1.1");
-
- SearchResults results = new SearchResults();
- results.setLimits(limits);
- results.setTotalHits(1);
- results.addHit(SearchUtil.getHitId("org.apache.archiva", "archiva-configuration", null, "jar"), hit);
-
- List<String> selectedRepos = new ArrayList<String>();
- selectedRepos.add("internal");
- selectedRepos.add("snapshots");
-
- SearchFields searchFields = new SearchFields("org", null, null, null, null, selectedRepos);
-
- searchControl.expectAndReturn(search.search("user", searchFields, limits), results);
-
- searchControl.replay();
-
- String result = action.filteredSearch();
-
- assertEquals(Action.SUCCESS, result);
- assertEquals(1, action.getTotalPages());
- assertEquals(1, action.getResults().getTotalHits());
-
- searchControl.verify();
- }
-
- @Test
- public void testAdvancedSearchAllRepositories()
- throws Exception
- {
- List<String> managedRepos = new ArrayList<String>();
- managedRepos.add("internal");
- managedRepos.add("snapshots");
-
- action.setRepositoryId("all");
- action.setManagedRepositoryList(managedRepos);
- action.setCurrentPage(0);
- action.setRowCount(30);
- action.setGroupId("org");
-
- SearchResultLimits limits = new SearchResultLimits(action.getCurrentPage());
- limits.setPageSize(30);
-
- SearchResultHit hit = new SearchResultHit();
- hit.setGroupId("org.apache.archiva");
- hit.setArtifactId("archiva-configuration");
- hit.setUrl("url");
- hit.addVersion("1.0");
- hit.addVersion("1.1");
-
- SearchResults results = new SearchResults();
- results.setLimits(limits);
- results.setTotalHits(1);
- results.addHit(SearchUtil.getHitId("org.apache.archiva", "archiva-configuration", null, "jar"), hit);
-
- List<String> selectedRepos = new ArrayList<String>();
- selectedRepos.add("internal");
-
- SearchFields searchFields = new SearchFields("org", null, null, null, null, selectedRepos);
-
- userReposControl.expectAndReturn(userRepos.getObservableRepositoryIds("user"), selectedRepos);
-
- searchControl.expectAndReturn(search.search("user", searchFields, limits), results);
-
- searchControl.replay();
- userReposControl.replay();
-
- action.setPrincipal("user");
- String result = action.filteredSearch();
-
- assertEquals(Action.SUCCESS, result);
- assertEquals(1, action.getTotalPages());
- assertEquals(1, action.getResults().getTotalHits());
-
- searchControl.verify();
- userReposControl.verify();
- }
-
- @Test
- public void testAdvancedSearchNoSearchHits()
- throws Exception
- {
- List<String> managedRepos = new ArrayList<String>();
- managedRepos.add("internal");
- managedRepos.add("snapshots");
-
- action.setRepositoryId("internal");
- action.setManagedRepositoryList(managedRepos);
- action.setCurrentPage(0);
- action.setRowCount(30);
- action.setGroupId("org");
-
- SearchResultLimits limits = new SearchResultLimits(action.getCurrentPage());
- limits.setPageSize(30);
-
- SearchResults results = new SearchResults();
-
- List<String> selectedRepos = new ArrayList<String>();
- selectedRepos.add("internal");
- selectedRepos.add("snapshots");
-
- SearchFields searchFields = new SearchFields("org", null, null, null, null, selectedRepos);
-
- searchControl.expectAndReturn(search.search("user", searchFields, limits), results);
-
- searchControl.replay();
-
- String result = action.filteredSearch();
-
- assertEquals(Action.INPUT, result);
- assertFalse(action.getActionErrors().isEmpty());
- assertEquals("No results found", (String) action.getActionErrors().iterator().next());
-
- searchControl.verify();
- }
-
- @Test
- public void testAdvancedSearchUserHasNoAccessToAnyRepository()
- throws Exception
- {
- List<String> managedRepos = new ArrayList<String>();
-
- action.setGroupId("org.apache.archiva");
- action.setManagedRepositoryList(managedRepos);
-
- String result = action.filteredSearch();
-
- assertEquals(GlobalResults.ACCESS_TO_NO_REPOS, result);
- }
-
- @Test
- public void testAdvancedSearchNoSpecifiedCriteria()
- throws Exception
- {
- List<String> managedRepos = new ArrayList<String>();
-
- action.setManagedRepositoryList(managedRepos);
-
- String result = action.filteredSearch();
-
- assertEquals(Action.INPUT, result);
- assertFalse(action.getActionErrors().isEmpty());
- assertEquals("Advanced Search - At least one search criteria must be provided.",
- (String) action.getActionErrors().iterator().next());
- }
-
- // find artifact..
- @Test
- public void testFindArtifactWithOneHit()
- throws Exception
- {
- action.setQ(TEST_CHECKSUM);
-
- MockControl control = MockControl.createControl(MetadataRepository.class);
- MetadataRepository metadataRepository = (MetadataRepository) control.getMock();
- when(session.getRepository()).thenReturn(metadataRepository);
-
- ArtifactMetadata artifact = createArtifact("archiva-configuration", "1.0");
- control.expectAndReturn(metadataRepository.getArtifactsByChecksum(TEST_REPO, TEST_CHECKSUM),
- Collections.singletonList(artifact));
-
- userReposControl.expectAndReturn(userRepos.getObservableRepositoryIds(GUEST),
- Collections.singletonList(TEST_REPO));
-
- control.replay();
- userReposControl.replay();
-
- String result = action.findArtifact();
- assertEquals("artifact", result);
- assertEquals(1, action.getDatabaseResults().size());
- assertEquals(artifact, action.getDatabaseResults().get(0));
-
- control.verify();
- userReposControl.verify();
- }
-
- @Test
- public void testFindArtifactWithMultipleHits()
- throws Exception
- {
- action.setQ(TEST_CHECKSUM);
-
- MockControl control = MockControl.createControl(MetadataRepository.class);
- MetadataRepository metadataRepository = (MetadataRepository) control.getMock();
- when(session.getRepository()).thenReturn(metadataRepository);
-
- List<ArtifactMetadata> artifacts =
- Arrays.asList(createArtifact("archiva-configuration", "1.0"), createArtifact("archiva-indexer", "1.0"));
- control.expectAndReturn(metadataRepository.getArtifactsByChecksum(TEST_REPO, TEST_CHECKSUM), artifacts);
-
- userReposControl.expectAndReturn(userRepos.getObservableRepositoryIds(GUEST),
- Collections.singletonList(TEST_REPO));
-
- control.replay();
- userReposControl.replay();
-
- String result = action.findArtifact();
- assertEquals("results", result);
- assertFalse(action.getDatabaseResults().isEmpty());
- assertEquals(2, action.getDatabaseResults().size());
-
- control.verify();
- userReposControl.verify();
- }
-
- @Test
- public void testFindArtifactNoChecksumSpecified()
- throws Exception
- {
- String result = action.findArtifact();
-
- assertEquals(Action.INPUT, result);
- assertFalse(action.getActionErrors().isEmpty());
- assertEquals("Unable to search for a blank checksum", (String) action.getActionErrors().iterator().next());
- }
-
- @Test
- public void testFindArtifactNoResults()
- throws Exception
- {
- action.setQ(TEST_CHECKSUM);
-
- MockControl control = MockControl.createControl(MetadataRepository.class);
- MetadataRepository metadataRepository = (MetadataRepository) control.getMock();
- when(session.getRepository()).thenReturn(metadataRepository);
-
- control.expectAndReturn(metadataRepository.getArtifactsByChecksum(TEST_REPO, TEST_CHECKSUM),
- Collections.<ArtifactMetadata>emptyList());
-
- userReposControl.expectAndReturn(userRepos.getObservableRepositoryIds(GUEST),
- Collections.singletonList(TEST_REPO));
-
- control.replay();
- userReposControl.replay();
-
- String result = action.findArtifact();
- assertEquals(Action.INPUT, result);
- assertFalse(action.getActionErrors().isEmpty());
- assertEquals("No results found", (String) action.getActionErrors().iterator().next());
-
- control.verify();
- userReposControl.verify();
- }
-
- private ArtifactMetadata createArtifact(String project, String version)
- {
- ArtifactMetadata metadata = new ArtifactMetadata();
- metadata.setNamespace("org.apache.archiva");
- metadata.setProject(project);
- metadata.setProjectVersion(version);
- metadata.setVersion(version);
- metadata.setRepositoryId(TEST_REPO);
- metadata.setId(project + "-" + version + ".jar");
- return metadata;
- }
-}
+++ /dev/null
-package org.apache.archiva.web.action;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import com.opensymphony.xwork2.Action;
-import net.sf.beanlib.provider.replicator.BeanReplicator;
-import org.apache.archiva.admin.model.beans.ManagedRepository;
-import org.apache.archiva.metadata.model.ArtifactMetadata;
-import org.apache.archiva.metadata.model.Dependency;
-import org.apache.archiva.metadata.model.MailingList;
-import org.apache.archiva.metadata.model.ProjectVersionMetadata;
-import org.apache.archiva.metadata.model.ProjectVersionReference;
-import org.apache.archiva.metadata.repository.MetadataRepository;
-import org.apache.archiva.metadata.repository.RepositorySession;
-import org.apache.archiva.maven2.model.Artifact;
-import org.apache.archiva.webtest.memory.TestMetadataResolver;
-import org.apache.archiva.webtest.memory.TestRepositorySessionFactory;
-import org.apache.archiva.metadata.repository.storage.maven2.MavenArtifactFacet;
-import org.apache.archiva.reports.RepositoryProblemFacet;
-import org.apache.archiva.common.utils.VersionUtil;
-import org.apache.archiva.configuration.ArchivaConfiguration;
-import org.apache.archiva.configuration.Configuration;
-import org.apache.archiva.configuration.ManagedRepositoryConfiguration;
-import org.apache.archiva.repository.ManagedRepositoryContent;
-import org.apache.archiva.repository.RepositoryContentFactory;
-import org.apache.archiva.repository.content.ManagedDefaultRepositoryContent;
-
-import java.io.File;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
-
-import org.junit.Before;
-import org.junit.Test;
-
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.when;
-
-public class ShowArtifactActionTest
- extends AbstractActionTestCase
-{
- private static final String ACTION_HINT = "showArtifactAction";
-
- private static final String TEST_VERSION = "version";
-
- private static final String TEST_SNAPSHOT_VERSION = "1.0-SNAPSHOT";
-
- private static final String TEST_TS_SNAPSHOT_VERSION = "1.0-20091120.111111-1";
-
- private static final String TEST_NAMESPACE = "namespace";
-
- private static final String OTHER_TEST_REPO = "first-repo";
-
- private ShowArtifactAction action;
-
- private static final List<ArtifactMetadata> TEST_SNAPSHOT_ARTIFACTS =
- Arrays.asList( createArtifact( TEST_TS_SNAPSHOT_VERSION ),
- createArtifact( "1.0-20091120.222222-2", "20091120.222222", 2 ),
- createArtifact( "1.0-20091123.333333-3", "20091123.333333", 3 ) );
-
- private static final long TEST_SIZE = 12345L;
-
- private static final String TEST_TYPE = "jar";
-
- @Override
- @Before
- public void setUp()
- throws Exception
- {
- super.setUp();
- action = (ShowArtifactAction) getActionProxy( "/showArtifact.action" ).getAction();
-
- metadataResolver = new TestMetadataResolver();
- MetadataRepository repo = mock( MetadataRepository.class );
- RepositorySession repositorySession = mock( RepositorySession.class );
- when( repositorySession.getResolver() ).thenReturn( metadataResolver );
- when( repositorySession.getRepository() ).thenReturn( repo );
- TestRepositorySessionFactory repositorySessionFactory =
- applicationContext.getBean( "repositorySessionFactory#test", TestRepositorySessionFactory.class );
- repositorySessionFactory.setRepositorySession( repositorySession );
-
- RepositoryContentFactory factory = mock( RepositoryContentFactory.class );
-
- action.setRepositoryFactory( factory );
-
- ManagedRepository config = new ManagedRepository();
- config.setId( TEST_REPO );
- config.setLocation( new File( "target/test-repo" ).getAbsolutePath() );
-
- ManagedRepositoryContent content = new ManagedDefaultRepositoryContent();
- content.setRepository( config );
- when( factory.getManagedRepositoryContent( TEST_REPO ) ).thenReturn( content );
-
- ArchivaConfiguration archivaConfig = mock( ArchivaConfiguration.class );
-
- Configuration configuration = new Configuration();
- configuration.addManagedRepository(
- new BeanReplicator().replicateBean( config, ManagedRepositoryConfiguration.class ) );
- when( archivaConfig.getConfiguration() ).thenReturn( configuration );
-
- when( factory.getArchivaConfiguration() ).thenReturn( archivaConfig );
-
- }
-
- @Test
- public void testInstantiation()
- {
- assertFalse( action == getActionProxy( "/showArtifact.action" ).getAction() );
- }
-
- @Test
- public void testGetArtifactUniqueRelease()
- {
- metadataResolver.setProjectVersion( TEST_REPO, TEST_GROUP_ID, TEST_ARTIFACT_ID,
- createProjectModel( TEST_VERSION ) );
-
- setActionParameters();
-
- String result = action.artifact();
-
- assertActionSuccess( action, result );
-
- assertActionParameters( action );
- ProjectVersionMetadata model = action.getModel();
- assertDefaultModel( model );
-
- assertEquals( TEST_REPO, action.getRepositoryId() );
-
- assertNull( action.getDependees() );
- assertNull( action.getDependencies() );
- assertNull( action.getMailingLists() );
- assertTrue( action.getArtifacts().isEmpty() );
- }
-
- @Test
- public void testGetArtifactUniqueSnapshot()
- {
- metadataResolver.setProjectVersion( TEST_REPO, TEST_GROUP_ID, TEST_ARTIFACT_ID,
- createProjectModel( TEST_SNAPSHOT_VERSION ) );
- metadataResolver.setArtifacts( TEST_REPO, TEST_GROUP_ID, TEST_ARTIFACT_ID, TEST_SNAPSHOT_VERSION,
- TEST_SNAPSHOT_ARTIFACTS );
-
- action.setGroupId( TEST_GROUP_ID );
- action.setArtifactId( TEST_ARTIFACT_ID );
- action.setVersion( TEST_SNAPSHOT_VERSION );
-
- String result = action.artifact();
-
- assertActionSuccess( action, result );
-
- assertEquals( TEST_GROUP_ID, action.getGroupId() );
- assertEquals( TEST_ARTIFACT_ID, action.getArtifactId() );
- assertEquals( TEST_SNAPSHOT_VERSION, action.getVersion() );
- ProjectVersionMetadata model = action.getModel();
- assertDefaultModel( model, TEST_SNAPSHOT_VERSION );
-
- assertEquals( TEST_REPO, action.getRepositoryId() );
-
- assertArtifacts( TEST_SNAPSHOT_ARTIFACTS, action.getArtifacts() );
-
- assertNull( action.getDependees() );
- assertNull( action.getDependencies() );
- assertNull( action.getMailingLists() );
- }
-
- @Test
- public void testGetArtifactUniqueSnapshotTimestamped()
- {
- metadataResolver.setProjectVersion( TEST_REPO, TEST_GROUP_ID, TEST_ARTIFACT_ID,
- createProjectModel( TEST_SNAPSHOT_VERSION ) );
- metadataResolver.setArtifacts( TEST_REPO, TEST_GROUP_ID, TEST_ARTIFACT_ID, TEST_SNAPSHOT_VERSION,
- TEST_SNAPSHOT_ARTIFACTS );
-
- action.setGroupId( TEST_GROUP_ID );
- action.setArtifactId( TEST_ARTIFACT_ID );
- action.setVersion( TEST_TS_SNAPSHOT_VERSION );
-
- String result = action.artifact();
- assertError( result );
- assertNoOutputFields();
- }
-
- @Test
- public void testGetMissingProject()
- {
- setActionParameters();
-
- String result = action.artifact();
- assertError( result );
-
- assertActionParameters( action );
- assertNoOutputFields();
- }
-
- @Test
- public void testGetArtifactNoObservableRepos()
- {
- setObservableRepos( Collections.<String>emptyList() );
-
- setActionParameters();
-
- String result = action.artifact();
-
- // Actually, it'd be better to have an error:
- assertError( result );
- assertActionParameters( action );
- assertNoOutputFields();
- }
-
- @Test
- public void testGetArtifactNotInObservableRepos()
- {
- metadataResolver.setProjectVersion( OTHER_TEST_REPO, TEST_GROUP_ID, TEST_ARTIFACT_ID,
- createProjectModel( TEST_VERSION ) );
-
- setActionParameters();
-
- String result = action.artifact();
- assertError( result );
-
- assertActionParameters( action );
- assertNoOutputFields();
- }
-
- @Test
- public void testGetArtifactOnlySeenInSecondObservableRepo()
- {
- setObservableRepos( Arrays.asList( OTHER_TEST_REPO, TEST_REPO ) );
- metadataResolver.setProjectVersion( TEST_REPO, TEST_GROUP_ID, TEST_ARTIFACT_ID,
- createProjectModel( TEST_VERSION ) );
-
- setActionParameters();
-
- String result = action.artifact();
-
- assertActionSuccess( action, result );
-
- assertActionParameters( action );
- ProjectVersionMetadata model = action.getModel();
- assertDefaultModel( model );
-
- assertEquals( TEST_REPO, action.getRepositoryId() );
-
- assertNull( action.getDependees() );
- assertNull( action.getDependencies() );
- assertNull( action.getMailingLists() );
- assertTrue( action.getArtifacts().isEmpty() );
- }
-
- @Test
- public void testGetArtifactSeenInBothObservableRepo()
- {
- setObservableRepos( Arrays.asList( TEST_REPO, OTHER_TEST_REPO ) );
- metadataResolver.setProjectVersion( TEST_REPO, TEST_GROUP_ID, TEST_ARTIFACT_ID,
- createProjectModel( TEST_VERSION ) );
- metadataResolver.setProjectVersion( OTHER_TEST_REPO, TEST_GROUP_ID, TEST_ARTIFACT_ID,
- createProjectModel( TEST_VERSION ) );
-
- setActionParameters();
-
- String result = action.artifact();
-
- assertActionSuccess( action, result );
-
- assertActionParameters( action );
- ProjectVersionMetadata model = action.getModel();
- assertDefaultModel( model );
-
- assertEquals( TEST_REPO, action.getRepositoryId() );
-
- assertNull( action.getDependees() );
- assertNull( action.getDependencies() );
- assertNull( action.getMailingLists() );
- assertTrue( action.getArtifacts().isEmpty() );
- }
-
- @Test
- public void testGetArtifactCanOnlyObserveInOneOfTwoRepos()
- {
- setObservableRepos( Arrays.asList( TEST_REPO ) );
- metadataResolver.setProjectVersion( OTHER_TEST_REPO, TEST_GROUP_ID, TEST_ARTIFACT_ID,
- createProjectModel( TEST_VERSION ) );
- metadataResolver.setProjectVersion( TEST_REPO, TEST_GROUP_ID, TEST_ARTIFACT_ID,
- createProjectModel( TEST_VERSION ) );
-
- setActionParameters();
-
- String result = action.artifact();
-
- assertActionSuccess( action, result );
-
- assertActionParameters( action );
- ProjectVersionMetadata model = action.getModel();
- assertDefaultModel( model );
-
- assertEquals( TEST_REPO, action.getRepositoryId() );
-
- assertNull( action.getDependees() );
- assertNull( action.getDependencies() );
- assertNull( action.getMailingLists() );
- assertTrue( action.getArtifacts().isEmpty() );
- }
-
- @Test
- public void testGetArtifactNoMavenFacet()
- {
- ProjectVersionMetadata versionMetadata = new ProjectVersionMetadata();
- versionMetadata.setId( TEST_VERSION );
- versionMetadata.setUrl( TEST_URL );
- versionMetadata.setName( TEST_NAME );
- versionMetadata.setDescription( TEST_DESCRIPTION );
-
- metadataResolver.setProjectVersion( TEST_REPO, TEST_GROUP_ID, TEST_ARTIFACT_ID, versionMetadata );
-
- setActionParameters();
-
- String result = action.artifact();
-
- assertActionSuccess( action, result );
-
- assertActionParameters( action );
- ProjectVersionMetadata model = action.getModel();
- assertEquals( TEST_VERSION, model.getVersion() );
- assertEquals( TEST_URL, model.getUrl() );
- assertEquals( TEST_NAME, model.getName() );
- assertEquals( TEST_DESCRIPTION, model.getDescription() );
-
- assertEquals( TEST_REPO, action.getRepositoryId() );
-
- assertNull( action.getDependees() );
- assertNull( action.getDependencies() );
- assertNull( action.getMailingLists() );
- assertTrue( action.getArtifacts().isEmpty() );
- }
-
- @Test
- public void testMetadataHasRepositoryFacetProblem()
- {
- String errMsg = "Error in resolving artifact's parent POM file: Sample Parent POM not found";
- ProjectVersionMetadata metaData = createProjectModel( TEST_SNAPSHOT_VERSION );
- metaData.addFacet(
- createRepositoryProblemFacet( TEST_REPO, errMsg, TEST_GROUP_ID, TEST_SNAPSHOT_VERSION, TEST_NAMESPACE ) );
-
- metadataResolver.setProjectVersion( TEST_REPO, TEST_GROUP_ID, TEST_ARTIFACT_ID, metaData );
-
- metadataResolver.setArtifacts( TEST_REPO, TEST_GROUP_ID, TEST_ARTIFACT_ID, TEST_SNAPSHOT_VERSION,
- TEST_SNAPSHOT_ARTIFACTS );
-
- action.setGroupId( TEST_GROUP_ID );
- action.setArtifactId( TEST_ARTIFACT_ID );
- action.setVersion( TEST_SNAPSHOT_VERSION );
-
- String result = action.artifact();
-
- assertEquals( Action.SUCCESS, result );
-
- assertTrue( action.hasActionErrors() );
- assertFalse( action.hasActionMessages() );
- assertEquals( "Artifact metadata is incomplete: " + errMsg, action.getActionErrors().toArray()[0].toString() );
- }
-
- @Test
- public void testMetadataIncomplete()
- {
- ProjectVersionMetadata metaData = createProjectModel( TEST_SNAPSHOT_VERSION );
- metaData.setIncomplete( true );
-
- metadataResolver.setProjectVersion( TEST_REPO, TEST_GROUP_ID, TEST_ARTIFACT_ID, metaData );
-
- metadataResolver.setArtifacts( TEST_REPO, TEST_GROUP_ID, TEST_ARTIFACT_ID, TEST_SNAPSHOT_VERSION,
- TEST_SNAPSHOT_ARTIFACTS );
-
- action.setGroupId( TEST_GROUP_ID );
- action.setArtifactId( TEST_ARTIFACT_ID );
- action.setVersion( TEST_SNAPSHOT_VERSION );
-
- String result = action.artifact();
-
- assertEquals( Action.SUCCESS, result );
-
- assertTrue( action.hasActionErrors() );
- assertFalse( action.hasActionMessages() );
-
- assertEquals( "Artifact metadata is incomplete.", action.getActionErrors().toArray()[0].toString() );
- }
-
- @Test
- public void testGetMailingLists()
- {
- ProjectVersionMetadata versionMetadata = createProjectModel( TEST_VERSION );
- MailingList ml1 = createMailingList( "Users List", "users" );
- MailingList ml2 = createMailingList( "Developers List", "dev" );
- versionMetadata.setMailingLists( Arrays.asList( ml1, ml2 ) );
- metadataResolver.setProjectVersion( TEST_REPO, TEST_GROUP_ID, TEST_ARTIFACT_ID, versionMetadata );
-
- setActionParameters();
-
- String result = action.mailingLists();
-
- assertActionSuccess( action, result );
-
- assertActionParameters( action );
- ProjectVersionMetadata model = action.getModel();
- assertDefaultModel( model );
-
- assertNotNull( action.getMailingLists() );
- assertMailingList( action.getMailingLists().get( 0 ), "Users List", "users" );
- assertMailingList( action.getMailingLists().get( 1 ), "Developers List", "dev" );
-
- assertEquals( TEST_REPO, action.getRepositoryId() );
- assertNull( action.getDependees() );
- assertNull( action.getDependencies() );
- assertTrue( action.getArtifacts().isEmpty() );
- }
-
- @Test
- public void testGetDependencies()
- {
- ProjectVersionMetadata versionMetadata = createProjectModel( TEST_VERSION );
- Dependency dependency1 = createDependencyBasic( "artifactId1" );
- Dependency dependency2 = createDependencyExtended( "artifactId2" );
- versionMetadata.setDependencies( Arrays.asList( dependency1, dependency2 ) );
- metadataResolver.setProjectVersion( TEST_REPO, TEST_GROUP_ID, TEST_ARTIFACT_ID, versionMetadata );
-
- setActionParameters();
-
- String result = action.dependencies();
-
- assertActionSuccess( action, result );
-
- assertActionParameters( action );
- ProjectVersionMetadata model = action.getModel();
- assertDefaultModel( model );
-
- assertNotNull( action.getDependencies() );
- assertDependencyBasic( action.getDependencies().get( 0 ), "artifactId1" );
- assertDependencyExtended( action.getDependencies().get( 1 ), "artifactId2" );
-
- assertEquals( TEST_REPO, action.getRepositoryId() );
- assertNull( action.getDependees() );
- assertNull( action.getMailingLists() );
- assertTrue( action.getArtifacts().isEmpty() );
- }
-
- @Test
- public void testGetDependees()
- throws Exception
- {
- setObservableRepos( Arrays.asList( TEST_REPO ) );
- ProjectVersionMetadata versionMetadata = createProjectModel( TEST_VERSION );
- metadataResolver.setProjectVersion( TEST_REPO, TEST_GROUP_ID, TEST_ARTIFACT_ID, versionMetadata );
- ProjectVersionReference dependee1 = createReference( "artifactId1" );
- ProjectVersionReference dependee2 = createReference( "artifactId2" );
- metadataResolver.setProjectReferences( TEST_REPO, TEST_GROUP_ID, TEST_ARTIFACT_ID, TEST_VERSION,
- Arrays.asList( dependee1, dependee2 ) );
-
- setActionParameters();
-
- String result = action.dependees();
-
- assertActionSuccess( action, result );
-
- assertActionParameters( action );
- ProjectVersionMetadata model = action.getModel();
- assertDefaultModel( model );
-
- assertNotNull( action.getDependees() );
- assertCoordinate( action.getDependees().get( 0 ), "artifactId1" );
- assertCoordinate( action.getDependees().get( 1 ), "artifactId2" );
-
- assertEquals( TEST_REPO, action.getRepositoryId() );
- assertNull( action.getDependencies() );
- assertNull( action.getMailingLists() );
- assertTrue( action.getArtifacts().isEmpty() );
- }
-
- @Test
- public void testGetProjectMetadata()
- {
- ProjectVersionMetadata versionMetadata = createProjectModel( TEST_VERSION );
-
- metadataResolver.setProjectVersion( TEST_REPO, TEST_GROUP_ID, TEST_ARTIFACT_ID, versionMetadata );
-
- setActionParameters();
-
- String result = action.projectMetadata();
-
- assertActionSuccess( action, result );
-
- assertActionParameters( action );
-
- Map<String, String> genericMetadata = action.getGenericMetadata();
- assertNotNull( genericMetadata.get( TEST_GENERIC_METADATA_PROPERTY_NAME ) );
- assertEquals( genericMetadata.get( TEST_GENERIC_METADATA_PROPERTY_NAME ),
- TEST_GENERIC_METADATA_PROPERTY_VALUE );
-
- assertEquals( TEST_REPO, action.getRepositoryId() );
- assertNotNull( action.getModel() );
- assertNull( action.getDependees() );
- assertNull( action.getDependencies() );
- assertNull( action.getMailingLists() );
- assertTrue( action.getArtifacts().isEmpty() );
- }
-
- @Test
- public void testAddAndDeleteMetadataProperty()
- {
- ProjectVersionMetadata versionMetadata = createProjectModel( TEST_VERSION );
-
- metadataResolver.setProjectVersion( TEST_REPO, TEST_GROUP_ID, TEST_ARTIFACT_ID, versionMetadata );
-
- setActionParameters();
- action.setPropertyName( "foo" );
- action.setPropertyValue( "bar" );
- action.setRepositoryId( TEST_REPO );
-
- String result = action.addMetadataProperty();
-
- assertActionSuccess( action, result );
- assertActionParameters( action );
-
- Map<String, String> genericMetadata = action.getGenericMetadata();
- assertNotNull( genericMetadata.get( TEST_GENERIC_METADATA_PROPERTY_NAME ) );
- assertEquals( genericMetadata.get( TEST_GENERIC_METADATA_PROPERTY_NAME ),
- TEST_GENERIC_METADATA_PROPERTY_VALUE );
-
- assertNotNull( genericMetadata.get( "foo" ) );
- assertEquals( "bar", genericMetadata.get( "foo" ) );
-
- assertEquals( TEST_REPO, action.getRepositoryId() );
- assertNotNull( action.getModel() );
- assertNull( action.getDependees() );
- assertNull( action.getDependencies() );
- assertNull( action.getMailingLists() );
- assertTrue( action.getArtifacts().isEmpty() );
-
- // test delete property
- setActionParameters();
- action.setDeleteItem( "foo" );
-
- result = action.deleteMetadataEntry();
-
- assertEquals( Action.SUCCESS, result );
- assertActionParameters( action );
- assertTrue( !action.getActionMessages().isEmpty() );
- assertTrue( action.getActionMessages().contains( "Property successfully deleted." ) );
-
- genericMetadata = action.getGenericMetadata();
- assertNotNull( genericMetadata.get( TEST_GENERIC_METADATA_PROPERTY_NAME ) );
- assertEquals( genericMetadata.get( TEST_GENERIC_METADATA_PROPERTY_NAME ),
- TEST_GENERIC_METADATA_PROPERTY_VALUE );
-
- assertNull( genericMetadata.get( "foo" ) );
-
- assertEquals( TEST_REPO, action.getRepositoryId() );
- assertNotNull( action.getModel() );
- assertNull( action.getDependees() );
- assertNull( action.getDependencies() );
- assertNull( action.getMailingLists() );
- assertTrue( action.getArtifacts().isEmpty() );
- }
-
- private void assertArtifacts( List<ArtifactMetadata> expectedArtifacts,
- Map<String, List<Artifact>> artifactMap )
- {
- // assuming only one of each version at this point
- assertEquals( expectedArtifacts.size(), artifactMap.size() );
- for ( ArtifactMetadata artifact : expectedArtifacts )
- {
- assertTrue( artifactMap.containsKey( artifact.getVersion() ) );
- List<Artifact> list = artifactMap.get( artifact.getVersion() );
- Artifact actual = list.get( 0 );
- assertEquals( artifact.getNamespace(), actual.getGroupId() );
- assertEquals( artifact.getId(),actual.getId() );
- // olamy test has no more sense as we reuse an other object now
- //assertEquals( artifact.getProject(), actual.getGroupId() );
- assertEquals( artifact.getRepositoryId(), actual.getRepositoryId() );
- assertEquals( artifact.getVersion(), actual.getVersion() );
- assertEquals( TEST_TYPE, actual.getPackaging() );
- assertEquals( "12.06 K", actual.getSize() );
- // FIXME url path test
- //assertEquals( artifact.getNamespace() + "/" + artifact.getProject() + "/" + TEST_SNAPSHOT_VERSION + "/"
- // + artifact.getId(), actual.getPath() );
- }
- }
-
- private static ArtifactMetadata createArtifact( String version )
- {
- return createArtifact( version, null, 0 );
- }
-
- private static ArtifactMetadata createArtifact( String version, String timestamp, int buildNumber )
- {
- ArtifactMetadata metadata = new ArtifactMetadata();
- metadata.setProject( TEST_ARTIFACT_ID );
- metadata.setId( TEST_ARTIFACT_ID + "-" + version + ".jar" );
- metadata.setNamespace( TEST_GROUP_ID );
- metadata.setRepositoryId( TEST_REPO );
- metadata.setSize( TEST_SIZE );
- metadata.setProjectVersion( VersionUtil.getBaseVersion( version ) );
- metadata.setVersion( version );
-
- MavenArtifactFacet facet = new MavenArtifactFacet();
- facet.setType( "jar" );
- facet.setTimestamp( timestamp );
- facet.setBuildNumber( buildNumber );
- metadata.addFacet( facet );
-
- return metadata;
- }
-
- private ProjectVersionReference createReference( String projectId )
- {
- ProjectVersionReference reference = new ProjectVersionReference();
- reference.setNamespace( "groupId" );
- reference.setProjectId( projectId );
- reference.setProjectVersion( "version" );
- reference.setReferenceType( ProjectVersionReference.ReferenceType.DEPENDENCY );
- return reference;
- }
-
- private void assertCoordinate( ProjectVersionReference dependee, String artifactId )
- {
- assertEquals( artifactId, dependee.getProjectId() );
- assertEquals( "groupId", dependee.getNamespace() );
- assertEquals( "version", dependee.getProjectVersion() );
- }
-
- private void assertDependencyBasic( Dependency dependency, String artifactId )
- {
- assertEquals( artifactId, dependency.getArtifactId() );
- assertEquals( "groupId", dependency.getGroupId() );
- assertEquals( "version", dependency.getVersion() );
- }
-
- private void assertDependencyExtended( Dependency dependency, String artifactId )
- {
- assertDependencyBasic( dependency, artifactId );
- assertEquals( true, dependency.isOptional() );
- assertEquals( "classifier", dependency.getClassifier() );
- assertEquals( "type", dependency.getType() );
- assertEquals( "scope", dependency.getScope() );
- assertEquals( "systemPath", dependency.getSystemPath() );
- }
-
- private Dependency createDependencyExtended( String artifactId )
- {
- Dependency dependency = createDependencyBasic( artifactId );
- dependency.setClassifier( "classifier" );
- dependency.setOptional( true );
- dependency.setScope( "scope" );
- dependency.setSystemPath( "systemPath" );
- dependency.setType( "type" );
- return dependency;
- }
-
- private Dependency createDependencyBasic( String artifactId )
- {
- Dependency dependency = new Dependency();
- dependency.setArtifactId( artifactId );
- dependency.setGroupId( "groupId" );
- dependency.setVersion( "version" );
- return dependency;
- }
-
- private void assertMailingList( MailingList mailingList, String name, String prefix )
- {
- assertEquals( name, mailingList.getName() );
- assertEquals( prefix + "-post@", mailingList.getPostAddress() );
- assertEquals( prefix + "-subscribe@", mailingList.getSubscribeAddress() );
- assertEquals( prefix + "-unsubscribe@", mailingList.getUnsubscribeAddress() );
- assertEquals( prefix + "-archive-url", mailingList.getMainArchiveUrl() );
- assertEquals( Arrays.asList( "other-" + prefix + "-archive-url-1", "other-" + prefix + "-archive-url-2" ),
- mailingList.getOtherArchives() );
- }
-
- private MailingList createMailingList( String name, String prefix )
- {
- MailingList ml1 = new MailingList();
- ml1.setName( name );
- ml1.setPostAddress( prefix + "-post@" );
- ml1.setSubscribeAddress( prefix + "-subscribe@" );
- ml1.setUnsubscribeAddress( prefix + "-unsubscribe@" );
- ml1.setMainArchiveUrl( prefix + "-archive-url" );
- ml1.setOtherArchives(
- Arrays.asList( "other-" + prefix + "-archive-url-1", "other-" + prefix + "-archive-url-2" ) );
- return ml1;
- }
-
- private void assertNoOutputFields()
- {
- assertNull( action.getModel() );
- assertNull( action.getDependees() );
- assertNull( action.getDependencies() );
- assertNull( action.getMailingLists() );
- assertTrue( action.getArtifacts().isEmpty() );
- }
-
- private void assertError( String result )
- {
- assertEquals( Action.ERROR, result );
- assertEquals( 1, action.getActionErrors().size() );
- }
-
- private void assertDefaultModel( ProjectVersionMetadata model )
- {
- assertDefaultModel( model, TEST_VERSION );
- }
-
- private void setActionParameters()
- {
- action.setGroupId( TEST_GROUP_ID );
- action.setArtifactId( TEST_ARTIFACT_ID );
- action.setVersion( TEST_VERSION );
- }
-
- private void assertActionParameters( ShowArtifactAction action )
- {
- assertEquals( TEST_GROUP_ID, action.getGroupId() );
- assertEquals( TEST_ARTIFACT_ID, action.getArtifactId() );
- assertEquals( TEST_VERSION, action.getVersion() );
- }
-
- private void assertActionSuccess( ShowArtifactAction action, String result )
- {
- assertEquals( Action.SUCCESS, result );
- assertTrue( action.getActionErrors().isEmpty() );
- assertTrue( action.getActionMessages().isEmpty() );
- }
-
- private RepositoryProblemFacet createRepositoryProblemFacet( String repoId, String errMsg, String projectId,
- String projectVersion, String namespace )
- {
- RepositoryProblemFacet repoProblemFacet = new RepositoryProblemFacet();
- repoProblemFacet.setRepositoryId( repoId );
- repoProblemFacet.setId( repoId );
- repoProblemFacet.setMessage( errMsg );
- repoProblemFacet.setProblem( errMsg );
- repoProblemFacet.setProject( projectId );
- repoProblemFacet.setVersion( projectVersion );
- repoProblemFacet.setNamespace( namespace );
- return repoProblemFacet;
- }
-}
+++ /dev/null
-package org.apache.archiva.web.action;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import com.opensymphony.xwork2.Action;
-import net.sf.beanlib.provider.replicator.BeanReplicator;
-import org.apache.archiva.admin.model.admin.ArchivaAdministration;
-import org.apache.archiva.admin.model.beans.ManagedRepository;
-import org.apache.archiva.admin.model.managed.ManagedRepositoryAdmin;
-import org.apache.archiva.audit.AuditEvent;
-import org.apache.archiva.audit.AuditListener;
-import org.apache.archiva.checksum.ChecksumAlgorithm;
-import org.apache.archiva.checksum.ChecksummedFile;
-import org.apache.archiva.common.utils.FileUtil;
-import org.apache.archiva.maven2.metadata.MavenMetadataReader;
-import org.apache.archiva.model.ArchivaRepositoryMetadata;
-import org.apache.archiva.model.SnapshotVersion;
-import org.apache.archiva.repository.ManagedRepositoryContent;
-import org.apache.archiva.repository.RepositoryContentFactory;
-import org.apache.archiva.repository.RepositoryNotFoundException;
-import org.apache.archiva.repository.content.ManagedDefaultRepositoryContent;
-import org.apache.archiva.repository.metadata.MetadataTools;
-import org.apache.archiva.scheduler.ArchivaTaskScheduler;
-import org.apache.commons.io.FileUtils;
-import org.apache.commons.lang.StringUtils;
-import org.easymock.MockControl;
-import org.easymock.classextension.MockClassControl;
-
-import java.io.File;
-import java.io.IOException;
-import java.text.SimpleDateFormat;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.Date;
-import java.util.List;
-import java.util.TimeZone;
-import org.junit.Test;
-
-/**
- * UploadActionTest
- */
-public class UploadActionTest
- extends AbstractActionTestCase
-{
- private UploadAction uploadAction;
-
- private RepositoryContentFactory repoFactory;
-
- private MockControl repoFactoryControl;
-
- private MockControl managedRepoAdminControl;
-
- private ManagedRepositoryAdmin managedRepositoryAdmin;
-
- private MockControl archivaAdminControl;
-
- private ArchivaAdministration archivaAdministration;
-
- private static final String REPOSITORY_ID = "test-repo";
-
-
- private ManagedRepository managedRepository;
-
- @Override
- public void setUp()
- throws Exception
- {
- super.setUp();
-
- MockControl schedulerControl = MockControl.createControl( ArchivaTaskScheduler.class );
- ArchivaTaskScheduler scheduler = (ArchivaTaskScheduler) schedulerControl.getMock();
-
- repoFactoryControl = MockClassControl.createControl( RepositoryContentFactory.class );
- repoFactory = (RepositoryContentFactory) repoFactoryControl.getMock();
-
- managedRepoAdminControl = MockControl.createControl( ManagedRepositoryAdmin.class );
- managedRepositoryAdmin = (ManagedRepositoryAdmin) managedRepoAdminControl.getMock();
-
- archivaAdminControl = MockControl.createControl( ArchivaAdministration.class );
- archivaAdministration = (ArchivaAdministration) archivaAdminControl.getMock();
-
- uploadAction = new UploadAction();
- uploadAction.setScheduler( scheduler );
- uploadAction.setManagedRepositoryAdmin( managedRepositoryAdmin );
- uploadAction.setArchivaAdministration( archivaAdministration );
-
- uploadAction.setRepositoryFactory( repoFactory );
-
- File testRepo = new File( FileUtil.getBasedir(), "target/test-classes/test-repo" );
- testRepo.mkdirs();
-
- assertTrue( testRepo.exists() );
-
- managedRepository = new ManagedRepository();
- managedRepository.setId( REPOSITORY_ID );
- managedRepository.setLayout( "default" );
- managedRepository.setLocation( testRepo.getPath() );
- managedRepository.setName( REPOSITORY_ID );
- managedRepository.setBlockRedeployments( true );
-
- }
-
- @Override
- public void tearDown()
- throws Exception
- {
- File testRepo = new File( this.managedRepository.getLocation() );
- FileUtils.deleteDirectory( testRepo );
-
- assertFalse( testRepo.exists() );
-
- super.tearDown();
- }
-
- private void setUploadParameters( String version, String classifier, File artifact, File pomFile,
- boolean generatePom )
- {
- uploadAction.setRepositoryId( REPOSITORY_ID );
- uploadAction.setGroupId( "org.apache.archiva" );
- uploadAction.setArtifactId( "artifact-upload" );
- uploadAction.setVersion( version );
- uploadAction.setPackaging( "jar" );
-
- uploadAction.setClassifier( classifier );
- uploadAction.setArtifact( artifact );
- uploadAction.setPom( pomFile );
- uploadAction.setGeneratePom( generatePom );
- }
-
- private void assertAllArtifactsIncludingSupportArtifactsArePresent( String repoLocation, String artifact,
- String version )
- {
- assertTrue( new File( repoLocation,
- "/org/apache/archiva/artifact-upload/" + version + "/" + artifact + ".jar" ).exists() );
- assertTrue( new File( repoLocation, "/org/apache/archiva/artifact-upload/" + version + "/" + artifact
- + ".jar.sha1" ).exists() );
- assertTrue( new File( repoLocation, "/org/apache/archiva/artifact-upload/" + version + "/" + artifact
- + ".jar.md5" ).exists() );
-
- assertTrue( new File( repoLocation,
- "/org/apache/archiva/artifact-upload/" + version + "/" + artifact + ".pom" ).exists() );
- assertTrue( new File( repoLocation, "/org/apache/archiva/artifact-upload/" + version + "/" + artifact
- + ".pom.sha1" ).exists() );
- assertTrue( new File( repoLocation, "/org/apache/archiva/artifact-upload/" + version + "/" + artifact
- + ".pom.md5" ).exists() );
-
- assertTrue(
- new File( repoLocation, "/org/apache/archiva/artifact-upload/" + MetadataTools.MAVEN_METADATA ).exists() );
- assertTrue( new File( repoLocation, "/org/apache/archiva/artifact-upload/" + MetadataTools.MAVEN_METADATA
- + ".sha1" ).exists() );
- assertTrue( new File( repoLocation, "/org/apache/archiva/artifact-upload/" + MetadataTools.MAVEN_METADATA
- + ".md5" ).exists() );
- }
-
- private void verifyVersionMetadataChecksums( String repoLocation, String version )
- throws IOException
- {
- ChecksummedFile checksum = new ChecksummedFile( new File( repoLocation,
- "/org/apache/archiva/artifact-upload/" + version + "/"
- + MetadataTools.MAVEN_METADATA ) );
- String sha1 = checksum.calculateChecksum( ChecksumAlgorithm.SHA1 );
- String md5 = checksum.calculateChecksum( ChecksumAlgorithm.MD5 );
-
- String contents = FileUtils.readFileToString( new File( repoLocation,
- "/org/apache/archiva/artifact-upload/" + version + "/"
- + MetadataTools.MAVEN_METADATA + ".sha1" ) );
- assertTrue( StringUtils.contains( contents, sha1 ) );
-
- contents = FileUtils.readFileToString( new File( repoLocation,
- "/org/apache/archiva/artifact-upload/" + version + "/"
- + MetadataTools.MAVEN_METADATA + ".md5" ) );
- assertTrue( StringUtils.contains( contents, md5 ) );
- }
-
- private void verifyProjectMetadataChecksums( String repoLocation )
- throws IOException
- {
- ChecksummedFile checksum = new ChecksummedFile(
- new File( repoLocation, "/org/apache/archiva/artifact-upload/" + MetadataTools.MAVEN_METADATA ) );
- String sha1 = checksum.calculateChecksum( ChecksumAlgorithm.SHA1 );
- String md5 = checksum.calculateChecksum( ChecksumAlgorithm.MD5 );
-
- String contents = FileUtils.readFileToString(
- new File( repoLocation, "/org/apache/archiva/artifact-upload/" + MetadataTools.MAVEN_METADATA + ".sha1" ) );
- assertTrue( StringUtils.contains( contents, sha1 ) );
-
- contents = FileUtils.readFileToString(
- new File( repoLocation, "/org/apache/archiva/artifact-upload/" + MetadataTools.MAVEN_METADATA + ".md5" ) );
- assertTrue( StringUtils.contains( contents, md5 ) );
- }
-
- private void verifyPomChecksums( String repoLocation, String artifact, String version )
- throws IOException
- {
- ChecksummedFile checksum;
- String sha1;
- String md5;
- String contents;
- checksum = new ChecksummedFile(
- new File( repoLocation, "/org/apache/archiva/artifact-upload/" + version + "/" + artifact + ".pom" ) );
- sha1 = checksum.calculateChecksum( ChecksumAlgorithm.SHA1 );
- md5 = checksum.calculateChecksum( ChecksumAlgorithm.MD5 );
-
- contents = FileUtils.readFileToString(
- new File( repoLocation, "/org/apache/archiva/artifact-upload/" + version + "/" + artifact + ".pom.sha1" ) );
- assertTrue( StringUtils.contains( contents, sha1 ) );
-
- contents = FileUtils.readFileToString(
- new File( repoLocation, "/org/apache/archiva/artifact-upload/" + version + "/" + artifact + ".pom.md5" ) );
- assertTrue( StringUtils.contains( contents, md5 ) );
- }
-
- private void verifyArtifactChecksums( String repoLocation, String artifact, String version )
- throws IOException
- {
- ChecksummedFile checksum = new ChecksummedFile(
- new File( repoLocation, "/org/apache/archiva/artifact-upload/" + version + "/" + artifact + ".jar" ) );
- String sha1 = checksum.calculateChecksum( ChecksumAlgorithm.SHA1 );
- String md5 = checksum.calculateChecksum( ChecksumAlgorithm.MD5 );
-
- String contents = FileUtils.readFileToString(
- new File( repoLocation, "/org/apache/archiva/artifact-upload/" + version + "/" + artifact + ".jar.sha1" ) );
- assertTrue( StringUtils.contains( contents, sha1 ) );
-
- contents = FileUtils.readFileToString(
- new File( repoLocation, "/org/apache/archiva/artifact-upload/" + version + "/" + artifact + ".jar.md5" ) );
- assertTrue( StringUtils.contains( contents, md5 ) );
- }
-
- private String getTimestamp( String[] artifactsList, int startIndex, int index )
- {
- int endIndex = -1;
- String timestamp;
-
- if ( artifactsList[index].contains( "jar" ) )
- {
- endIndex = artifactsList[index].indexOf( ".jar" );
- }
- else
- {
- endIndex = artifactsList[index].indexOf( ".pom" );
- }
-
- timestamp = artifactsList[index].substring( startIndex, endIndex );
-
- return timestamp;
- }
-
- private MockControl mockAuditLogs( List<String> resources )
- {
- return mockAuditLogs( AuditEvent.UPLOAD_FILE, resources );
- }
-
- private MockControl mockAuditLogs( String action, List<String> resources )
- {
- MockControl control = MockControl.createControl( AuditListener.class );
- AuditListener listener = (AuditListener) control.getMock();
- boolean matcherSet = false;
- for ( String resource : resources )
- {
- listener.auditEvent( new AuditEvent( REPOSITORY_ID, "guest", resource, action ) );
- if ( !matcherSet )
- {
- control.setMatcher( new AuditEventArgumentsMatcher() );
- matcherSet = true;
- }
- }
- control.replay();
-
- uploadAction.setAuditListeners( Collections.singletonList( listener ) );
- return control;
- }
-
- @Test
- public void testArtifactUploadWithPomSuccessful()
- throws Exception
- {
- setUploadParameters( "1.0", null, new File( FileUtil.getBasedir(),
- "target/test-classes/upload-artifact-test/artifact-to-be-uploaded.jar" ),
- new File( FileUtil.getBasedir(), "target/test-classes/upload-artifact-test/pom.xml" ),
- false );
-
- ManagedRepositoryContent content = new ManagedDefaultRepositoryContent();
- content.setRepository( getManagedRepository() );
-
- repoFactoryControl.expectAndReturn( repoFactory.getManagedRepositoryContent( REPOSITORY_ID ), content );
-
- managedRepoAdminControl.expectAndReturn( managedRepositoryAdmin.getManagedRepository( REPOSITORY_ID ),
- getManagedRepository(), 1, 8 );
-
- archivaAdminControl.expectAndReturn( archivaAdministration.getKnownContentConsumers(), new ArrayList<String>(),
- 2 );
-
- managedRepoAdminControl.replay();
- archivaAdminControl.replay();
- repoFactoryControl.replay();
-
- MockControl control = mockAuditLogs(
- Arrays.asList( "org/apache/archiva/artifact-upload/1.0/artifact-upload-1.0.jar",
- "org/apache/archiva/artifact-upload/1.0/artifact-upload-1.0.pom" ) );
-
- String returnString = uploadAction.doUpload();
- assertEquals( Action.SUCCESS, returnString );
-
- repoFactoryControl.verify();
- control.verify();
-
- String repoLocation = getManagedRepository().getLocation();
- assertAllArtifactsIncludingSupportArtifactsArePresent( repoLocation, "artifact-upload-1.0", "1.0" );
-
- verifyArtifactChecksums( repoLocation, "artifact-upload-1.0", "1.0" );
- verifyPomChecksums( repoLocation, "artifact-upload-1.0", "1.0" );
- verifyProjectMetadataChecksums( repoLocation );
- }
-
- @Test
- public void testArtifactUploadWithClassifier()
- throws Exception
- {
- setUploadParameters( "1.0", "tests", new File( FileUtil.getBasedir(),
- "target/test-classes/upload-artifact-test/artifact-to-be-uploaded.jar" ),
- new File( FileUtil.getBasedir(), "target/test-classes/upload-artifact-test/pom.xml" ),
- false );
-
- ManagedRepositoryContent content = new ManagedDefaultRepositoryContent();
- content.setRepository( getManagedRepository() );
-
- repoFactoryControl.expectAndReturn( repoFactory.getManagedRepositoryContent( REPOSITORY_ID ), content );
-
- managedRepoAdminControl.expectAndReturn( managedRepositoryAdmin.getManagedRepository( REPOSITORY_ID ),
- getManagedRepository(), 1, 8 );
-
- archivaAdminControl.expectAndReturn( archivaAdministration.getKnownContentConsumers(), new ArrayList<String>(),
- 2 );
-
- managedRepoAdminControl.replay();
- archivaAdminControl.replay();
-
- repoFactoryControl.replay();
-
- MockControl control = mockAuditLogs(
- Arrays.asList( "org/apache/archiva/artifact-upload/1.0/artifact-upload-1.0-tests.jar",
- "org/apache/archiva/artifact-upload/1.0/artifact-upload-1.0.pom" ) );
-
- String returnString = uploadAction.doUpload();
- assertEquals( Action.SUCCESS, returnString );
-
- repoFactoryControl.verify();
- control.verify();
-
- String repoLocation = getManagedRepository().getLocation();
- assertTrue( new File( repoLocation,
- "/org/apache/archiva/artifact-upload/1.0/artifact-upload-1.0-tests.jar" ).exists() );
- assertTrue( new File( repoLocation,
- "/org/apache/archiva/artifact-upload/1.0/artifact-upload-1.0-tests.jar.sha1" ).exists() );
- assertTrue( new File( repoLocation,
- "/org/apache/archiva/artifact-upload/1.0/artifact-upload-1.0-tests.jar.md5" ).exists() );
-
- assertTrue(
- new File( repoLocation, "/org/apache/archiva/artifact-upload/1.0/artifact-upload-1.0.pom" ).exists() );
- assertTrue(
- new File( repoLocation, "/org/apache/archiva/artifact-upload/1.0/artifact-upload-1.0.pom.sha1" ).exists() );
- assertTrue(
- new File( repoLocation, "/org/apache/archiva/artifact-upload/1.0/artifact-upload-1.0.pom.md5" ).exists() );
-
- assertTrue(
- new File( repoLocation, "/org/apache/archiva/artifact-upload/" + MetadataTools.MAVEN_METADATA ).exists() );
- assertTrue( new File( repoLocation, "/org/apache/archiva/artifact-upload/" + MetadataTools.MAVEN_METADATA
- + ".sha1" ).exists() );
- assertTrue( new File( repoLocation, "/org/apache/archiva/artifact-upload/" + MetadataTools.MAVEN_METADATA
- + ".md5" ).exists() );
-
- verifyArtifactChecksums( repoLocation, "artifact-upload-1.0-tests", "1.0" );
- verifyProjectMetadataChecksums( repoLocation );
- }
-
- @Test
- public void testArtifactUploadGeneratePomSuccessful()
- throws Exception
- {
- setUploadParameters( "1.0", null, new File( FileUtil.getBasedir(),
- "target/test-classes/upload-artifact-test/artifact-to-be-uploaded.jar" ),
- null, true );
-
- ManagedRepositoryContent content = new ManagedDefaultRepositoryContent();
- content.setRepository( getManagedRepository() );
-
- repoFactoryControl.expectAndReturn( repoFactory.getManagedRepositoryContent( REPOSITORY_ID ), content );
-
- managedRepoAdminControl.expectAndReturn( managedRepositoryAdmin.getManagedRepository( REPOSITORY_ID ),
- getManagedRepository(), 1, 8 );
-
- archivaAdminControl.expectAndReturn( archivaAdministration.getKnownContentConsumers(), new ArrayList<String>(),
- 2 );
-
- managedRepoAdminControl.replay();
- archivaAdminControl.replay();
-
- repoFactoryControl.replay();
-
- MockControl control = mockAuditLogs(
- Arrays.asList( "org/apache/archiva/artifact-upload/1.0/artifact-upload-1.0.jar",
- "org/apache/archiva/artifact-upload/1.0/artifact-upload-1.0.pom" ) );
-
- String returnString = uploadAction.doUpload();
- assertEquals( Action.SUCCESS, returnString );
-
- repoFactoryControl.verify();
- control.verify();
-
- String repoLocation = getManagedRepository().getLocation();
- assertAllArtifactsIncludingSupportArtifactsArePresent( repoLocation, "artifact-upload-1.0", "1.0" );
-
- verifyArtifactChecksums( repoLocation, "artifact-upload-1.0", "1.0" );
- verifyPomChecksums( repoLocation, "artifact-upload-1.0", "1.0" );
- verifyProjectMetadataChecksums( repoLocation );
- }
-
- @Test
- public void testArtifactUploadNoPomSuccessful()
- throws Exception
- {
- setUploadParameters( "1.0", null, new File( FileUtil.getBasedir(),
- "target/test-classes/upload-artifact-test/artifact-to-be-uploaded.jar" ),
- null, false );
-
- ManagedRepositoryContent content = new ManagedDefaultRepositoryContent();
- content.setRepository( getManagedRepository() );
-
- repoFactoryControl.expectAndReturn( repoFactory.getManagedRepositoryContent( REPOSITORY_ID ), content );
-
- managedRepoAdminControl.expectAndReturn( managedRepositoryAdmin.getManagedRepository( REPOSITORY_ID ),
- getManagedRepository(), 1, 8 );
-
- archivaAdminControl.expectAndReturn( archivaAdministration.getKnownContentConsumers(), new ArrayList<String>(),
- 2 );
-
- managedRepoAdminControl.replay();
- archivaAdminControl.replay();
-
- repoFactoryControl.replay();
-
- MockControl control =
- mockAuditLogs( Arrays.asList( "org/apache/archiva/artifact-upload/1.0/artifact-upload-1.0.jar" ) );
-
- String returnString = uploadAction.doUpload();
- assertEquals( Action.SUCCESS, returnString );
-
- repoFactoryControl.verify();
- control.verify();
-
- String repoLocation = getManagedRepository().getLocation();
- assertTrue(
- new File( repoLocation, "/org/apache/archiva/artifact-upload/1.0/artifact-upload-1.0.jar" ).exists() );
- assertTrue(
- new File( repoLocation, "/org/apache/archiva/artifact-upload/1.0/artifact-upload-1.0.jar.sha1" ).exists() );
- assertTrue(
- new File( repoLocation, "/org/apache/archiva/artifact-upload/1.0/artifact-upload-1.0.jar.md5" ).exists() );
-
- assertFalse(
- new File( repoLocation, "/org/apache/archiva/artifact-upload/1.0/artifact-upload-1.0.pom" ).exists() );
- assertFalse(
- new File( repoLocation, "/org/apache/archiva/artifact-upload/1.0/artifact-upload-1.0.pom.sha1" ).exists() );
- assertFalse(
- new File( repoLocation, "/org/apache/archiva/artifact-upload/1.0/artifact-upload-1.0.pom.md5" ).exists() );
-
- assertTrue(
- new File( repoLocation, "/org/apache/archiva/artifact-upload/" + MetadataTools.MAVEN_METADATA ).exists() );
- assertTrue( new File( repoLocation, "/org/apache/archiva/artifact-upload/" + MetadataTools.MAVEN_METADATA
- + ".sha1" ).exists() );
- assertTrue( new File( repoLocation, "/org/apache/archiva/artifact-upload/" + MetadataTools.MAVEN_METADATA
- + ".md5" ).exists() );
-
- // verify checksums of jar file
- ChecksummedFile checksum = new ChecksummedFile(
- new File( repoLocation, "/org/apache/archiva/artifact-upload/1.0/artifact-upload-1.0.jar" ) );
- String sha1 = checksum.calculateChecksum( ChecksumAlgorithm.SHA1 );
- String md5 = checksum.calculateChecksum( ChecksumAlgorithm.MD5 );
-
- String contents = FileUtils.readFileToString(
- new File( repoLocation, "/org/apache/archiva/artifact-upload/1.0/artifact-upload-1.0.jar.sha1" ) );
- assertTrue( StringUtils.contains( contents, sha1 ) );
-
- contents = FileUtils.readFileToString(
- new File( repoLocation, "/org/apache/archiva/artifact-upload/1.0/artifact-upload-1.0.jar.md5" ) );
- assertTrue( StringUtils.contains( contents, md5 ) );
-
- // verify checksums of metadata file
- checksum = new ChecksummedFile(
- new File( repoLocation, "/org/apache/archiva/artifact-upload/" + MetadataTools.MAVEN_METADATA ) );
- sha1 = checksum.calculateChecksum( ChecksumAlgorithm.SHA1 );
- md5 = checksum.calculateChecksum( ChecksumAlgorithm.MD5 );
-
- contents = FileUtils.readFileToString(
- new File( repoLocation, "/org/apache/archiva/artifact-upload/" + MetadataTools.MAVEN_METADATA + ".sha1" ) );
- assertTrue( StringUtils.contains( contents, sha1 ) );
-
- contents = FileUtils.readFileToString(
- new File( repoLocation, "/org/apache/archiva/artifact-upload/" + MetadataTools.MAVEN_METADATA + ".md5" ) );
- assertTrue( StringUtils.contains( contents, md5 ) );
- }
-
- @Test
- public void testArtifactUploadFailedRepositoryNotFound()
- throws Exception
- {
- setUploadParameters( "1.0", null, new File( FileUtil.getBasedir(),
- "target/test-classes/upload-artifact-test/artifact-to-be-uploaded.jar" ),
- null, false );
-
- repoFactoryControl.expectAndThrow( repoFactory.getManagedRepositoryContent( REPOSITORY_ID ),
- new RepositoryNotFoundException() );
-
- managedRepoAdminControl.expectAndReturn( managedRepositoryAdmin.getManagedRepository( REPOSITORY_ID ),
- getManagedRepository(), 1, 8 );
-
- archivaAdminControl.expectAndReturn( archivaAdministration.getKnownContentConsumers(), new ArrayList<String>(),
- 2 );
-
- managedRepoAdminControl.replay();
- archivaAdminControl.replay();
-
- repoFactoryControl.replay();
-
- String returnString = uploadAction.doUpload();
- assertEquals( Action.ERROR, returnString );
-
- repoFactoryControl.verify();
-
- String repoLocation = getManagedRepository().getLocation();
- assertFalse(
- new File( repoLocation, "/org/apache/archiva/artifact-upload/1.0/artifact-upload-1.0.jar" ).exists() );
-
- assertFalse(
- new File( repoLocation, "/org/apache/archiva/artifact-upload/1.0/artifact-upload-1.0.pom" ).exists() );
-
- assertFalse(
- new File( repoLocation, "/org/apache/archiva/artifact-upload/" + MetadataTools.MAVEN_METADATA ).exists() );
- }
-
- @Test
- public void testArtifactUploadSnapshots()
- throws Exception
- {
- setUploadParameters( "1.0-SNAPSHOT", null, new File( FileUtil.getBasedir(),
- "target/test-classes/upload-artifact-test/artifact-to-be-uploaded.jar" ),
- null, true );
-
- ManagedRepositoryContent content = new ManagedDefaultRepositoryContent();
- content.setRepository( getManagedRepository() );
-
- repoFactoryControl.expectAndReturn( repoFactory.getManagedRepositoryContent( REPOSITORY_ID ), content );
-
- managedRepoAdminControl.expectAndReturn( managedRepositoryAdmin.getManagedRepository( REPOSITORY_ID ),
- getManagedRepository(), 1, 8 );
-
- archivaAdminControl.expectAndReturn( archivaAdministration.getKnownContentConsumers(), new ArrayList<String>(),
- 2, 5 );
-
- managedRepoAdminControl.replay();
- archivaAdminControl.replay();
-
- repoFactoryControl.replay();
-
- SimpleDateFormat fmt = new SimpleDateFormat( "yyyyMMdd.HHmmss" );
- fmt.setTimeZone( TimeZone.getTimeZone( "UTC" ) );
- String timestamp = fmt.format( new Date() );
- MockControl control = mockAuditLogs( Arrays.asList(
- "org/apache/archiva/artifact-upload/1.0-SNAPSHOT/artifact-upload-1.0-" + timestamp + "-1.jar",
- "org/apache/archiva/artifact-upload/1.0-SNAPSHOT/artifact-upload-1.0-" + timestamp + "-1.pom" ) );
-
- String returnString = uploadAction.doUpload();
- assertEquals( Action.SUCCESS, returnString );
-
- repoFactoryControl.verify();
- control.verify();
-
- String repoLocation = getManagedRepository().getLocation();
- String[] artifactsList = new File( repoLocation, "/org/apache/archiva/artifact-upload/1.0-SNAPSHOT/" ).list();
- Arrays.sort( artifactsList );
-
- assertEquals( 9, artifactsList.length );
- assertTrue( new File( repoLocation, "/org/apache/archiva/artifact-upload/1.0-SNAPSHOT/"
- + MetadataTools.MAVEN_METADATA ).exists() );
- assertTrue( new File( repoLocation,
- "/org/apache/archiva/artifact-upload/1.0-SNAPSHOT/" + MetadataTools.MAVEN_METADATA
- + ".sha1" ).exists() );
- assertTrue( new File( repoLocation,
- "/org/apache/archiva/artifact-upload/1.0-SNAPSHOT/" + MetadataTools.MAVEN_METADATA
- + ".md5" ).exists() );
-
- int startIndex = "artifact-upload-1.0-".length();
- String timestampPath = getTimestamp( artifactsList, startIndex, 0 );
-
- assertAllArtifactsIncludingSupportArtifactsArePresent( repoLocation, "artifact-upload-1.0-" + timestampPath,
- "1.0-SNAPSHOT" );
- verifyArtifactChecksums( repoLocation, "artifact-upload-1.0-" + timestampPath, "1.0-SNAPSHOT" );
- verifyPomChecksums( repoLocation, "artifact-upload-1.0-" + timestampPath, "1.0-SNAPSHOT" );
- verifyProjectMetadataChecksums( repoLocation );
- verifyVersionMetadataChecksums( repoLocation, "1.0-SNAPSHOT" );
-
- // verify build number
- File metadataFile = new File( repoLocation, "/org/apache/archiva/artifact-upload/1.0-SNAPSHOT/"
- + MetadataTools.MAVEN_METADATA );
- ArchivaRepositoryMetadata artifactMetadata = MavenMetadataReader.read( metadataFile );
-
- SnapshotVersion snapshotVersion = artifactMetadata.getSnapshotVersion();
- assertEquals( "Incorrect build number set in artifact metadata.", 1, snapshotVersion.getBuildNumber() );
-
- String timestampPart = StringUtils.substringBeforeLast( timestampPath, "-" );
- assertEquals( "Incorrect timestamp set in artifact metadata.", timestampPart, snapshotVersion.getTimestamp() );
-
- String buildnumber = StringUtils.substringAfterLast( timestampPath, "-" );
- assertEquals( "Incorrect build number in filename.", "1", buildnumber );
-
- repoFactoryControl.reset();
- control.reset();
-
- control.setDefaultMatcher( MockControl.ALWAYS_MATCHER );
-
- // MRM-1353
- // upload snapshot artifact again and check if build number was incremented
- setUploadParameters( "1.0-SNAPSHOT", null, new File( FileUtil.getBasedir(),
- "target/test-classes/upload-artifact-test/artifact-to-be-uploaded.jar" ),
- null, true );
-
- repoFactoryControl.expectAndReturn( repoFactory.getManagedRepositoryContent( REPOSITORY_ID ), content );
-
- repoFactoryControl.replay();
-
- fmt = new SimpleDateFormat( "yyyyMMdd.HHmmss" );
- fmt.setTimeZone( TimeZone.getTimeZone( "UTC" ) );
- timestamp = fmt.format( new Date() );
-
- control = mockAuditLogs( Arrays.asList(
- "org/apache/archiva/artifact-upload/1.0-SNAPSHOT/artifact-upload-1.0-" + timestamp + "-2.jar",
- "org/apache/archiva/artifact-upload/1.0-SNAPSHOT/artifact-upload-1.0-" + timestamp + "-2.pom" ) );
-
- returnString = uploadAction.doUpload();
- assertEquals( Action.SUCCESS, returnString );
-
- repoFactoryControl.verify();
- control.verify();
-
- artifactsList = new File( repoLocation, "/org/apache/archiva/artifact-upload/1.0-SNAPSHOT/" ).list();
- Arrays.sort( artifactsList );
-
- assertEquals( 15, artifactsList.length );
-
- timestampPath = getTimestamp( artifactsList, startIndex, 6 );
-
- assertAllArtifactsIncludingSupportArtifactsArePresent( repoLocation, "artifact-upload-1.0-" + timestampPath,
- "1.0-SNAPSHOT" );
- verifyArtifactChecksums( repoLocation, "artifact-upload-1.0-" + timestampPath, "1.0-SNAPSHOT" );
- verifyPomChecksums( repoLocation, "artifact-upload-1.0-" + timestampPath, "1.0-SNAPSHOT" );
- verifyProjectMetadataChecksums( repoLocation );
- verifyVersionMetadataChecksums( repoLocation, "1.0-SNAPSHOT" );
-
- // verify build number set in metadata and in filename
- metadataFile = new File( repoLocation,
- "/org/apache/archiva/artifact-upload/1.0-SNAPSHOT/" + MetadataTools.MAVEN_METADATA );
- artifactMetadata = MavenMetadataReader.read( metadataFile );
-
- snapshotVersion = artifactMetadata.getSnapshotVersion();
- assertEquals( "Incorrect build number set in artifact metadata.", 2, snapshotVersion.getBuildNumber() );
-
- timestampPart = StringUtils.substringBeforeLast( timestampPath, "-" );
- assertEquals( "Incorrect timestamp set in artifact metadata.", timestampPart, snapshotVersion.getTimestamp() );
-
- buildnumber = StringUtils.substringAfterLast( timestampPath, "-" );
- assertEquals( "Incorrect build number in filename.", "2", buildnumber );
- }
-
- @Test
- public void testChecksumIsCorrectWhenArtifactIsReUploaded()
- throws Exception
- {
- setUploadParameters( "1.0", null, new File( FileUtil.getBasedir(),
- "target/test-classes/upload-artifact-test/artifact-to-be-uploaded.jar" ),
- null, true );
-
- ManagedRepositoryContent content = new ManagedDefaultRepositoryContent();
- ManagedRepository repoConfig = getManagedRepository();
- repoConfig.setBlockRedeployments( false );
- content.setRepository( repoConfig );
-
- repoFactoryControl.expectAndReturn( repoFactory.getManagedRepositoryContent( REPOSITORY_ID ), content );
-
- managedRepoAdminControl.expectAndReturn( managedRepositoryAdmin.getManagedRepository( REPOSITORY_ID ),
- repoConfig, 1, 8 );
-
- archivaAdminControl.expectAndReturn( archivaAdministration.getKnownContentConsumers(), new ArrayList<String>(),
- 2, 5 );
-
- managedRepoAdminControl.replay();
- archivaAdminControl.replay();
-
- repoFactoryControl.replay();
-
- String returnString = uploadAction.doUpload();
- assertEquals( Action.SUCCESS, returnString );
-
- repoFactoryControl.verify();
-
- repoFactoryControl.reset();
-
- String repoLocation = getManagedRepository().getLocation();
- assertAllArtifactsIncludingSupportArtifactsArePresent( repoLocation, "artifact-upload-1.0", "1.0" );
-
- verifyArtifactChecksums( repoLocation, "artifact-upload-1.0", "1.0" );
- verifyPomChecksums( repoLocation, "artifact-upload-1.0", "1.0" );
- verifyProjectMetadataChecksums( repoLocation );
-
- // RE-upload artifact
- setUploadParameters( "1.0", null, new File( FileUtil.getBasedir(),
- "target/test-classes/upload-artifact-test/artifact-to-be-reuploaded.jar" ),
- null, true );
-
- repoFactoryControl.expectAndReturn( repoFactory.getManagedRepositoryContent( REPOSITORY_ID ), content );
-
- repoFactoryControl.replay();
-
- // TODO: track modifications?
-// MockControl control = mockAuditLogs( AuditEvent.MODIFY_FILE, Arrays.asList(
- MockControl control = mockAuditLogs(
- Arrays.asList( "org/apache/archiva/artifact-upload/1.0/artifact-upload-1.0.jar",
- "org/apache/archiva/artifact-upload/1.0/artifact-upload-1.0.pom" ) );
-
- returnString = uploadAction.doUpload();
- assertEquals( Action.SUCCESS, returnString );
-
- repoFactoryControl.verify();
- control.verify();
-
- repoLocation = getManagedRepository().getLocation();
- assertAllArtifactsIncludingSupportArtifactsArePresent( repoLocation, "artifact-upload-1.0", "1.0" );
-
- verifyArtifactChecksums( repoLocation, "artifact-upload-1.0", "1.0" );
- verifyPomChecksums( repoLocation, "artifact-upload-1.0", "1.0" );
- verifyProjectMetadataChecksums( repoLocation );
- }
-
- @Test
- public void testUploadArtifactAlreadyExistingRedeploymentsBlocked()
- throws Exception
- {
- setUploadParameters( "1.0", null, new File( FileUtil.getBasedir(),
- "target/test-classes/upload-artifact-test/artifact-to-be-uploaded.jar" ),
- null, true );
-
- ManagedRepositoryContent content = new ManagedDefaultRepositoryContent();
- content.setRepository( getManagedRepository() );
-
- repoFactoryControl.expectAndReturn( repoFactory.getManagedRepositoryContent( REPOSITORY_ID ), content, 1, 8 );
-
- managedRepoAdminControl.expectAndReturn( managedRepositoryAdmin.getManagedRepository( REPOSITORY_ID ),
- getManagedRepository(), 1, 8 );
-
- archivaAdminControl.expectAndReturn( archivaAdministration.getKnownContentConsumers(), new ArrayList<String>(),
- 2, 5 );
-
- managedRepoAdminControl.replay();
- archivaAdminControl.replay();
-
- repoFactoryControl.replay();
-
- String returnString = uploadAction.doUpload();
- assertEquals( Action.SUCCESS, returnString );
-
- setUploadParameters( "1.0", null, new File( FileUtil.getBasedir(),
- "target/test-classes/upload-artifact-test/artifact-to-be-uploaded.jar" ),
- null, true );
-
- MockControl control = mockAuditLogs( Collections.<String>emptyList() );
-
- returnString = uploadAction.doUpload();
- assertEquals( Action.ERROR, returnString );
-
- repoFactoryControl.verify();
- control.verify();
-
- String repoLocation = getManagedRepository().getLocation();
- assertAllArtifactsIncludingSupportArtifactsArePresent( repoLocation, "artifact-upload-1.0", "1.0" );
-
- verifyArtifactChecksums( repoLocation, "artifact-upload-1.0", "1.0" );
- verifyPomChecksums( repoLocation, "artifact-upload-1.0", "1.0" );
- verifyProjectMetadataChecksums( repoLocation );
- }
-
- @Test
- public void testUploadArtifactAlreadyExistingRedeploymentsAllowed()
- throws Exception
- {
- setUploadParameters( "1.0", null, new File( FileUtil.getBasedir(),
- "target/test-classes/upload-artifact-test/artifact-to-be-uploaded.jar" ),
- null, true );
-
- ManagedRepositoryContent content = new ManagedDefaultRepositoryContent();
- ManagedRepository repoConfig = getManagedRepository();
- repoConfig.setBlockRedeployments( false );
- content.setRepository( repoConfig );
-
- repoFactoryControl.expectAndReturn( repoFactory.getManagedRepositoryContent( REPOSITORY_ID ), content, 1, 8 );
-
- managedRepoAdminControl.expectAndReturn( managedRepositoryAdmin.getManagedRepository( REPOSITORY_ID ),
- repoConfig, 1, 8 );
-
- archivaAdminControl.expectAndReturn( archivaAdministration.getKnownContentConsumers(), new ArrayList<String>(),
- 2, 5 );
-
- managedRepoAdminControl.replay();
- archivaAdminControl.replay();
-
- repoFactoryControl.replay();
-
- String returnString = uploadAction.doUpload();
- assertEquals( Action.SUCCESS, returnString );
-
- setUploadParameters( "1.0", null, new File( FileUtil.getBasedir(),
- "target/test-classes/upload-artifact-test/artifact-to-be-uploaded.jar" ),
- null, true );
-
- // TODO: track modifications?
-// MockControl control = mockAuditLogs( AuditEvent.MODIFY_FILE, Arrays.asList(
- MockControl control = mockAuditLogs(
- Arrays.asList( "org/apache/archiva/artifact-upload/1.0/artifact-upload-1.0.jar",
- "org/apache/archiva/artifact-upload/1.0/artifact-upload-1.0.pom" ) );
-
- returnString = uploadAction.doUpload();
- assertEquals( Action.SUCCESS, returnString );
-
- repoFactoryControl.verify();
- control.verify();
-
- String repoLocation = getManagedRepository().getLocation();
- assertAllArtifactsIncludingSupportArtifactsArePresent( repoLocation, "artifact-upload-1.0", "1.0" );
-
- verifyArtifactChecksums( repoLocation, "artifact-upload-1.0", "1.0" );
- verifyPomChecksums( repoLocation, "artifact-upload-1.0", "1.0" );
- verifyProjectMetadataChecksums( repoLocation );
- }
-
- ManagedRepository getManagedRepository()
- {
- return new BeanReplicator().replicateBean( this.managedRepository, ManagedRepository.class );
- }
-
-}
+++ /dev/null
-package org.apache.archiva.web.action.admin.appearance;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import org.apache.archiva.admin.repository.admin.DefaultArchivaAdministration;
-import org.apache.archiva.configuration.ArchivaConfiguration;
-import org.apache.archiva.configuration.Configuration;
-import org.apache.archiva.web.action.AbstractWebworkTestCase;
-import org.easymock.MockControl;
-import org.junit.Before;
-
-/**
- */
-public abstract class AbstractOrganizationInfoActionTest
- extends AbstractWebworkTestCase
-{
- protected MockControl archivaConfigurationControl;
-
- protected ArchivaConfiguration configuration;
-
- protected AbstractAppearanceAction action;
-
- protected Configuration config;
-
- protected abstract AbstractAppearanceAction getAction();
-
- @Before
- @Override
- public void setUp()
- throws Exception
- {
- super.setUp();
-
- config = new Configuration();
- archivaConfigurationControl = MockControl.createControl( ArchivaConfiguration.class );
- configuration = (ArchivaConfiguration) archivaConfigurationControl.getMock();
-
- configuration.getConfiguration();
- archivaConfigurationControl.setReturnValue( config, 1, 5 );
-
- configuration.save( config );
- archivaConfigurationControl.setVoidCallable( 1, 4 );
-
- archivaConfigurationControl.replay();
-
- DefaultArchivaAdministration defaultArchivaAdministration = new DefaultArchivaAdministration();
- defaultArchivaAdministration.setArchivaConfiguration( configuration );
- getAction().setArchivaAdministration( defaultArchivaAdministration );
- }
-
- protected void reloadAction()
- {
- action = getAction();
- ( (DefaultArchivaAdministration) action.getArchivaAdministration() ).setArchivaConfiguration( configuration );
-
- }
-}
+++ /dev/null
-package org.apache.archiva.web.action.admin.appearance;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import com.opensymphony.xwork2.validator.ActionValidatorManager;
-import org.apache.archiva.web.validator.utils.ValidatorUtil;
-import org.apache.archiva.configuration.OrganisationInformation;
-import org.apache.archiva.web.action.admin.repositories.DefaultActionValidatorManagerFactory;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import org.junit.Before;
-import org.junit.Test;
-
-/**
- */
-public class EditOrganizationInfoActionTest
- extends AbstractOrganizationInfoActionTest
-{
- private static final String EMPTY_STRING = "";
-
- // valid inputs
- private static final String ORGANISATION_NAME_VALID_INPUT = "abcXYZ0129. _/\\~ :?!&=-";
-
- private static final String ORGANISATION_URL_VALID_INPUT = "file://home/user/abcXYZ0129._/\\~:?!&=-<> ~+[ ]'\"";
-
- private static final String ORGANISATION_LOGO_VALID_INPUT = "file://home/user/abcXYZ0129._/\\~:?!&=-<> ~+[ ]'\"";
-
- // invalid inputs
- private static final String ORGANISATION_NAME_INVALID_INPUT = "<>~+[ ]'\"";
-
- private static final String ORGANISATION_URL_INVALID_INPUT = "/home/user/abcXYZ0129._/\\~:?!&=-<> ~+[ ]'\"";
-
- private static final String ORGANISATION_LOGO_INVALID_INPUT = "/home/user/abcXYZ0129._/\\~:?!&=-<> ~+[ ]'\"";
-
- // testing requisite
- private ActionValidatorManager actionValidatorManager;
-
- @Override
- @Before
- public void setUp()
- throws Exception
- {
- super.setUp();
-
- DefaultActionValidatorManagerFactory factory = new DefaultActionValidatorManagerFactory();
-
- actionValidatorManager = factory.createDefaultActionValidatorManager();
- }
-
- @Test
- public void testOrganisationInfoSaves()
- throws Exception
- {
- config.setOrganisationInfo( new OrganisationInformation() );
- OrganisationInformation orginfo = config.getOrganisationInfo();
- orginfo.setLogoLocation( "LOGO" );
- orginfo.setName( "NAME" );
- orginfo.setUrl( "URL" );
-
- configuration.save( config );
-
- reloadAction();
-
- action.prepare();
-
- assertEquals( "LOGO", action.getOrganisationLogo() );
- assertEquals( "NAME", action.getOrganisationName() );
- assertEquals( "URL", action.getOrganisationUrl() );
-
- action.setOrganisationLogo( "LOGO1" );
- action.setOrganisationName( "NAME1" );
- action.setOrganisationUrl( "URL1" );
-
- action.execute();
-
- orginfo = config.getOrganisationInfo();
-
- assertEquals( "LOGO1", orginfo.getLogoLocation() );
- assertEquals( "NAME1", orginfo.getName() );
- assertEquals( "URL1", orginfo.getUrl() );
- }
-
- @Test
- public void testStruts2ValidationFrameworkWithNullInputs()
- throws Exception
- {
- // prep
- action = getAction();
- populateOrganisationValues( action, null, null, null );
-
- // test
- actionValidatorManager.validate( action, EMPTY_STRING );
-
- // verify
- assertTrue( action.hasFieldErrors() );
-
- Map<String, List<String>> fieldErrors = action.getFieldErrors();
-
- // make an expected field error object
- Map<String, List<String>> expectedFieldErrors = new HashMap<String, List<String>>();
-
- // populate
- List<String> expectedErrorMessages = new ArrayList<String>();
- expectedErrorMessages.add( "You must enter a name" );
- expectedFieldErrors.put( "organisationName", expectedErrorMessages );
-
- ValidatorUtil.assertFieldErrors( expectedFieldErrors, fieldErrors );
- }
-
- @Test
- public void testStruts2ValidationFrameworkWithBlankInputs()
- throws Exception
- {
- // prep
- action = getAction();
- populateOrganisationValues( action, EMPTY_STRING, EMPTY_STRING, EMPTY_STRING );
-
- // test
- actionValidatorManager.validate( action, EMPTY_STRING );
-
- // verify
- assertTrue( action.hasFieldErrors() );
-
- Map<String, List<String>> fieldErrors = action.getFieldErrors();
-
- // make an expected field error object
- Map<String, List<String>> expectedFieldErrors = new HashMap<String, List<String>>();
-
- // populate
- List<String> expectedErrorMessages = new ArrayList<String>();
- expectedErrorMessages.add( "You must enter a name" );
- expectedFieldErrors.put( "organisationName", expectedErrorMessages );
-
- ValidatorUtil.assertFieldErrors( expectedFieldErrors, fieldErrors );
- }
-
- @Test
- public void testStruts2ValidationFrameworkWithInvalidInputs()
- throws Exception
- {
- // prep
- action = getAction();
- populateOrganisationValues( action, ORGANISATION_NAME_INVALID_INPUT, ORGANISATION_URL_INVALID_INPUT,
- ORGANISATION_LOGO_INVALID_INPUT );
-
- // test
- actionValidatorManager.validate( action, EMPTY_STRING );
-
- // verify
- assertTrue( action.hasFieldErrors() );
-
- Map<String, List<String>> fieldErrors = action.getFieldErrors();
-
- // make an expected field error object
- Map<String, List<String>> expectedFieldErrors = new HashMap<String, List<String>>();
-
- // populate
- List<String> expectedErrorMessages = new ArrayList<String>();
- expectedErrorMessages.add(
- "Organisation name must only contain alphanumeric characters, white-spaces(' '), equals(=), question-marks(?), exclamation-points(!), ampersands(&), forward-slashes(/), back-slashes(\\), underscores(_), dots(.), colons(:), tildes(~), and dashes(-)." );
- expectedFieldErrors.put( "organisationName", expectedErrorMessages );
-
- expectedErrorMessages = new ArrayList<String>();
- expectedErrorMessages.add( "You must enter a URL." );
- expectedFieldErrors.put( "organisationUrl", expectedErrorMessages );
-
- expectedErrorMessages = new ArrayList<String>();
- expectedErrorMessages.add( "You must enter a URL for your logo." );
- expectedFieldErrors.put( "organisationLogo", expectedErrorMessages );
-
- ValidatorUtil.assertFieldErrors( expectedFieldErrors, fieldErrors );
- }
-
- @Test
- public void testStruts2ValidationFrameworkWithValidInputs()
- throws Exception
- {
- // prep
- action = getAction();
- populateOrganisationValues( action, ORGANISATION_NAME_VALID_INPUT, ORGANISATION_URL_VALID_INPUT,
- ORGANISATION_LOGO_VALID_INPUT );
-
- // test
- actionValidatorManager.validate( action, EMPTY_STRING );
-
- // verify
- assertFalse( action.hasFieldErrors() );
- }
-
- private void populateOrganisationValues( AbstractAppearanceAction abstractAppearanceAction, String name, String url,
- String logo )
- {
- abstractAppearanceAction.setOrganisationName( name );
- abstractAppearanceAction.setOrganisationUrl( url );
- abstractAppearanceAction.setOrganisationLogo( logo );
- }
-
- @Override
- protected AbstractAppearanceAction getAction()
- {
- return (EditOrganisationInfoAction) getActionProxy( "/admin/editAppearance.action" ).getAction();
- }
-}
+++ /dev/null
-package org.apache.archiva.web.action.admin.appearance;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import org.apache.archiva.configuration.OrganisationInformation;
-import org.junit.Test;
-
-/**
- */
-public class OrganizationInfoActionTest
- extends AbstractOrganizationInfoActionTest
-{
- @Test
- public void testOrganisationInfoLoads()
- throws Exception
- {
- config.setOrganisationInfo( new OrganisationInformation() );
- OrganisationInformation orginfo = config.getOrganisationInfo();
- orginfo.setLogoLocation( "LOGO" );
- orginfo.setName( "NAME" );
- orginfo.setUrl( "URL" );
-
- configuration.save( config );
-
- reloadAction();
-
- action.prepare();
-
- assertEquals( "URL", action.getOrganisationUrl() );
- assertEquals( "NAME", action.getOrganisationName() );
- assertEquals( "LOGO", action.getOrganisationLogo() );
- }
-
- @Override
- protected AbstractAppearanceAction getAction()
- {
- return (OrganisationInfoAction) getActionProxy( "/components/companyInfo.action" ).getAction();
- }
-}
+++ /dev/null
-package org.apache.archiva.web.action.admin.connectors.proxy;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import com.opensymphony.xwork2.Action;
-import org.apache.archiva.admin.model.beans.ProxyConnector;
-import org.apache.archiva.admin.repository.managed.DefaultManagedRepositoryAdmin;
-import org.apache.archiva.admin.repository.proxyconnector.DefaultProxyConnectorAdmin;
-import org.apache.archiva.admin.repository.remote.DefaultRemoteRepositoryAdmin;
-import org.apache.archiva.configuration.ArchivaConfiguration;
-import org.apache.archiva.configuration.Configuration;
-import org.apache.archiva.configuration.IndeterminateConfigurationException;
-import org.apache.archiva.configuration.ManagedRepositoryConfiguration;
-import org.apache.archiva.configuration.ProxyConnectorConfiguration;
-import org.apache.archiva.configuration.RemoteRepositoryConfiguration;
-import org.apache.archiva.policies.CachedFailuresPolicy;
-import org.apache.archiva.policies.ChecksumPolicy;
-import org.apache.archiva.policies.PropagateErrorsDownloadPolicy;
-import org.apache.archiva.policies.PropagateErrorsOnUpdateDownloadPolicy;
-import org.apache.archiva.policies.ReleasesPolicy;
-import org.apache.archiva.policies.SnapshotsPolicy;
-import org.apache.archiva.web.action.AbstractWebworkTestCase;
-import org.apache.archiva.redback.integration.interceptor.SecureActionBundle;
-import org.easymock.MockControl;
-
-import java.util.List;
-import java.util.Map;
-import org.junit.Before;
-import org.junit.Test;
-
-/**
- * AddProxyConnectorActionTest
- *
- *
- */
-public class AddProxyConnectorActionTest
- extends AbstractWebworkTestCase
-{
- private AddProxyConnectorAction action;
-
- private MockControl archivaConfigurationControl;
-
- private ArchivaConfiguration archivaConfiguration;
-
- @Override
- @Before
- public void setUp()
- throws Exception
- {
- super.setUp();
-
- action = (AddProxyConnectorAction) getActionProxy( "/admin/addProxyConnector.action" ).getAction();
-
- archivaConfigurationControl = MockControl.createControl( ArchivaConfiguration.class );
- archivaConfiguration = (ArchivaConfiguration) archivaConfigurationControl.getMock();
- ( (DefaultManagedRepositoryAdmin) action.getManagedRepositoryAdmin() ).setArchivaConfiguration(
- archivaConfiguration );
- ( (DefaultRemoteRepositoryAdmin) action.getRemoteRepositoryAdmin() ).setArchivaConfiguration(
- archivaConfiguration );
- ( (DefaultProxyConnectorAdmin) action.getProxyConnectorAdmin() ).setArchivaConfiguration(
- archivaConfiguration );
- }
-
- @Test
- public void testAddBlackListPattern()
- throws Exception
- {
- expectConfigurationRequests( 7 );
- archivaConfigurationControl.replay();
-
- // Prepare Test.
- action.prepare();
- ProxyConnector connector = action.getConnector();
- populateProxyConnector( connector );
-
- // Perform Test w/no values.
- preRequest( action );
- String status = action.addBlackListPattern();
- assertEquals( Action.INPUT, status );
-
- // Should have returned an error, with no blacklist pattern added.
- assertHasErrors( action );
- assertEquals( 0, connector.getBlackListPatterns().size() );
-
- // Try again, but now with a pattern to add.
- action.setBlackListPattern( "**/*-javadoc.jar" );
- preRequest( action );
- status = action.addBlackListPattern();
- assertEquals( Action.INPUT, status );
-
- // Should have no error, and 1 blacklist pattern added.
- assertNoErrors( action );
- assertEquals( 1, connector.getBlackListPatterns().size() );
- }
-
- @Test
- public void testAddProperty()
- throws Exception
- {
- expectConfigurationRequests( 7 );
- archivaConfigurationControl.replay();
-
- // Prepare Test.
- action.prepare();
- ProxyConnector connector = action.getConnector();
- populateProxyConnector( connector );
-
- // Perform Test w/no values.
- preRequest( action );
- String status = action.addProperty();
- assertEquals( Action.INPUT, status );
-
- // Should have returned an error, with no property pattern added.
- assertHasErrors( action );
- assertEquals( 0, connector.getProperties().size() );
-
- // Try again, but now with a property key/value to add.
- action.setPropertyKey( "eat-a" );
- action.setPropertyValue( "gramov-a-bits" );
- preRequest( action );
- status = action.addProperty();
- assertEquals( Action.INPUT, status );
-
- // Should have no error, and 1 property added.
- assertNoErrors( action );
- assertEquals( 1, connector.getProperties().size() );
- }
-
- @SuppressWarnings( "unchecked" )
- @Test
- public void testAddProxyConnectorCommit()
- throws Exception
- {
- expectConfigurationRequests( 9 );
- archivaConfigurationControl.replay();
-
- // Prepare Test.
- action.prepare();
- ProxyConnector connector = action.getConnector();
- populateProxyConnector( connector );
- // forms will use an array
- //connector.getProperties().put( "eat-a", new String[] { "gramov-a-bits" } );
- // FIXME olamy check the array mode !!!
- connector.getProperties().put( "eat-a", "gramov-a-bits" );
-
- // Create the input screen.
- assertRequestStatus( action, Action.SUCCESS, "commit" );
- assertNoErrors( action );
-
- // Test configuration.
- List<ProxyConnectorConfiguration> proxyConfigs = archivaConfiguration.getConfiguration().getProxyConnectors();
- assertNotNull( proxyConfigs );
- assertEquals( 1, proxyConfigs.size() );
-
- ProxyConnectorConfiguration actualConnector = proxyConfigs.get( 0 );
-
- assertNotNull( actualConnector );
- // The use of "(direct connection)" should result in a proxyId which is <null>.
- assertNull( actualConnector.getProxyId() );
- assertEquals( "corporate", actualConnector.getSourceRepoId() );
- assertEquals( "central", actualConnector.getTargetRepoId() );
- assertEquals( "gramov-a-bits", actualConnector.getProperties().get( "eat-a" ) );
- }
-
- @Test
- public void testAddProxyConnectorInitialPage()
- throws Exception
- {
- expectConfigurationRequests( 3 );
- archivaConfigurationControl.replay();
-
- action.prepare();
- ProxyConnector configuration = action.getConnector();
- assertNotNull( configuration );
- assertNull( configuration.getProxyId() );
- assertNull( configuration.getSourceRepoId() );
- assertNull( configuration.getTargetRepoId() );
- assertTrue( configuration.getPolicies().isEmpty() );
- assertTrue( configuration.getProperties().isEmpty() );
- assertTrue( configuration.getBlackListPatterns().isEmpty() );
- assertTrue( configuration.getWhiteListPatterns().isEmpty() );
-
- String status = action.input();
- assertEquals( Action.INPUT, status );
- }
-
- @Test
- public void testAddWhiteListPattern()
- throws Exception
- {
- expectConfigurationRequests( 7 );
- archivaConfigurationControl.replay();
-
- // Prepare Test.
- action.prepare();
- ProxyConnector connector = action.getConnector();
- populateProxyConnector( connector );
-
- // Perform Test w/no values.
- preRequest( action );
- String status = action.addWhiteListPattern();
- assertEquals( Action.INPUT, status );
-
- // Should have returned an error, with no whitelist pattern added.
- assertHasErrors( action );
- assertEquals( 0, connector.getWhiteListPatterns().size() );
-
- // Try again, but now with a pattern to add.
- action.setWhiteListPattern( "**/*.jar" );
- preRequest( action );
- status = action.addWhiteListPattern();
- assertEquals( Action.INPUT, status );
-
- // Should have no error, and 1 whitelist pattern added.
- assertNoErrors( action );
- assertEquals( 1, connector.getWhiteListPatterns().size() );
- }
-
- @Test
- public void testRemoveBlackListPattern()
- throws Exception
- {
- expectConfigurationRequests( 7 );
- archivaConfigurationControl.replay();
-
- // Prepare Test.
- action.prepare();
- ProxyConnector connector = action.getConnector();
- populateProxyConnector( connector );
-
- // Add some arbitrary blacklist patterns.
- connector.addBlackListPattern( "**/*-javadoc.jar" );
- connector.addBlackListPattern( "**/*.war" );
-
- // Perform Test w/no pattern value.
- preRequest( action );
- String status = action.removeBlackListPattern();
- assertEquals( Action.INPUT, status );
-
- // Should have returned an error, with no blacklist pattern removed.
- assertHasErrors( action );
- assertEquals( 2, connector.getBlackListPatterns().size() );
-
- // Perform test w/invalid (non-existant) pattern value to remove.
- preRequest( action );
- action.setPattern( "**/*oops*" );
- status = action.removeBlackListPattern();
- assertEquals( Action.INPUT, status );
-
- // Should have returned an error, with no blacklist pattern removed.
- assertHasErrors( action );
- assertEquals( 2, connector.getBlackListPatterns().size() );
-
- // Try again, but now with a valid pattern to remove.
- action.setPattern( "**/*-javadoc.jar" );
- preRequest( action );
- status = action.removeBlackListPattern();
- assertEquals( Action.INPUT, status );
-
- // Should have no error, and 1 blacklist pattern left.
- assertNoErrors( action );
- assertEquals( 1, connector.getBlackListPatterns().size() );
- assertEquals( "Should have left 1 blacklist pattern", "**/*.war", connector.getBlackListPatterns().get( 0 ) );
- }
-
- @Test
- public void testRemoveProperty()
- throws Exception
- {
- expectConfigurationRequests( 7 );
- archivaConfigurationControl.replay();
-
- // Prepare Test.
- action.prepare();
- ProxyConnector connector = action.getConnector();
- populateProxyConnector( connector );
-
- // Add some arbitrary properties.
- connector.addProperty( "username", "general-tso" );
- connector.addProperty( "password", "chicken" );
-
- // Perform Test w/no property key.
- preRequest( action );
- String status = action.removeProperty();
- assertEquals( Action.INPUT, status );
-
- // Should have returned an error, with no properties removed.
- assertHasErrors( action );
- assertEquals( 2, connector.getProperties().size() );
-
- // Perform test w/invalid (non-existant) property key to remove.
- preRequest( action );
- action.setPropertyKey( "slurm" );
- status = action.removeProperty();
- assertEquals( Action.INPUT, status );
-
- // Should have returned an error, with no properties removed.
- assertHasErrors( action );
- assertEquals( 2, connector.getProperties().size() );
-
- // Try again, but now with a valid property to remove.
- preRequest( action );
- action.setPropertyKey( "password" );
- status = action.removeProperty();
- assertEquals( Action.INPUT, status );
-
- // Should have no error, and 1 property left.
- assertNoErrors( action );
- assertEquals( 1, connector.getProperties().size() );
- assertEquals( "Should have left 1 property", "general-tso", connector.getProperties().get( "username" ) );
- }
-
- @Test
- public void testRemoveWhiteListPattern()
- throws Exception
- {
- expectConfigurationRequests( 7 );
- archivaConfigurationControl.replay();
-
- // Prepare Test.
- action.prepare();
- ProxyConnector connector = action.getConnector();
- populateProxyConnector( connector );
-
- // Add some arbitrary whitelist patterns.
- connector.addWhiteListPattern( "javax/**/*" );
- connector.addWhiteListPattern( "com/sun/**/*" );
-
- // Perform Test w/no pattern value.
- preRequest( action );
- String status = action.removeWhiteListPattern();
- assertEquals( Action.INPUT, status );
-
- // Should have returned an error, with no whitelist pattern removed.
- assertHasErrors( action );
- assertEquals( 2, connector.getWhiteListPatterns().size() );
-
- // Perform test w/invalid (non-existant) pattern value to remove.
- preRequest( action );
- action.setPattern( "**/*oops*" );
- status = action.removeWhiteListPattern();
- assertEquals( Action.INPUT, status );
-
- // Should have returned an error, with no whitelist pattern removed.
- assertHasErrors( action );
- assertEquals( 2, connector.getWhiteListPatterns().size() );
-
- // Try again, but now with a valid pattern to remove.
- action.setPattern( "com/sun/**/*" );
- preRequest( action );
- status = action.removeWhiteListPattern();
- assertEquals( Action.INPUT, status );
-
- // Should have no error, and 1 whitelist pattern left.
- assertNoErrors( action );
- assertEquals( 1, connector.getWhiteListPatterns().size() );
- assertEquals( "Should have left 1 whitelist pattern", "javax/**/*", connector.getWhiteListPatterns().get( 0 ) );
- }
-
- @Test
- public void testSecureActionBundle()
- throws Exception
- {
- expectConfigurationRequests( 3 );
- archivaConfigurationControl.replay();
-
- action.prepare();
- SecureActionBundle bundle = action.getSecureActionBundle();
- assertTrue( bundle.requiresAuthentication() );
- assertEquals( 1, bundle.getAuthorizationTuples().size() );
- }
-
- private Configuration createInitialConfiguration()
- {
- Configuration config = new Configuration();
-
- ManagedRepositoryConfiguration managedRepo = new ManagedRepositoryConfiguration();
- managedRepo.setId( "corporate" );
- managedRepo.setLayout( "${java.io.tmpdir}/archiva-test/managed-repo" );
- managedRepo.setReleases( true );
-
- config.addManagedRepository( managedRepo );
-
- RemoteRepositoryConfiguration remoteRepo = new RemoteRepositoryConfiguration();
- remoteRepo.setId( "central" );
- remoteRepo.setUrl( "http://repo1.maven.org/maven2/" );
-
- config.addRemoteRepository( remoteRepo );
-
- return config;
- }
-
- private void expectConfigurationRequests( int requestConfigCount )
- throws org.apache.archiva.redback.components.registry.RegistryException, IndeterminateConfigurationException
- {
- Configuration config = createInitialConfiguration();
- archivaConfiguration.getConfiguration();
- archivaConfigurationControl.setReturnValue( config, requestConfigCount, requestConfigCount + 1 );
- archivaConfiguration.save( config );
- }
-
- @SuppressWarnings( "unchecked" )
- private void populateProxyConnector( ProxyConnector connector )
- {
- connector.setProxyId( AbstractProxyConnectorFormAction.DIRECT_CONNECTION );
- connector.setSourceRepoId( "corporate" );
- connector.setTargetRepoId( "central" );
-
- // TODO: Set these options programatically via list of available policies.
- Map<String, String> policies = connector.getPolicies();
- policies.put( "releases", new ReleasesPolicy().getDefaultOption() );
- policies.put( "snapshots", new SnapshotsPolicy().getDefaultOption() );
- policies.put( "checksum", new ChecksumPolicy().getDefaultOption() );
- policies.put( "cache-failures", new CachedFailuresPolicy().getDefaultOption() );
- policies.put( "propagate-errors", new PropagateErrorsDownloadPolicy().getDefaultOption() );
- policies.put( "propagate-errors-on-update", new PropagateErrorsOnUpdateDownloadPolicy().getDefaultOption() );
- }
-
-
-}
+++ /dev/null
-package org.apache.archiva.web.action.admin.connectors.proxy;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import com.opensymphony.xwork2.Action;
-import org.apache.archiva.admin.repository.managed.DefaultManagedRepositoryAdmin;
-import org.apache.archiva.admin.repository.proxyconnector.DefaultProxyConnectorAdmin;
-import org.apache.archiva.admin.repository.remote.DefaultRemoteRepositoryAdmin;
-import org.apache.archiva.configuration.ArchivaConfiguration;
-import org.apache.archiva.configuration.Configuration;
-import org.apache.archiva.configuration.IndeterminateConfigurationException;
-import org.apache.archiva.configuration.ManagedRepositoryConfiguration;
-import org.apache.archiva.configuration.ProxyConnectorConfiguration;
-import org.apache.archiva.configuration.RemoteRepositoryConfiguration;
-import org.apache.archiva.web.action.AbstractWebworkTestCase;
-import org.apache.archiva.redback.integration.interceptor.SecureActionBundle;
-import org.easymock.MockControl;
-import org.junit.Before;
-import org.junit.Test;
-/**
- * DeleteProxyConnectorActionTest
- *
- *
- */
-public class DeleteProxyConnectorActionTest
- extends AbstractWebworkTestCase
-{
- private static final String TEST_TARGET_ID = "central";
-
- private static final String TEST_SOURCE_ID = "corporate";
-
- private DeleteProxyConnectorAction action;
-
- private MockControl archivaConfigurationControl;
-
- private ArchivaConfiguration archivaConfiguration;
-
- @Override
- @Before
- public void setUp()
- throws Exception
- {
- super.setUp();
-
- action = (DeleteProxyConnectorAction) getActionProxy( "/admin/deleteProxyConnector.action" ).getAction();
-
- archivaConfigurationControl = MockControl.createControl( ArchivaConfiguration.class );
- archivaConfiguration = (ArchivaConfiguration) archivaConfigurationControl.getMock();
- ( (DefaultManagedRepositoryAdmin) action.getManagedRepositoryAdmin() ).setArchivaConfiguration(
- archivaConfiguration );
- ( (DefaultRemoteRepositoryAdmin) action.getRemoteRepositoryAdmin() ).setArchivaConfiguration(
- archivaConfiguration );
- ( (DefaultProxyConnectorAdmin) action.getProxyConnectorAdmin() ).setArchivaConfiguration(
- archivaConfiguration );
- }
-
- @Test
- public void testConfirmDelete()
- throws Exception
- {
- expectConfigurationRequests( 1 );
- archivaConfigurationControl.replay();
-
- // Show the confirm the delete of proxy connector screen.
- preRequest( action );
- action.setSource( TEST_SOURCE_ID );
- action.setTarget( TEST_TARGET_ID );
- String status = action.confirmDelete();
- assertEquals( Action.INPUT, status );
- assertNoErrors( action );
- }
-
- @Test
- public void testConfirmDeleteBadSourceOrTarget()
- throws Exception
- {
- expectConfigurationRequests( 4 );
- archivaConfigurationControl.replay();
-
- // Attempt to show the confirm delete screen, but provide
- // a bad source id or target id to actually delete
-
- preRequest( action );
- action.setSource( "bad-source" ); // id doesn't exist.
- action.setTarget( "bad-target" ); // id doesn't exist.
- String status = action.confirmDelete();
- // Should have resulted in an error.
- assertEquals( Action.ERROR, status );
- assertHasErrors( action );
-
- preRequest( action );
- action.setSource( "bad" ); // Bad doesn't exist.
- action.setTarget( TEST_TARGET_ID );
- status = action.confirmDelete();
- // Should have resulted in an error.
- assertEquals( Action.ERROR, status );
- assertHasErrors( action );
-
- preRequest( action );
- action.setSource( TEST_SOURCE_ID );
- action.setTarget( "bad" ); // Bad doesn't exist.
- status = action.confirmDelete();
- // Should have resulted in an error.
- assertEquals( Action.ERROR, status );
- assertHasErrors( action );
- }
-
- @Test
- public void testConfirmDeleteNoSourceOrTarget()
- throws Exception
- {
- expectConfigurationRequests( 1 );
- archivaConfigurationControl.replay();
-
- // Attempt to show the confirm delete screen, but don't provide
- // the source id or target id to actually delete
-
- preRequest( action );
- action.setSource( null ); // No source Id.
- action.setTarget( null ); // No target Id.
- String status = action.confirmDelete();
- // Should have resulted in an error.
- assertEquals( Action.ERROR, status );
- assertHasErrors( action );
-
- preRequest( action );
- action.setSource( TEST_SOURCE_ID );
- action.setTarget( null ); // No target Id.
- status = action.confirmDelete();
- // Should have resulted in an error.
- assertEquals( Action.ERROR, status );
- assertHasErrors( action );
-
- preRequest( action );
- action.setSource( null ); // No source Id.
- action.setTarget( TEST_TARGET_ID );
- status = action.confirmDelete();
- // Should have resulted in an error.
- assertEquals( Action.ERROR, status );
- assertHasErrors( action );
- }
-
- @Test
- public void testDelete()
- throws Exception
- {
- expectConfigurationRequests( 5 );
- archivaConfigurationControl.replay();
-
- // Show the confirm the delete of proxy connector screen.
- preRequest( action );
- action.setSource( TEST_SOURCE_ID );
- action.setTarget( TEST_TARGET_ID );
- String status = action.confirmDelete();
- assertEquals( Action.INPUT, status );
- assertNoErrors( action );
-
- // Perform the delete.
- preRequest( action );
- status = action.delete();
- assertEquals( Action.SUCCESS, status );
- assertNoErrors( action );
- assertHasMessages( action );
-
- // Test the configuration.
- assertEquals( 0, archivaConfiguration.getConfiguration().getProxyConnectors().size() );
- }
-
- @Test
- public void testSecureActionBundle()
- throws Exception
- {
- expectConfigurationRequests( 1 );
- archivaConfigurationControl.replay();
-
- SecureActionBundle bundle = action.getSecureActionBundle();
- assertTrue( bundle.requiresAuthentication() );
- assertEquals( 1, bundle.getAuthorizationTuples().size() );
- }
-
- private Configuration createInitialConfiguration()
- {
- Configuration config = new Configuration();
-
- ManagedRepositoryConfiguration managedRepo = new ManagedRepositoryConfiguration();
- managedRepo.setId( TEST_SOURCE_ID );
- managedRepo.setLayout( "${java.io.tmpdir}/archiva-test/managed-repo" );
- managedRepo.setReleases( true );
-
- config.addManagedRepository( managedRepo );
-
- RemoteRepositoryConfiguration remoteRepo = new RemoteRepositoryConfiguration();
- remoteRepo.setId( TEST_TARGET_ID );
- remoteRepo.setUrl( "http://repo1.maven.org/maven2/" );
-
- config.addRemoteRepository( remoteRepo );
-
- ProxyConnectorConfiguration connector = new ProxyConnectorConfiguration();
- connector.setSourceRepoId( TEST_SOURCE_ID );
- connector.setTargetRepoId( TEST_TARGET_ID );
-
- config.addProxyConnector( connector );
-
- return config;
- }
-
- private void expectConfigurationRequests( int requestConfigCount )
- throws org.apache.archiva.redback.components.registry.RegistryException, IndeterminateConfigurationException
- {
- Configuration config = createInitialConfiguration();
-
- for ( int i = 0; i < requestConfigCount; i++ )
- {
- archivaConfiguration.getConfiguration();
- archivaConfigurationControl.setReturnValue( config );
- }
-
- archivaConfiguration.save( config );
- }
-
-}
+++ /dev/null
-/*
- * Copyright 2008 jdumay.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * under the License.
- */
-
-package org.apache.archiva.web.action.admin.connectors.proxy;
-
-import com.opensymphony.xwork2.Action;
-import org.apache.archiva.admin.repository.managed.DefaultManagedRepositoryAdmin;
-import org.apache.archiva.admin.repository.proxyconnector.DefaultProxyConnectorAdmin;
-import org.apache.archiva.admin.repository.remote.DefaultRemoteRepositoryAdmin;
-import org.apache.archiva.configuration.ArchivaConfiguration;
-import org.apache.archiva.configuration.Configuration;
-import org.apache.archiva.configuration.IndeterminateConfigurationException;
-import org.apache.archiva.configuration.ManagedRepositoryConfiguration;
-import org.apache.archiva.configuration.ProxyConnectorConfiguration;
-import org.apache.archiva.configuration.RemoteRepositoryConfiguration;
-import org.apache.archiva.web.action.AbstractWebworkTestCase;
-import org.apache.archiva.redback.components.registry.RegistryException;
-import org.apache.archiva.redback.integration.interceptor.SecureActionBundle;
-import org.easymock.MockControl;
-import org.junit.Before;
-import org.junit.Test;
-
-public class DisableProxyConnectorActionTest
- extends AbstractWebworkTestCase
-{
- private static final String TEST_TARGET_ID = "central";
-
- private static final String TEST_SOURCE_ID = "corporate";
-
- private DisableProxyConnectorAction action;
-
- private MockControl archivaConfigurationControl;
-
- private ArchivaConfiguration archivaConfiguration;
-
- @Override
- @Before
- public void setUp()
- throws Exception
- {
- super.setUp();
-
- action = (DisableProxyConnectorAction) getActionProxy( "/admin/disableProxyConnector.action" ).getAction();
-
- archivaConfigurationControl = MockControl.createControl( ArchivaConfiguration.class );
- archivaConfiguration = (ArchivaConfiguration) archivaConfigurationControl.getMock();
- ( (DefaultManagedRepositoryAdmin) action.getManagedRepositoryAdmin() ).setArchivaConfiguration(
- archivaConfiguration );
- ( (DefaultRemoteRepositoryAdmin) action.getRemoteRepositoryAdmin() ).setArchivaConfiguration(
- archivaConfiguration );
- ( (DefaultProxyConnectorAdmin) action.getProxyConnectorAdmin() ).setArchivaConfiguration( archivaConfiguration );
- }
-
- @Test
- public void testConfirmDisableBadSourceOrTarget()
- throws Exception
- {
- expectConfigurationRequests( 4 );
- archivaConfigurationControl.replay();
-
- // Attempt to show the confirm disable screen, but provide
- // a bad source id or target id to actually delete
-
- preRequest( action );
- action.setSource( "bad-source" ); // id doesn't exist.
- action.setTarget( "bad-target" ); // id doesn't exist.
- String status = action.confirmDisable();
- // Should have resulted in an error.
- assertEquals( Action.ERROR, status );
- assertHasErrors( action );
-
- preRequest( action );
- action.setSource( "bad" ); // Bad doesn't exist.
- action.setTarget( TEST_TARGET_ID );
- status = action.confirmDisable();
- // Should have resulted in an error.
- assertEquals( Action.ERROR, status );
- assertHasErrors( action );
-
- preRequest( action );
- action.setSource( TEST_SOURCE_ID );
- action.setTarget( "bad" ); // Bad doesn't exist.
- status = action.confirmDisable();
- // Should have resulted in an error.
- assertEquals( Action.ERROR, status );
- assertHasErrors( action );
- }
-
- @Test
- public void testConfirmDisableNoSourceOrTarget()
- throws Exception
- {
- expectConfigurationRequests( 1 );
- archivaConfigurationControl.replay();
-
- // Attempt to show the confirm disable screen, but don't provide
- // the source id or target id to actually delete
-
- preRequest( action );
- action.setSource( null ); // No source Id.
- action.setTarget( null ); // No target Id.
- String status = action.confirmDisable();
- // Should have resulted in an error.
- assertEquals( Action.ERROR, status );
- assertHasErrors( action );
-
- preRequest( action );
- action.setSource( TEST_SOURCE_ID );
- action.setTarget( null ); // No target Id.
- status = action.confirmDisable();
- // Should have resulted in an error.
- assertEquals( Action.ERROR, status );
- assertHasErrors( action );
-
- preRequest( action );
- action.setSource( null ); // No source Id.
- action.setTarget( TEST_TARGET_ID );
- status = action.confirmDisable();
- // Should have resulted in an error.
- assertEquals( Action.ERROR, status );
- assertHasErrors( action );
- }
-
- @Test
- public void testDelete()
- throws Exception
- {
- expectConfigurationRequests( 5 );
- archivaConfigurationControl.replay();
-
- // Show the confirm the disable of proxy connector screen.
- preRequest( action );
- action.setSource( TEST_SOURCE_ID );
- action.setTarget( TEST_TARGET_ID );
- String status = action.confirmDisable();
- assertEquals( Action.INPUT, status );
- assertNoErrors( action );
-
- // Perform the disable.
- preRequest( action );
- status = action.disable();
- assertEquals( Action.SUCCESS, status );
- assertNoErrors( action );
- assertHasMessages( action );
-
- // Test the configuration.
- assertEquals( 1, archivaConfiguration.getConfiguration().getProxyConnectors().size() );
- ProxyConnectorConfiguration config =
- (ProxyConnectorConfiguration) archivaConfiguration.getConfiguration().getProxyConnectors().get( 0 );
- assertTrue( config.isDisabled() );
- }
-
- @Test
- public void testSecureActionBundle()
- throws Exception
- {
- expectConfigurationRequests( 1 );
- archivaConfigurationControl.replay();
-
- SecureActionBundle bundle = action.getSecureActionBundle();
- assertTrue( bundle.requiresAuthentication() );
- assertEquals( 1, bundle.getAuthorizationTuples().size() );
- }
-
- @Test
- public void testConfirmEnable()
- throws Exception
- {
- expectConfigurationRequests( 1 );
- archivaConfigurationControl.replay();
-
- // Show the confirm the disable of proxy connector screen.
- preRequest( action );
- action.setSource( TEST_SOURCE_ID );
- action.setTarget( TEST_TARGET_ID );
- String status = action.confirmDisable();
- assertEquals( Action.INPUT, status );
- assertNoErrors( action );
- }
-
- private Configuration createInitialConfiguration()
- {
- Configuration config = new Configuration();
-
- ManagedRepositoryConfiguration managedRepo = new ManagedRepositoryConfiguration();
- managedRepo.setId( TEST_SOURCE_ID );
- managedRepo.setLayout( "${java.io.tmpdir}/archiva-test/managed-repo" );
- managedRepo.setReleases( true );
-
- config.addManagedRepository( managedRepo );
-
- RemoteRepositoryConfiguration remoteRepo = new RemoteRepositoryConfiguration();
- remoteRepo.setId( TEST_TARGET_ID );
- remoteRepo.setUrl( "http://repo1.maven.org/maven2/" );
-
- config.addRemoteRepository( remoteRepo );
-
- ProxyConnectorConfiguration connector = new ProxyConnectorConfiguration();
- connector.setSourceRepoId( TEST_SOURCE_ID );
- connector.setTargetRepoId( TEST_TARGET_ID );
-
- connector.setDisabled( false );
-
- config.addProxyConnector( connector );
-
- return config;
- }
-
- private void expectConfigurationRequests( int requestConfigCount )
- throws RegistryException, IndeterminateConfigurationException
- {
- Configuration config = createInitialConfiguration();
-
- for ( int i = 0; i < requestConfigCount; i++ )
- {
- archivaConfiguration.getConfiguration();
- archivaConfigurationControl.setReturnValue( config );
- }
-
- archivaConfiguration.save( config );
- }
-}
+++ /dev/null
-package org.apache.archiva.web.action.admin.connectors.proxy;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import com.opensymphony.xwork2.Action;
-import org.apache.archiva.admin.model.beans.ProxyConnector;
-import org.apache.archiva.admin.repository.managed.DefaultManagedRepositoryAdmin;
-import org.apache.archiva.admin.repository.proxyconnector.DefaultProxyConnectorAdmin;
-import org.apache.archiva.admin.repository.remote.DefaultRemoteRepositoryAdmin;
-import org.apache.archiva.configuration.ArchivaConfiguration;
-import org.apache.archiva.configuration.Configuration;
-import org.apache.archiva.configuration.IndeterminateConfigurationException;
-import org.apache.archiva.configuration.ManagedRepositoryConfiguration;
-import org.apache.archiva.configuration.ProxyConnectorConfiguration;
-import org.apache.archiva.configuration.RemoteRepositoryConfiguration;
-import org.apache.archiva.policies.CachedFailuresPolicy;
-import org.apache.archiva.policies.ChecksumPolicy;
-import org.apache.archiva.policies.PropagateErrorsDownloadPolicy;
-import org.apache.archiva.policies.PropagateErrorsOnUpdateDownloadPolicy;
-import org.apache.archiva.policies.ReleasesPolicy;
-import org.apache.archiva.policies.SnapshotsPolicy;
-import org.apache.archiva.web.action.AbstractWebworkTestCase;
-import org.apache.archiva.redback.components.registry.RegistryException;
-import org.apache.archiva.redback.integration.interceptor.SecureActionBundle;
-import org.easymock.MockControl;
-
-import java.util.List;
-import java.util.Map;
-import org.junit.Before;
-import org.junit.Test;
-
-/**
- * EditProxyConnectorActionTest
- *
- *
- */
-public class EditProxyConnectorActionTest
- extends AbstractWebworkTestCase
-{
- private static final String TEST_TARGET_ID = "central";
-
- private static final String TEST_SOURCE_ID = "corporate";
-
- private EditProxyConnectorAction action;
-
- private MockControl archivaConfigurationControl;
-
- private ArchivaConfiguration archivaConfiguration;
-
- @Override
- @Before
- public void setUp()
- throws Exception
- {
- super.setUp();
-
- action = (EditProxyConnectorAction) getActionProxy( "/admin/editProxyConnector.action" ).getAction();
-
- archivaConfigurationControl = MockControl.createControl( ArchivaConfiguration.class );
- archivaConfiguration = (ArchivaConfiguration) archivaConfigurationControl.getMock();
-
-
-
- ( (DefaultManagedRepositoryAdmin) action.getManagedRepositoryAdmin() ).setArchivaConfiguration(
- archivaConfiguration );
- ( (DefaultRemoteRepositoryAdmin) action.getRemoteRepositoryAdmin() ).setArchivaConfiguration(
- archivaConfiguration );
- ( (DefaultProxyConnectorAdmin) action.getProxyConnectorAdmin() ).setArchivaConfiguration(
- archivaConfiguration );
- }
-
- private void expectConfigurationRequests( int requestConfigCount )
- throws org.apache.archiva.redback.components.registry.RegistryException, IndeterminateConfigurationException
- {
- expectConfigurationRequests( requestConfigCount, 1 );
- }
-
- private void expectConfigurationRequests( int requestConfigCount, int saveRequestCount )
- throws RegistryException, IndeterminateConfigurationException
- {
- Configuration config = createInitialConfiguration();
-
- archivaConfigurationControl.expectAndReturn( archivaConfiguration.getConfiguration(), config,
- requestConfigCount , 20);
- //archivaConfiguration.getConfiguration();
- //archivaConfigurationControl.setReturnValue( config, requestConfigCount );
-
- for ( int i = 0; i <= saveRequestCount; i++ )
- {
- archivaConfiguration.save( config );
- }
-
- ( (DefaultManagedRepositoryAdmin) action.getManagedRepositoryAdmin() ).setArchivaConfiguration(
- archivaConfiguration );
- ( (DefaultRemoteRepositoryAdmin) action.getRemoteRepositoryAdmin() ).setArchivaConfiguration(
- archivaConfiguration );
- ( (DefaultProxyConnectorAdmin) action.getProxyConnectorAdmin() ).setArchivaConfiguration(
- archivaConfiguration );
- }
-
- @Test
- public void testAddBlackListPattern()
- throws Exception
- {
- expectConfigurationRequests( 7 );
- archivaConfigurationControl.replay();
-
- // Prepare Test.
- action.setSource( TEST_SOURCE_ID );
- action.setTarget( TEST_TARGET_ID );
- action.prepare();
- ProxyConnector connector = action.getConnector();
- assertInitialProxyConnector( connector );
-
- // Perform Test w/no values.
- preRequest( action );
- String status = action.addBlackListPattern();
- assertEquals( Action.INPUT, status );
-
- // Should have returned an error, with no blacklist pattern added.
- assertHasErrors( action );
- assertEquals( 0, connector.getBlackListPatterns().size() );
-
- // Try again, but now with a pattern to add.
- action.setBlackListPattern( "**/*-javadoc.jar" );
- preRequest( action );
- status = action.addBlackListPattern();
- assertEquals( Action.INPUT, status );
-
- // Should have no error, and 1 blacklist pattern added.
- assertNoErrors( action );
- assertEquals( 1, connector.getBlackListPatterns().size() );
- }
-
- @Test
- public void testAddProperty()
- throws Exception
- {
- expectConfigurationRequests( 7 );
- archivaConfigurationControl.replay();
-
- // Prepare Test.
- action.setSource( TEST_SOURCE_ID );
- action.setTarget( TEST_TARGET_ID );
- action.prepare();
- ProxyConnector connector = action.getConnector();
- assertInitialProxyConnector( connector );
-
- // Perform Test w/no values.
- preRequest( action );
- String status = action.addProperty();
- assertEquals( Action.INPUT, status );
-
- // Should have returned an error, with no property pattern added.
- assertHasErrors( action );
- assertEquals( 0, connector.getProperties().size() );
-
- // Try again, but now with a property key/value to add.
- action.setPropertyKey( "eat-a" );
- action.setPropertyValue( "gramov-a-bits" );
- preRequest( action );
- status = action.addProperty();
- assertEquals( Action.INPUT, status );
-
- // Should have no error, and 1 property added.
- assertNoErrors( action );
- assertEquals( 1, connector.getProperties().size() );
- assertEquals( "gramov-a-bits", connector.getProperties().get( "eat-a" ) );
- }
-
- @Test
- public void testAddWhiteListPattern()
- throws Exception
- {
- expectConfigurationRequests( 7 );
- archivaConfigurationControl.replay();
-
- // Prepare Test.
- action.setSource( TEST_SOURCE_ID );
- action.setTarget( TEST_TARGET_ID );
- action.prepare();
- ProxyConnector connector = action.getConnector();
- assertInitialProxyConnector( connector );
-
- // Perform Test w/no values.
- preRequest( action );
- String status = action.addWhiteListPattern();
- assertEquals( Action.INPUT, status );
-
- // Should have returned an error, with no whitelist pattern added.
- assertHasErrors( action );
- assertEquals( 0, connector.getWhiteListPatterns().size() );
-
- // Try again, but now with a pattern to add.
- action.setWhiteListPattern( "**/*.jar" );
- preRequest( action );
- status = action.addWhiteListPattern();
- assertEquals( Action.INPUT, status );
-
- // Should have no error, and 1 whitelist pattern added.
- assertNoErrors( action );
- assertEquals( 1, connector.getWhiteListPatterns().size() );
- }
-
- @SuppressWarnings( "unchecked" )
- @Test
- public void testEditProxyConnectorCommit()
- throws Exception
- {
- expectConfigurationRequests( 9, 2 );
- archivaConfigurationControl.replay();
-
- // Prepare Test.
- action.setSource( TEST_SOURCE_ID );
- action.setTarget( TEST_TARGET_ID );
- action.prepare();
- ProxyConnector connector = action.getConnector();
- assertInitialProxyConnector( connector );
- // forms will use an array
- //connector.getProperties().put( "eat-a", new String[]{ "gramov-a-bits" } );
- // FIXME check the array mode
- connector.getProperties().put( "eat-a", "gramov-a-bits" );
-
- // Create the input screen.
- assertRequestStatus( action, Action.SUCCESS, "commit" );
- assertNoErrors( action );
-
- // Test configuration.
- List<ProxyConnectorConfiguration> proxyConfigs = archivaConfiguration.getConfiguration().getProxyConnectors();
- assertNotNull( proxyConfigs );
- assertEquals( 1, proxyConfigs.size() );
-
- ProxyConnectorConfiguration actualConnector = proxyConfigs.get( 0 );
-
- assertNotNull( actualConnector );
- // The use of "(direct connection)" should result in a proxyId which is <null>.
- assertNull( actualConnector.getProxyId() );
- assertEquals( "corporate", actualConnector.getSourceRepoId() );
- assertEquals( "central", actualConnector.getTargetRepoId() );
-
- }
-
- @Test
- public void testEditProxyConnectorInitialPage()
- throws Exception
- {
- expectConfigurationRequests( 3 );
- archivaConfigurationControl.replay();
-
- action.setSource( TEST_SOURCE_ID );
- action.setTarget( TEST_TARGET_ID );
- action.prepare();
- ProxyConnector connector = action.getConnector();
- assertInitialProxyConnector( connector );
-
- String status = action.input();
- assertEquals( Action.INPUT, status );
- }
-
- @Test
- public void testRemoveBlackListPattern()
- throws Exception
- {
- expectConfigurationRequests( 7 );
- archivaConfigurationControl.replay();
-
- // Prepare Test.
- action.setSource( TEST_SOURCE_ID );
- action.setTarget( TEST_TARGET_ID );
- action.prepare();
- ProxyConnector connector = action.getConnector();
- assertInitialProxyConnector( connector );
-
- // Add some arbitrary blacklist patterns.
- connector.addBlackListPattern( "**/*-javadoc.jar" );
- connector.addBlackListPattern( "**/*.war" );
-
- // Perform Test w/no pattern value.
- preRequest( action );
- String status = action.removeBlackListPattern();
- assertEquals( Action.INPUT, status );
-
- // Should have returned an error, with no blacklist pattern removed.
- assertHasErrors( action );
- assertEquals( 2, connector.getBlackListPatterns().size() );
-
- // Perform test w/invalid (non-existant) pattern value to remove.
- preRequest( action );
- action.setPattern( "**/*oops*" );
- status = action.removeBlackListPattern();
- assertEquals( Action.INPUT, status );
-
- // Should have returned an error, with no blacklist pattern removed.
- assertHasErrors( action );
- assertEquals( 2, connector.getBlackListPatterns().size() );
-
- // Try again, but now with a valid pattern to remove.
- action.setPattern( "**/*-javadoc.jar" );
- preRequest( action );
- status = action.removeBlackListPattern();
- assertEquals( Action.INPUT, status );
-
- // Should have no error, and 1 blacklist pattern left.
- assertNoErrors( action );
- assertEquals( 1, connector.getBlackListPatterns().size() );
- assertEquals( "Should have left 1 blacklist pattern", "**/*.war", connector.getBlackListPatterns().get( 0 ) );
- }
-
- @Test
- public void testRemoveProperty()
- throws Exception
- {
- expectConfigurationRequests( 7 );
- archivaConfigurationControl.replay();
-
- // Prepare Test.
- action.setSource( TEST_SOURCE_ID );
- action.setTarget( TEST_TARGET_ID );
- action.prepare();
- ProxyConnector connector = action.getConnector();
- assertInitialProxyConnector( connector );
-
- // Add some arbitrary properties.
- connector.addProperty( "username", "general-tso" );
- connector.addProperty( "password", "chicken" );
-
- // Perform Test w/no property key.
- preRequest( action );
- String status = action.removeProperty();
- assertEquals( Action.INPUT, status );
-
- // Should have returned an error, with no properties removed.
- assertHasErrors( action );
- assertEquals( 2, connector.getProperties().size() );
-
- // Perform test w/invalid (non-existant) property key to remove.
- preRequest( action );
- action.setPropertyKey( "slurm" );
- status = action.removeProperty();
- assertEquals( Action.INPUT, status );
-
- // Should have returned an error, with no properties removed.
- assertHasErrors( action );
- assertEquals( 2, connector.getProperties().size() );
-
- // Try again, but now with a valid property to remove.
- preRequest( action );
- action.setPropertyKey( "password" );
- status = action.removeProperty();
- assertEquals( Action.INPUT, status );
-
- // Should have no error, and 1 property left.
- assertNoErrors( action );
- assertEquals( 1, connector.getProperties().size() );
- assertEquals( "Should have left 1 property", "general-tso", connector.getProperties().get( "username" ) );
- }
-
- @Test
- public void testRemoveWhiteListPattern()
- throws Exception
- {
- expectConfigurationRequests( 7 );
- archivaConfigurationControl.replay();
-
- // Prepare Test.
- action.setSource( TEST_SOURCE_ID );
- action.setTarget( TEST_TARGET_ID );
- action.prepare();
- ProxyConnector connector = action.getConnector();
- assertInitialProxyConnector( connector );
-
- // Add some arbitrary whitelist patterns.
- connector.addWhiteListPattern( "javax/**/*" );
- connector.addWhiteListPattern( "com/sun/**/*" );
-
- // Perform Test w/no pattern value.
- preRequest( action );
- String status = action.removeWhiteListPattern();
- assertEquals( Action.INPUT, status );
-
- // Should have returned an error, with no whitelist pattern removed.
- assertHasErrors( action );
- assertEquals( 2, connector.getWhiteListPatterns().size() );
-
- // Perform test w/invalid (non-existant) pattern value to remove.
- preRequest( action );
- action.setPattern( "**/*oops*" );
- status = action.removeWhiteListPattern();
- assertEquals( Action.INPUT, status );
-
- // Should have returned an error, with no whitelist pattern removed.
- assertHasErrors( action );
- assertEquals( 2, connector.getWhiteListPatterns().size() );
-
- // Try again, but now with a valid pattern to remove.
- action.setPattern( "com/sun/**/*" );
- preRequest( action );
- status = action.removeWhiteListPattern();
- assertEquals( Action.INPUT, status );
-
- // Should have no error, and 1 whitelist pattern left.
- assertNoErrors( action );
- assertEquals( 1, connector.getWhiteListPatterns().size() );
- assertEquals( "Should have left 1 whitelist pattern", "javax/**/*", connector.getWhiteListPatterns().get( 0 ) );
- }
-
- @Test
- public void testSecureActionBundle()
- throws Exception
- {
- /* Configuration will be requested at least 3 times. */
- archivaConfiguration.getConfiguration();
- archivaConfigurationControl.setReturnValue( new Configuration(), 3 );
- archivaConfigurationControl.replay();
-
- action.prepare();
- SecureActionBundle bundle = action.getSecureActionBundle();
- assertTrue( bundle.requiresAuthentication() );
- assertEquals( 1, bundle.getAuthorizationTuples().size() );
- }
-
- private void assertInitialProxyConnector( ProxyConnector connector )
- {
- assertNotNull( connector );
- assertNotNull( connector.getBlackListPatterns() );
- assertNotNull( connector.getWhiteListPatterns() );
- assertNotNull( connector.getProperties() );
-
- assertEquals( TEST_SOURCE_ID, connector.getSourceRepoId() );
- assertEquals( TEST_TARGET_ID, connector.getTargetRepoId() );
- }
-
- @SuppressWarnings( "unchecked" )
- private Configuration createInitialConfiguration()
- {
- Configuration config = new Configuration();
-
- ManagedRepositoryConfiguration managedRepo = new ManagedRepositoryConfiguration();
- managedRepo.setId( TEST_SOURCE_ID );
- managedRepo.setLayout( "${java.io.tmpdir}/archiva-test/managed-repo" );
- managedRepo.setReleases( true );
-
- config.addManagedRepository( managedRepo );
-
- RemoteRepositoryConfiguration remoteRepo = new RemoteRepositoryConfiguration();
- remoteRepo.setId( TEST_TARGET_ID );
- remoteRepo.setUrl( "http://repo1.maven.org/maven2/" );
-
- config.addRemoteRepository( remoteRepo );
-
- ProxyConnectorConfiguration connector = new ProxyConnectorConfiguration();
- connector.setSourceRepoId( TEST_SOURCE_ID );
- connector.setTargetRepoId( TEST_TARGET_ID );
-
- // TODO: Set these options programatically via list of available policies.
- Map<String, String> policies = connector.getPolicies();
- policies.put( "releases", new ReleasesPolicy().getDefaultOption() );
- policies.put( "snapshots", new SnapshotsPolicy().getDefaultOption() );
- policies.put( "checksum", new ChecksumPolicy().getDefaultOption() );
- policies.put( "cache-failures", new CachedFailuresPolicy().getDefaultOption() );
- policies.put( "propagate-errors", new PropagateErrorsDownloadPolicy().getDefaultOption() );
- policies.put( "propagate-errors-on-update", new PropagateErrorsOnUpdateDownloadPolicy().getDefaultOption() );
-
- config.addProxyConnector( connector );
-
- return config;
- }
-}
+++ /dev/null
-/*
- * Copyright 2008 jdumay.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * under the License.
- */
-
-package org.apache.archiva.web.action.admin.connectors.proxy;
-
-import com.opensymphony.xwork2.Action;
-import org.apache.archiva.admin.repository.managed.DefaultManagedRepositoryAdmin;
-import org.apache.archiva.admin.repository.proxyconnector.DefaultProxyConnectorAdmin;
-import org.apache.archiva.admin.repository.remote.DefaultRemoteRepositoryAdmin;
-import org.apache.archiva.configuration.ArchivaConfiguration;
-import org.apache.archiva.configuration.Configuration;
-import org.apache.archiva.configuration.IndeterminateConfigurationException;
-import org.apache.archiva.configuration.ManagedRepositoryConfiguration;
-import org.apache.archiva.configuration.ProxyConnectorConfiguration;
-import org.apache.archiva.configuration.RemoteRepositoryConfiguration;
-import org.apache.archiva.web.action.AbstractWebworkTestCase;
-import org.apache.archiva.redback.integration.interceptor.SecureActionBundle;
-import org.easymock.MockControl;
-import org.junit.Before;
-import org.junit.Test;
-
-public class EnableProxyConnectorActionTest
- extends AbstractWebworkTestCase
-{
- private static final String TEST_TARGET_ID = "central";
-
- private static final String TEST_SOURCE_ID = "corporate";
-
- private EnableProxyConnectorAction action;
-
- private MockControl archivaConfigurationControl;
-
- private ArchivaConfiguration archivaConfiguration;
-
- @Override
- @Before
- public void setUp()
- throws Exception
- {
- super.setUp();
- action = (EnableProxyConnectorAction) getActionProxy( "/admin/enableProxyConnector.action" ).getAction();
- archivaConfigurationControl = MockControl.createControl( ArchivaConfiguration.class );
- archivaConfiguration = (ArchivaConfiguration) archivaConfigurationControl.getMock();
- ( (DefaultManagedRepositoryAdmin) action.getManagedRepositoryAdmin() ).setArchivaConfiguration(
- archivaConfiguration );
- ( (DefaultRemoteRepositoryAdmin) action.getRemoteRepositoryAdmin() ).setArchivaConfiguration(
- archivaConfiguration );
- ( (DefaultProxyConnectorAdmin) action.getProxyConnectorAdmin() ).setArchivaConfiguration( archivaConfiguration );
- }
-
- private void expectConfigurationRequests( int requestConfigCount )
- throws org.apache.archiva.redback.components.registry.RegistryException, IndeterminateConfigurationException
- {
- Configuration config = createInitialConfiguration();
-
- archivaConfiguration.getConfiguration();
- archivaConfigurationControl.setReturnValue( config, requestConfigCount );
- archivaConfiguration.save( config );
- }
-
- @Test
- public void testConfirmDeleteBadSourceOrTarget()
- throws Exception
- {
- expectConfigurationRequests( 4 );
- archivaConfigurationControl.replay();
-
- // Attempt to show the confirm enable screen, but provide
- // a bad source id or target id to actually enable
-
- preRequest( action );
- action.setSource( "bad-source" ); // id doesn't exist.
- action.setTarget( "bad-target" ); // id doesn't exist.
- String status = action.confirmEnable();
- // Should have resulted in an error.
- assertEquals( Action.ERROR, status );
- assertHasErrors( action );
-
- preRequest( action );
- action.setSource( "bad" ); // Bad doesn't exist.
- action.setTarget( TEST_TARGET_ID );
- status = action.confirmEnable();
- // Should have resulted in an error.
- assertEquals( Action.ERROR, status );
- assertHasErrors( action );
-
- preRequest( action );
- action.setSource( TEST_SOURCE_ID );
- action.setTarget( "bad" ); // Bad doesn't exist.
- status = action.confirmEnable();
- // Should have resulted in an error.
- assertEquals( Action.ERROR, status );
- assertHasErrors( action );
- }
-
- @Test
- public void testConfirmEnableNoSourceOrTarget()
- throws Exception
- {
- expectConfigurationRequests( 1 );
- archivaConfigurationControl.replay();
-
- // Attempt to show the confirm enable screen, but don't provide
- // the source id or target id to actually delete
-
- preRequest( action );
- action.setSource( null ); // No source Id.
- action.setTarget( null ); // No target Id.
- String status = action.confirmEnable();
- // Should have resulted in an error.
- assertEquals( Action.ERROR, status );
- assertHasErrors( action );
-
- preRequest( action );
- action.setSource( TEST_SOURCE_ID );
- action.setTarget( null ); // No target Id.
- status = action.confirmEnable();
- // Should have resulted in an error.
- assertEquals( Action.ERROR, status );
- assertHasErrors( action );
-
- preRequest( action );
- action.setSource( null ); // No source Id.
- action.setTarget( TEST_TARGET_ID );
- status = action.confirmEnable();
- // Should have resulted in an error.
- assertEquals( Action.ERROR, status );
- assertHasErrors( action );
- }
-
- @Test
- public void testEnable()
- throws Exception
- {
- expectConfigurationRequests( 5 );
- archivaConfigurationControl.replay();
-
- // Show the confirm the enable of proxy connector screen.
- preRequest( action );
- action.setSource( TEST_SOURCE_ID );
- action.setTarget( TEST_TARGET_ID );
- String status = action.confirmEnable();
- assertEquals( Action.INPUT, status );
- assertNoErrors( action );
-
- // Perform the delete.
- preRequest( action );
- status = action.enable();
- assertEquals( Action.SUCCESS, status );
- assertNoErrors( action );
- assertHasMessages( action );
-
- // Test the configuration.
- assertEquals( 1, archivaConfiguration.getConfiguration().getProxyConnectors().size() );
- ProxyConnectorConfiguration config =
- (ProxyConnectorConfiguration) archivaConfiguration.getConfiguration().getProxyConnectors().get( 0 );
- assertFalse( config.isDisabled() );
- }
-
- @Test
- public void testSecureActionBundle()
- throws Exception
- {
- expectConfigurationRequests( 1 );
- archivaConfigurationControl.replay();
-
- SecureActionBundle bundle = action.getSecureActionBundle();
- assertTrue( bundle.requiresAuthentication() );
- assertEquals( 1, bundle.getAuthorizationTuples().size() );
- }
-
- @Test
- public void testConfirmEnable()
- throws Exception
- {
- expectConfigurationRequests( 1 );
- archivaConfigurationControl.replay();
-
- // Show the confirm the enable of proxy connector screen.
- preRequest( action );
- action.setSource( TEST_SOURCE_ID );
- action.setTarget( TEST_TARGET_ID );
- String status = action.confirmEnable();
- assertEquals( Action.INPUT, status );
- assertNoErrors( action );
- }
-
- private Configuration createInitialConfiguration()
- {
- Configuration config = new Configuration();
-
- ManagedRepositoryConfiguration managedRepo = new ManagedRepositoryConfiguration();
- managedRepo.setId( TEST_SOURCE_ID );
- managedRepo.setLayout( "${java.io.tmpdir}/archiva-test/managed-repo" );
- managedRepo.setReleases( true );
-
- config.addManagedRepository( managedRepo );
-
- RemoteRepositoryConfiguration remoteRepo = new RemoteRepositoryConfiguration();
- remoteRepo.setId( TEST_TARGET_ID );
- remoteRepo.setUrl( "http://repo1.maven.org/maven2/" );
-
- config.addRemoteRepository( remoteRepo );
-
- ProxyConnectorConfiguration connector = new ProxyConnectorConfiguration();
- connector.setSourceRepoId( TEST_SOURCE_ID );
- connector.setTargetRepoId( TEST_TARGET_ID );
- connector.setDisabled( true );
-
- config.addProxyConnector( connector );
-
- return config;
- }
-}
+++ /dev/null
-package org.apache.archiva.web.action.admin.connectors.proxy;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import com.opensymphony.xwork2.Action;
-import org.apache.archiva.admin.repository.managed.DefaultManagedRepositoryAdmin;
-import org.apache.archiva.admin.repository.proxyconnector.DefaultProxyConnectorAdmin;
-import org.apache.archiva.admin.repository.remote.DefaultRemoteRepositoryAdmin;
-import org.apache.archiva.configuration.ArchivaConfiguration;
-import org.apache.archiva.configuration.Configuration;
-import org.apache.archiva.configuration.IndeterminateConfigurationException;
-import org.apache.archiva.configuration.ManagedRepositoryConfiguration;
-import org.apache.archiva.configuration.ProxyConnectorConfiguration;
-import org.apache.archiva.configuration.RemoteRepositoryConfiguration;
-import org.apache.archiva.web.action.AbstractWebworkTestCase;
-import org.apache.archiva.redback.components.registry.RegistryException;
-import org.apache.archiva.redback.integration.interceptor.SecureActionBundle;
-import org.easymock.MockControl;
-import org.junit.Before;
-import org.junit.Test;
-
-/**
- * ProxyConnectorsActionTest
- *
- *
- */
-public class ProxyConnectorsActionTest
- extends AbstractWebworkTestCase
-{
- private static final String JAVAX = "javax";
-
- private static final String CENTRAL = "central";
-
- private static final String CORPORATE = "corporate";
-
- private ProxyConnectorsAction action;
-
- private MockControl archivaConfigurationControl;
-
- private ArchivaConfiguration archivaConfiguration;
-
- @Override
- @Before
- public void setUp()
- throws Exception
- {
- super.setUp();
-
- action = (ProxyConnectorsAction) getActionProxy( "/admin/proxyConnectors.action" ).getAction();
-
- archivaConfigurationControl = MockControl.createControl( ArchivaConfiguration.class );
- archivaConfiguration = (ArchivaConfiguration) archivaConfigurationControl.getMock();
- ( (DefaultManagedRepositoryAdmin) action.getManagedRepositoryAdmin() ).setArchivaConfiguration(
- archivaConfiguration );
- ( (DefaultRemoteRepositoryAdmin) action.getRemoteRepositoryAdmin() ).setArchivaConfiguration(
- archivaConfiguration );
- ( (DefaultProxyConnectorAdmin) action.getProxyConnectorAdmin() ).setArchivaConfiguration(
- archivaConfiguration );
- }
-
- @Test
- public void testSecureActionBundle()
- throws Exception
- {
- expectConfigurationRequests( 5 );
- archivaConfigurationControl.replay();
-
- action.prepare();
- SecureActionBundle bundle = action.getSecureActionBundle();
- assertTrue( bundle.requiresAuthentication() );
- assertEquals( 1, bundle.getAuthorizationTuples().size() );
- }
-
- @Test
- public void testExecute()
- throws Exception
- {
- expectConfigurationRequests( 5 );
- archivaConfigurationControl.replay();
-
- action.prepare();
-
- String status = action.execute();
- assertEquals( Action.SUCCESS, status );
- assertNoErrors( action );
-
- assertNotNull( action.getProxyConnectorMap() );
- assertNotNull( action.getRepoMap() );
-
- assertEquals( 1, action.getProxyConnectorMap().size() );
- assertEquals( 3, action.getRepoMap().size() );
- }
-
- private void expectConfigurationRequests( int requestConfigCount )
- throws RegistryException, IndeterminateConfigurationException
- {
- Configuration config = createInitialConfiguration();
-
- archivaConfiguration.getConfiguration();
- archivaConfigurationControl.setReturnValue( config, requestConfigCount + 1 );
-
- archivaConfiguration.save( config );
- }
-
- private Configuration createInitialConfiguration()
- {
- Configuration config = new Configuration();
-
- ManagedRepositoryConfiguration managedRepo = new ManagedRepositoryConfiguration();
- managedRepo.setId( CORPORATE );
- managedRepo.setLayout( "${java.io.tmpdir}/archiva-test/managed-repo" );
- managedRepo.setReleases( true );
-
- config.addManagedRepository( managedRepo );
-
- RemoteRepositoryConfiguration remoteRepo = new RemoteRepositoryConfiguration();
- remoteRepo.setId( CENTRAL );
- remoteRepo.setUrl( "http://repo1.maven.org/maven2/" );
-
- config.addRemoteRepository( remoteRepo );
-
- remoteRepo = new RemoteRepositoryConfiguration();
- remoteRepo.setId( JAVAX );
- remoteRepo.setUrl( "http://download.java.net/maven/2/" );
-
- config.addRemoteRepository( remoteRepo );
-
- ProxyConnectorConfiguration connector = new ProxyConnectorConfiguration();
- connector.setSourceRepoId( CORPORATE );
- connector.setTargetRepoId( CENTRAL );
-
- config.addProxyConnector( connector );
-
- connector = new ProxyConnectorConfiguration();
- connector.setSourceRepoId( CORPORATE );
- connector.setTargetRepoId( JAVAX );
-
- config.addProxyConnector( connector );
-
- return config;
- }
-}
+++ /dev/null
-package org.apache.archiva.web.action.admin.connectors.proxy;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import com.opensymphony.xwork2.Action;
-import org.apache.archiva.admin.repository.managed.DefaultManagedRepositoryAdmin;
-import org.apache.archiva.admin.repository.proxyconnector.DefaultProxyConnectorAdmin;
-import org.apache.archiva.admin.repository.remote.DefaultRemoteRepositoryAdmin;
-import org.apache.commons.lang.StringUtils;
-import org.apache.archiva.configuration.ArchivaConfiguration;
-import org.apache.archiva.configuration.Configuration;
-import org.apache.archiva.configuration.IndeterminateConfigurationException;
-import org.apache.archiva.configuration.ManagedRepositoryConfiguration;
-import org.apache.archiva.configuration.ProxyConnectorConfiguration;
-import org.apache.archiva.configuration.RemoteRepositoryConfiguration;
-import org.apache.archiva.configuration.functors.ProxyConnectorConfigurationOrderComparator;
-import org.apache.archiva.web.action.AbstractWebworkTestCase;
-import org.apache.archiva.redback.components.registry.RegistryException;
-import org.apache.archiva.redback.integration.interceptor.SecureActionBundle;
-import org.easymock.MockControl;
-
-import java.util.Collections;
-import java.util.List;
-import org.junit.Before;
-import org.junit.Test;
-
-/**
- * SortProxyConnectorsActionTest
- *
- *
- */
-public class SortProxyConnectorsActionTest
- extends AbstractWebworkTestCase
-{
- private static final String JAVAX = "javax";
-
- private static final String CENTRAL = "central";
-
- private static final String CORPORATE = "corporate";
-
- private static final String CODEHAUS = "codehaus";
-
- private SortProxyConnectorsAction action;
-
- private MockControl archivaConfigurationControl;
-
- private ArchivaConfiguration archivaConfiguration;
-
- @Override
- @Before
- public void setUp()
- throws Exception
- {
- super.setUp();
-
- action = (SortProxyConnectorsAction) getActionProxy( "/admin/sortUpProxyConnector.action" ).getAction();
-
- archivaConfigurationControl = MockControl.createControl( ArchivaConfiguration.class );
- archivaConfiguration = (ArchivaConfiguration) archivaConfigurationControl.getMock();
- ( (DefaultManagedRepositoryAdmin) action.getManagedRepositoryAdmin() ).setArchivaConfiguration(
- archivaConfiguration );
- ( (DefaultRemoteRepositoryAdmin) action.getRemoteRepositoryAdmin() ).setArchivaConfiguration(
- archivaConfiguration );
- ( (DefaultProxyConnectorAdmin) action.getProxyConnectorAdmin() ).setArchivaConfiguration(
- archivaConfiguration );
- }
-
- private void expectConfigurationRequests( int requestConfigCount )
- throws RegistryException, IndeterminateConfigurationException
- {
- Configuration config = createInitialConfiguration();
-
- archivaConfiguration.getConfiguration();
- archivaConfigurationControl.setReturnValue( config, requestConfigCount );
-
- archivaConfiguration.save( config );
- }
-
- @Test
- public void testSecureActionBundle()
- throws Exception
- {
- expectConfigurationRequests( 1 );
- archivaConfigurationControl.replay();
-
- SecureActionBundle bundle = action.getSecureActionBundle();
- assertTrue( bundle.requiresAuthentication() );
- assertEquals( 1, bundle.getAuthorizationTuples().size() );
- }
-
- @Test
- public void testSortDown()
- throws Exception
- {
- expectConfigurationRequests( 7 );
- archivaConfigurationControl.replay();
-
- action.setSource( CORPORATE );
- action.setTarget( CENTRAL );
- String status = action.sortDown();
- assertEquals( Action.SUCCESS, status );
-
- assertOrder( new String[]{ JAVAX, CENTRAL, CODEHAUS } );
- }
-
- @Test
- public void testSortDownPastEnd()
- throws Exception
- {
- expectConfigurationRequests( 7 );
- archivaConfigurationControl.replay();
-
- // Ask the last connector to sort down (essentially a no-op)
- action.setSource( CORPORATE );
- action.setTarget( CODEHAUS );
- String status = action.sortDown();
- assertEquals( Action.SUCCESS, status );
-
- // No order change.
- assertOrder( new String[]{ CENTRAL, JAVAX, CODEHAUS } );
- }
-
- @Test
- public void testSortUp()
- throws Exception
- {
- expectConfigurationRequests( 7 );
- archivaConfigurationControl.replay();
-
- action.setSource( CORPORATE );
- action.setTarget( CODEHAUS );
- String status = action.sortUp();
- assertEquals( Action.SUCCESS, status );
-
- assertOrder( new String[]{ CENTRAL, CODEHAUS, JAVAX } );
- }
-
- @Test
- public void testSortUpPastBeginning()
- throws Exception
- {
- expectConfigurationRequests( 7 );
- archivaConfigurationControl.replay();
-
- // Ask the first connector to sort up (essentially a no-op)
- action.setSource( CORPORATE );
- action.setTarget( CENTRAL );
- String status = action.sortUp();
- assertEquals( Action.SUCCESS, status );
-
- // No order change.
- assertOrder( new String[]{ CENTRAL, JAVAX, CODEHAUS } );
- }
-
- private void assertOrder( String[] targetRepoOrder )
- {
- List<ProxyConnectorConfiguration> connectors = archivaConfiguration.getConfiguration().getProxyConnectors();
- Collections.sort( connectors, ProxyConnectorConfigurationOrderComparator.getInstance() );
-
- for ( ProxyConnectorConfiguration connector : connectors )
- {
- assertEquals( "All connectors in list should have the same source id (in this test)", CORPORATE,
- connector.getSourceRepoId() );
- }
-
- assertEquals( targetRepoOrder.length, connectors.size() );
-
- int orderFailedAt = ( -1 );
- for ( int i = 0; i < targetRepoOrder.length; i++ )
- {
- if ( !StringUtils.equals( targetRepoOrder[i], connectors.get( i ).getTargetRepoId() ) )
- {
- orderFailedAt = i;
- break;
- }
- }
-
- if ( orderFailedAt >= 0 )
- {
- StringBuilder msg = new StringBuilder();
-
- msg.append( "Failed expected order of the proxy connectors <" );
- msg.append( StringUtils.join( targetRepoOrder, ", " ) );
- msg.append( ">, actual <" );
-
- boolean needsComma = false;
- for ( ProxyConnectorConfiguration proxy : connectors )
- {
- if ( needsComma )
- {
- msg.append( ", " );
- }
- msg.append( proxy.getTargetRepoId() );
- needsComma = true;
- }
- msg.append( "> failure at index <" ).append( orderFailedAt ).append( ">." );
-
- fail( msg.toString() );
- }
- }
-
- private Configuration createInitialConfiguration()
- {
- Configuration config = new Configuration();
-
- ManagedRepositoryConfiguration managedRepo = new ManagedRepositoryConfiguration();
- managedRepo.setId( CORPORATE );
- managedRepo.setLayout( "${java.io.tmpdir}/archiva-test/managed-repo" );
- managedRepo.setReleases( true );
- config.addManagedRepository( managedRepo );
-
- RemoteRepositoryConfiguration remoteRepo = new RemoteRepositoryConfiguration();
- remoteRepo.setId( CENTRAL );
- remoteRepo.setUrl( "http://repo1.maven.org/maven2/" );
- config.addRemoteRepository( remoteRepo );
-
- remoteRepo = new RemoteRepositoryConfiguration();
- remoteRepo.setId( JAVAX );
- remoteRepo.setUrl( "http://download.java.net/maven/2/" );
- config.addRemoteRepository( remoteRepo );
-
- remoteRepo = new RemoteRepositoryConfiguration();
- remoteRepo.setId( CODEHAUS );
- remoteRepo.setUrl( "http://repository.codehaus.org/" );
- config.addRemoteRepository( remoteRepo );
-
- ProxyConnectorConfiguration connector = new ProxyConnectorConfiguration();
- connector.setSourceRepoId( CORPORATE );
- connector.setTargetRepoId( CENTRAL );
- connector.setOrder( 1 );
- config.addProxyConnector( connector );
-
- connector = new ProxyConnectorConfiguration();
- connector.setSourceRepoId( CORPORATE );
- connector.setTargetRepoId( JAVAX );
- connector.setOrder( 2 );
- config.addProxyConnector( connector );
-
- connector = new ProxyConnectorConfiguration();
- connector.setSourceRepoId( CORPORATE );
- connector.setTargetRepoId( CODEHAUS );
- connector.setOrder( 3 );
- config.addProxyConnector( connector );
-
- return config;
- }
-}
+++ /dev/null
-package org.apache.archiva.web.action.admin.legacy;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import com.opensymphony.xwork2.validator.ActionValidatorManager;
-import junit.framework.TestCase;
-import org.apache.archiva.admin.model.beans.LegacyArtifactPath;
-import org.apache.archiva.web.validator.utils.ValidatorUtil;
-import org.apache.archiva.web.action.admin.repositories.DefaultActionValidatorManagerFactory;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import org.apache.archiva.test.utils.ArchivaBlockJUnit4ClassRunner;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-@RunWith( ArchivaBlockJUnit4ClassRunner.class )
-public class AddLegacyArtifactPathActionTest
- extends TestCase
-{
- private static final String EMPTY_STRING = "";
-
- // valid inputs
- private static final String LEGACY_ARTIFACT_PATH_PATH_VALID_INPUT = "-abcXYZ0129._/\\";
-
- private static final String GROUP_ID_VALID_INPUT = "abcXYZ0129._-";
-
- private static final String ARTIFACT_ID_VALID_INPUT = "abcXYZ0129._-";
-
- private static final String VERSION_VALID_INPUT = "abcXYZ0129._-";
-
- private static final String CLASSIFIER_VALID_INPUT = "abcXYZ0129._-";
-
- private static final String TYPE_VALID_INPUT = "abcXYZ0129._-";
-
- // invalid inputs
- private static final String LEGACY_ARTIFACT_PATH_PATH_INVALID_INPUT = "<> ~+[ ]'\"";
-
- private static final String GROUP_ID_INVALID_INPUT = "<> \\/~+[ ]'\"";
-
- private static final String ARTIFACT_ID_INVALID_INPUT = "<> \\/~+[ ]'\"";
-
- private static final String VERSION_INVALID_INPUT = "<> \\/~+[ ]'\"";
-
- private static final String CLASSIFIER_INVALID_INPUT = "<> \\/~+[ ]'\"";
-
- private static final String TYPE_INVALID_INPUT = "<> \\/~+[ ]'\"";
-
- // testing requisite
- private AddLegacyArtifactPathAction addLegacyArtifactPathAction;
-
- private ActionValidatorManager actionValidatorManager;
-
- @Override
- @Before
- public void setUp()
- throws Exception
- {
- addLegacyArtifactPathAction = new AddLegacyArtifactPathAction();
-
- DefaultActionValidatorManagerFactory factory = new DefaultActionValidatorManagerFactory();
-
- actionValidatorManager = factory.createDefaultActionValidatorManager();
- }
-
- @Test
- public void testStruts2ValidationFrameworkWithNullInputs()
- throws Exception
- {
- // prep
- LegacyArtifactPath legacyArtifactPath = createLegacyArtifactPath( null );
- populateAddLegacyArtifactPathActionFields( addLegacyArtifactPathAction, legacyArtifactPath, null, null, null,
- null, null );
-
- // test
- actionValidatorManager.validate( addLegacyArtifactPathAction, EMPTY_STRING );
-
- // verify
- assertTrue( addLegacyArtifactPathAction.hasFieldErrors() );
-
- Map<String, List<String>> fieldErrors = addLegacyArtifactPathAction.getFieldErrors();
-
- // make an expected field error object
- Map<String, List<String>> expectedFieldErrors = new HashMap<String, List<String>>();
-
- // populate
- List<String> expectedErrorMessages = new ArrayList<String>();
- expectedErrorMessages.add( "You must enter a legacy path." );
- expectedFieldErrors.put( "legacyArtifactPath.path", expectedErrorMessages );
-
- expectedErrorMessages = new ArrayList<String>();
- expectedErrorMessages.add( "You must enter a groupId." );
- expectedFieldErrors.put( "groupId", expectedErrorMessages );
-
- expectedErrorMessages = new ArrayList<String>();
- expectedErrorMessages.add( "You must enter an artifactId." );
- expectedFieldErrors.put( "artifactId", expectedErrorMessages );
-
- expectedErrorMessages = new ArrayList<String>();
- expectedErrorMessages.add( "You must enter a version." );
- expectedFieldErrors.put( "version", expectedErrorMessages );
-
- expectedErrorMessages = new ArrayList<String>();
- expectedErrorMessages.add( "You must enter a type." );
- expectedFieldErrors.put( "type", expectedErrorMessages );
-
- ValidatorUtil.assertFieldErrors( expectedFieldErrors, fieldErrors );
- }
-
- @Test
- public void testStruts2ValidationFrameworkWithBlankInputs()
- throws Exception
- {
- // prep
- LegacyArtifactPath legacyArtifactPath = createLegacyArtifactPath( EMPTY_STRING );
- populateAddLegacyArtifactPathActionFields( addLegacyArtifactPathAction, legacyArtifactPath, EMPTY_STRING,
- EMPTY_STRING, EMPTY_STRING, EMPTY_STRING, EMPTY_STRING );
-
- // test
- actionValidatorManager.validate( addLegacyArtifactPathAction, EMPTY_STRING );
-
- // verify
- assertTrue( addLegacyArtifactPathAction.hasFieldErrors() );
-
- Map<String, List<String>> fieldErrors = addLegacyArtifactPathAction.getFieldErrors();
-
- // make an expected field error object
- Map<String, List<String>> expectedFieldErrors = new HashMap<String, List<String>>();
-
- // populate
- List<String> expectedErrorMessages = new ArrayList<String>();
- expectedErrorMessages.add( "You must enter a legacy path." );
- expectedFieldErrors.put( "legacyArtifactPath.path", expectedErrorMessages );
-
- expectedErrorMessages = new ArrayList<String>();
- expectedErrorMessages.add( "You must enter a groupId." );
- expectedFieldErrors.put( "groupId", expectedErrorMessages );
-
- expectedErrorMessages = new ArrayList<String>();
- expectedErrorMessages.add( "You must enter an artifactId." );
- expectedFieldErrors.put( "artifactId", expectedErrorMessages );
-
- expectedErrorMessages = new ArrayList<String>();
- expectedErrorMessages.add( "You must enter a version." );
- expectedFieldErrors.put( "version", expectedErrorMessages );
-
- expectedErrorMessages = new ArrayList<String>();
- expectedErrorMessages.add( "You must enter a type." );
- expectedFieldErrors.put( "type", expectedErrorMessages );
-
- ValidatorUtil.assertFieldErrors( expectedFieldErrors, fieldErrors );
- }
-
- @Test
- public void testStruts2ValidationFrameworkWithInvalidInputs()
- throws Exception
- {
- // prep
- LegacyArtifactPath legacyArtifactPath = createLegacyArtifactPath( LEGACY_ARTIFACT_PATH_PATH_INVALID_INPUT );
- populateAddLegacyArtifactPathActionFields( addLegacyArtifactPathAction, legacyArtifactPath,
- GROUP_ID_INVALID_INPUT, ARTIFACT_ID_INVALID_INPUT,
- VERSION_INVALID_INPUT, CLASSIFIER_INVALID_INPUT,
- TYPE_INVALID_INPUT );
-
- // test
- actionValidatorManager.validate( addLegacyArtifactPathAction, EMPTY_STRING );
-
- // verify
- assertTrue( addLegacyArtifactPathAction.hasFieldErrors() );
-
- Map<String, List<String>> fieldErrors = addLegacyArtifactPathAction.getFieldErrors();
-
- // make an expected field error object
- Map<String, List<String>> expectedFieldErrors = new HashMap<String, List<String>>();
-
- // populate
- List<String> expectedErrorMessages = new ArrayList<String>();
- expectedErrorMessages.add(
- "Legacy path must only contain alphanumeric characters, forward-slashes(/), back-slashes(\\), underscores(_), dots(.), and dashes(-)." );
- expectedFieldErrors.put( "legacyArtifactPath.path", expectedErrorMessages );
-
- expectedErrorMessages = new ArrayList<String>();
- expectedErrorMessages.add(
- "Group id must only contain alphanumeric characters, underscores(_), dots(.), and dashes(-)." );
- expectedFieldErrors.put( "groupId", expectedErrorMessages );
-
- expectedErrorMessages = new ArrayList<String>();
- expectedErrorMessages.add(
- "Artifact id must only contain alphanumeric characters, underscores(_), dots(.), and dashes(-)." );
- expectedFieldErrors.put( "artifactId", expectedErrorMessages );
-
- expectedErrorMessages = new ArrayList<String>();
- expectedErrorMessages.add(
- "Version must only contain alphanumeric characters, underscores(_), dots(.), and dashes(-)." );
- expectedFieldErrors.put( "version", expectedErrorMessages );
-
- expectedErrorMessages = new ArrayList<String>();
- expectedErrorMessages.add(
- "Classifier must only contain alphanumeric characters, underscores(_), dots(.), and dashes(-)." );
- expectedFieldErrors.put( "classifier", expectedErrorMessages );
-
- expectedErrorMessages = new ArrayList<String>();
- expectedErrorMessages.add(
- "Type must only contain alphanumeric characters, underscores(_), dots(.), and dashes(-)." );
- expectedFieldErrors.put( "type", expectedErrorMessages );
-
- ValidatorUtil.assertFieldErrors( expectedFieldErrors, fieldErrors );
- }
-
- @Test
- public void testStruts2ValidationFrameworkWithValidInputs()
- throws Exception
- {
- // prep
- LegacyArtifactPath legacyArtifactPath = createLegacyArtifactPath( LEGACY_ARTIFACT_PATH_PATH_VALID_INPUT );
- populateAddLegacyArtifactPathActionFields( addLegacyArtifactPathAction, legacyArtifactPath,
- GROUP_ID_VALID_INPUT, ARTIFACT_ID_VALID_INPUT, VERSION_VALID_INPUT,
- CLASSIFIER_VALID_INPUT, TYPE_VALID_INPUT );
-
- // test
- actionValidatorManager.validate( addLegacyArtifactPathAction, EMPTY_STRING );
-
- // verify
- assertFalse( addLegacyArtifactPathAction.hasFieldErrors() );
- }
-
- private LegacyArtifactPath createLegacyArtifactPath( String path )
- {
- LegacyArtifactPath legacyArtifactPath = new LegacyArtifactPath();
- legacyArtifactPath.setPath( path );
- return legacyArtifactPath;
- }
-
- private void populateAddLegacyArtifactPathActionFields( AddLegacyArtifactPathAction addLegacyArtifactPathAction,
- LegacyArtifactPath legacyArtifactPath, String groupId,
- String artifactId, String version, String classifier,
- String type )
- {
- addLegacyArtifactPathAction.setLegacyArtifactPath( legacyArtifactPath );
- addLegacyArtifactPathAction.setGroupId( groupId );
- addLegacyArtifactPathAction.setArtifactId( artifactId );
- addLegacyArtifactPathAction.setVersion( version );
- addLegacyArtifactPathAction.setClassifier( classifier );
- addLegacyArtifactPathAction.setType( type );
- }
-}
+++ /dev/null
-package org.apache.archiva.web.action.admin.networkproxies;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import com.opensymphony.xwork2.validator.ActionValidatorManager;
-import junit.framework.TestCase;
-import org.apache.archiva.admin.model.beans.NetworkProxy;
-import org.apache.archiva.web.validator.utils.ValidatorUtil;
-import org.apache.archiva.web.action.admin.repositories.DefaultActionValidatorManagerFactory;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import org.apache.archiva.test.utils.ArchivaBlockJUnit4ClassRunner;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-@RunWith( ArchivaBlockJUnit4ClassRunner.class )
-public class ConfigureNetworkProxyActionTest extends TestCase
-{
- private static final String EMPTY_STRING = "";
-
- private static final String VALIDATION_CONTEXT = "saveNetworkProxy";
-
- // valid inputs
- private static final String PROXY_ID_VALID_INPUT = "abcXYZ0129._-";
-
- private static final String PROXY_PROTOCOL_VALID_INPUT = "-abcXYZ0129./:\\";
-
- private static final String PROXY_HOST_VALID_INPUT = "abcXYZ0129._/\\~:?!&=-";
-
- private static final int PROXY_PORT_VALID_INPUT = 8080;
-
- private static final String PROXY_USERNAME_VALID_INPUT = "abcXYZ0129.@/_-\\";
-
- // invalid inputs
- private static final String PROXY_ID_INVALID_INPUT = "<> \\/~+[ ]'\"";
-
- private static final String PROXY_PROTOCOL_INVALID_INPUT = "<> ~+[ ]'\"";
-
- private static final String PROXY_HOST_INVALID_INPUT = "<> ~+[ ]'\"";
-
- private static final int PROXY_PORT_INVALID_INPUT = 0;
-
- private static final String PROXY_USERNAME_INVALID_INPUT = "<> ~+[ ]'\"";
-
- // testing requisite
- private ConfigureNetworkProxyAction configureNetworkProxyAction;
-
- private ActionValidatorManager actionValidatorManager;
-
- @Override
- @Before
- public void setUp()
- throws Exception
- {
- configureNetworkProxyAction = new ConfigureNetworkProxyAction();
-
- DefaultActionValidatorManagerFactory factory = new DefaultActionValidatorManagerFactory();
-
- actionValidatorManager = factory.createDefaultActionValidatorManager();
- }
-
- @Test
- public void testStruts2ValidationFrameworkWithNullInputs() throws Exception
- {
- // prep
- NetworkProxy networkProxy = createNetworkProxy(null, null, null, null);
- configureNetworkProxyAction.setProxy(networkProxy);
-
- // test
- actionValidatorManager.validate(configureNetworkProxyAction, VALIDATION_CONTEXT);
-
- // verify
- assertTrue(configureNetworkProxyAction.hasFieldErrors());
-
- Map<String, List<String>> fieldErrors = configureNetworkProxyAction.getFieldErrors();
-
- // make an expected field error object
- Map<String, List<String>> expectedFieldErrors = new HashMap<String, List<String>>();
-
- // populate
- List<String> expectedErrorMessages = new ArrayList<String>();
- expectedErrorMessages.add("You must enter an identifier.");
- expectedFieldErrors.put("proxy.id", expectedErrorMessages);
-
- expectedErrorMessages = new ArrayList<String>();
- expectedErrorMessages.add("You must enter a protocol.");
- expectedFieldErrors.put("proxy.protocol", expectedErrorMessages);
-
- expectedErrorMessages = new ArrayList<String>();
- expectedErrorMessages.add("You must enter a host.");
- expectedFieldErrors.put("proxy.host", expectedErrorMessages);
-
- ValidatorUtil.assertFieldErrors(expectedFieldErrors, fieldErrors);
- }
-
- @Test
- public void testStruts2ValidationFrameworkWithBlankInputs() throws Exception
- {
- // prep
- NetworkProxy networkProxy = createNetworkProxy(EMPTY_STRING, EMPTY_STRING, EMPTY_STRING, EMPTY_STRING);
- configureNetworkProxyAction.setProxy(networkProxy);
-
- // test
- actionValidatorManager.validate(configureNetworkProxyAction, VALIDATION_CONTEXT);
-
- // verify
- assertTrue(configureNetworkProxyAction.hasFieldErrors());
-
- Map<String, List<String>> fieldErrors = configureNetworkProxyAction.getFieldErrors();
-
- // make an expected field error object
- Map<String, List<String>> expectedFieldErrors = new HashMap<String, List<String>>();
-
- // populate
- List<String> expectedErrorMessages = new ArrayList<String>();
- expectedErrorMessages.add("You must enter an identifier.");
- expectedFieldErrors.put("proxy.id", expectedErrorMessages);
-
- expectedErrorMessages = new ArrayList<String>();
- expectedErrorMessages.add("You must enter a protocol.");
- expectedFieldErrors.put("proxy.protocol", expectedErrorMessages);
-
- expectedErrorMessages = new ArrayList<String>();
- expectedErrorMessages.add("You must enter a host.");
- expectedFieldErrors.put("proxy.host", expectedErrorMessages);
-
- ValidatorUtil.assertFieldErrors(expectedFieldErrors, fieldErrors);
- }
-
- @Test
- public void testStruts2ValidationFrameworkWithInvalidInputs() throws Exception
- {
- // prep
- NetworkProxy networkProxy = createNetworkProxy( PROXY_ID_INVALID_INPUT, PROXY_HOST_INVALID_INPUT,
- PROXY_PORT_INVALID_INPUT, PROXY_PROTOCOL_INVALID_INPUT,
- PROXY_USERNAME_INVALID_INPUT );
- configureNetworkProxyAction.setProxy(networkProxy);
-
- // test
- actionValidatorManager.validate(configureNetworkProxyAction, VALIDATION_CONTEXT);
-
- // verify
- assertTrue(configureNetworkProxyAction.hasFieldErrors());
-
- Map<String, List<String>> fieldErrors = configureNetworkProxyAction.getFieldErrors();
-
- // make an expected field error object
- Map<String, List<String>> expectedFieldErrors = new HashMap<String, List<String>>();
-
- // populate
- List<String> expectedErrorMessages = new ArrayList<String>();
- expectedErrorMessages.add("Proxy id must only contain alphanumeric characters, underscores(_), dots(.), and dashes(-).");
- expectedFieldErrors.put("proxy.id", expectedErrorMessages);
-
- expectedErrorMessages = new ArrayList<String>();
- expectedErrorMessages.add("Protocol must only contain alphanumeric characters, forward-slashes(/), back-slashes(\\), dots(.), colons(:), and dashes(-).");
- expectedFieldErrors.put("proxy.protocol", expectedErrorMessages);
-
- expectedErrorMessages = new ArrayList<String>();
- expectedErrorMessages.add("Host must only contain alphanumeric characters, equals(=), question-marks(?), exclamation-points(!), ampersands(&), forward-slashes(/), back-slashes(\\), underscores(_), dots(.), colons(:), tildes(~), and dashes(-).");
- expectedFieldErrors.put("proxy.host", expectedErrorMessages);
-
- expectedErrorMessages = new ArrayList<String>();
- expectedErrorMessages.add("Port needs to be larger than 1");
- expectedFieldErrors.put("proxy.port", expectedErrorMessages);
-
- expectedErrorMessages = new ArrayList<String>();
- expectedErrorMessages.add("Username must only contain alphanumeric characters, at's(@), forward-slashes(/), back-slashes(\\), underscores(_), dots(.), and dashes(-).");
- expectedFieldErrors.put("proxy.username", expectedErrorMessages);
-
- ValidatorUtil.assertFieldErrors(expectedFieldErrors, fieldErrors);
- }
-
- @Test
- public void testStruts2ValidationFrameworkWithValidInputs() throws Exception
- {
- // prep
- NetworkProxy networkProxy = createNetworkProxy(PROXY_ID_VALID_INPUT, PROXY_HOST_VALID_INPUT, PROXY_PORT_VALID_INPUT, PROXY_PROTOCOL_VALID_INPUT, PROXY_USERNAME_VALID_INPUT);
- configureNetworkProxyAction.setProxy(networkProxy);
-
- // test
- actionValidatorManager.validate(configureNetworkProxyAction, VALIDATION_CONTEXT);
-
- // verify
- assertFalse(configureNetworkProxyAction.hasFieldErrors());
- }
-
- private NetworkProxy createNetworkProxy(String id, String host, int port, String protocol, String username)
- {
- NetworkProxy networkProxy = new NetworkProxy();
- networkProxy.setId( id );
- networkProxy.setHost( host );
- networkProxy.setPort( port );
- networkProxy.setProtocol( protocol );
- networkProxy.setUsername( username );
- return networkProxy;
- }
-
- // over-loaded
- // for simulating empty/null form purposes; excluding primitive data-typed values
- private NetworkProxy createNetworkProxy(String id, String host, String protocol, String username)
- {
- NetworkProxy networkProxy = new NetworkProxy();
- networkProxy.setId( id );
- networkProxy.setHost( host );
- networkProxy.setProtocol( protocol );
- networkProxy.setUsername( username );
- return networkProxy;
- }
-}
+++ /dev/null
-package org.apache.archiva.web.action.admin.repositories;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import com.opensymphony.xwork2.validator.ActionValidatorManager;
-import org.apache.archiva.admin.model.beans.ManagedRepository;
-import org.apache.archiva.admin.model.managed.ManagedRepositoryAdmin;
-import org.apache.struts2.StrutsSpringTestCase;
-
-import java.io.File;
-import org.apache.archiva.test.utils.ArchivaBlockJUnit4ClassRunner;
-import org.junit.Before;
-import org.junit.runner.RunWith;
-@RunWith( ArchivaBlockJUnit4ClassRunner.class )
-public abstract class AbstractManagedRepositoryActionTest
- extends StrutsSpringTestCase
-{
- protected static final String EMPTY_STRING = "";
-
- // valid inputs; validation testing
- protected static final String REPOSITORY_ID_VALID_INPUT = "abcXYZ0129._-";
-
- protected static final String REPOSITORY_LOCATION_VALID_INPUT = "abcXYZ0129._/\\~:?!&=-";
-
- protected static final String REPOSITORY_INDEX_DIR_VALID_INPUT = "abcXYZ0129._/\\~:?!&=-";
-
- protected static final String REPOSITORY_NAME_VALID_INPUT = "abcXYZ 0129.)/ _(-";
-
- protected static final int REPOSITORY_RETENTION_COUNT_VALID_INPUT = 1;
-
- protected static final int REPOSITORY_DAYS_OLDER_VALID_INPUT = 1;
-
- // invalid inputs; validation testing
- protected static final String REPOSITORY_ID_INVALID_INPUT = "<> \\/~+[ ]'\"";
-
- protected static final String REPOSITORY_LOCATION_INVALID_INPUT = "<> ~+[ ]'\"";
-
- protected static final String REPOSITORY_INDEX_DIR_INVALID_INPUT = "<> ~+[ ]'\"";
-
- protected static final String REPOSITORY_NAME_INVALID_INPUT = "<>\\~+[]'\"";
-
- protected static final int REPOSITORY_RETENTION_COUNT_INVALID_INPUT = 101;
-
- protected static final int REPOSITORY_DAYS_OLDER_INVALID_INPUT = -1;
-
- // testing requisite; validation testing
- protected ActionValidatorManager actionValidatorManager;
-
- protected static final String REPO_ID = "repo-ident";
-
- protected File location;
-
- @Override
- protected String[] getContextLocations()
- {
- return new String[]{ "classpath*:/META-INF/spring-context.xml", "classpath*:/spring-context.xml" };
- }
-
- @Override
- @Before
- public void setUp()
- throws Exception
- {
- super.setUp();
-
- DefaultActionValidatorManagerFactory defaultActionValidatorManagerFactory =
- new DefaultActionValidatorManagerFactory();
-
- actionValidatorManager = defaultActionValidatorManagerFactory.createDefaultActionValidatorManager();
- }
-
- protected void populateRepository( ManagedRepository repository )
- {
- repository.setId( REPO_ID );
- repository.setName( "repo name" );
- repository.setLocation( location.getAbsolutePath() );
- repository.setLayout( "default" );
- repository.setCronExpression( "* 0/5 * * * ?" );
- repository.setDaysOlder( 31 );
- repository.setRetentionCount( 20 );
- repository.setReleases( true );
- repository.setSnapshots( false );
- repository.setScanned( false );
- repository.setDeleteReleasedSnapshots( true );
- }
-
- protected ManagedRepository createManagedRepository( String id, String name, String location )
- {
- ManagedRepository managedRepositoryConfiguration = new ManagedRepository();
-
- managedRepositoryConfiguration.setId( id );
- managedRepositoryConfiguration.setName( name );
- managedRepositoryConfiguration.setLocation( location );
-
- return managedRepositoryConfiguration;
- }
-
- // over-loaded
- // for simulating empty/null form purposes; excluding primitive data-typed values
- protected ManagedRepository createManagedRepository( String id, String name, String location,
- String indexDir )
- {
- ManagedRepository managedRepositoryConfiguration = new ManagedRepository();
-
- managedRepositoryConfiguration.setId( id );
- managedRepositoryConfiguration.setName( name );
- managedRepositoryConfiguration.setLocation( location );
- managedRepositoryConfiguration.setIndexDirectory( indexDir );
-
- return managedRepositoryConfiguration;
- }
-
- protected ManagedRepository createManagedRepository( String id, String name, String location, String indexDir,
- int daysOlder, int retentionCount )
- {
- ManagedRepository managedRepositoryConfiguration = new ManagedRepository();
-
- managedRepositoryConfiguration.setId( id );
- managedRepositoryConfiguration.setName( name );
- managedRepositoryConfiguration.setLocation( location );
- managedRepositoryConfiguration.setIndexDirectory( indexDir );
- managedRepositoryConfiguration.setDaysOlder( daysOlder );
- managedRepositoryConfiguration.setRetentionCount( retentionCount );
-
- return managedRepositoryConfiguration;
- }
-
-
- protected ManagedRepositoryAdmin getManagedRepositoryAdmin()
- {
- return applicationContext.getBean( ManagedRepositoryAdmin.class );
- }
-}
+++ /dev/null
-package org.apache.archiva.web.action.admin.repositories;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import com.opensymphony.xwork2.Action;
-import org.apache.archiva.admin.model.beans.ManagedRepository;
-import org.apache.archiva.admin.repository.DefaultRepositoryCommonValidator;
-import org.apache.archiva.admin.repository.managed.DefaultManagedRepositoryAdmin;
-import org.apache.archiva.configuration.ArchivaConfiguration;
-import org.apache.archiva.configuration.Configuration;
-import org.apache.archiva.redback.integration.interceptor.SecureActionBundle;
-import org.apache.archiva.redback.integration.interceptor.SecureActionException;
-import org.apache.archiva.redback.role.RoleManager;
-import org.apache.archiva.scheduler.repository.RepositoryArchivaTaskScheduler;
-import org.apache.archiva.scheduler.repository.RepositoryTask;
-import org.apache.archiva.security.common.ArchivaRoleConstants;
-import org.apache.archiva.web.validator.utils.ValidatorUtil;
-import org.apache.commons.io.FileUtils;
-import org.easymock.MockControl;
-import org.easymock.classextension.MockClassControl;
-
-import java.io.File;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import org.junit.Before;
-import org.junit.Test;
-
-/**
- * AddManagedRepositoryActionTest
- *
- *
- */
-public class AddManagedRepositoryActionTest
- extends AbstractManagedRepositoryActionTest
-{
- private AddManagedRepositoryAction action;
-
- private RoleManager roleManager;
-
- private MockControl roleManagerControl;
-
- private MockControl archivaConfigurationControl;
-
- private org.apache.archiva.redback.components.registry.Registry registry;
-
- private MockControl registryControl;
-
- private ArchivaConfiguration archivaConfiguration;
-
- private MockControl repositoryTaskSchedulerControl;
-
- private RepositoryArchivaTaskScheduler repositoryTaskScheduler;
-
-
- @Override
- @Before
- public void setUp()
- throws Exception
- {
- super.setUp();
-
- action = new AddManagedRepositoryAction();
-
- archivaConfigurationControl = MockControl.createControl( ArchivaConfiguration.class );
- archivaConfiguration = (ArchivaConfiguration) archivaConfigurationControl.getMock();
-
- roleManagerControl = MockControl.createControl( RoleManager.class );
- roleManager = (RoleManager) roleManagerControl.getMock();
-
- registryControl = MockControl.createControl( org.apache.archiva.redback.components.registry.Registry.class );
- registry = (org.apache.archiva.redback.components.registry.Registry) registryControl.getMock();
- //action.setRegistry( registry );
-
- repositoryTaskSchedulerControl = MockClassControl.createControl( RepositoryArchivaTaskScheduler.class );
- repositoryTaskScheduler = (RepositoryArchivaTaskScheduler) repositoryTaskSchedulerControl.getMock();
-
- location = new File( System.getProperty( "basedir" ), "target/test/location" );
- ( (DefaultManagedRepositoryAdmin) getManagedRepositoryAdmin() ).setArchivaConfiguration( archivaConfiguration );
- ( (DefaultManagedRepositoryAdmin) getManagedRepositoryAdmin() ).setRoleManager( roleManager );
- ( (DefaultManagedRepositoryAdmin) getManagedRepositoryAdmin() ).setRegistry( registry );
- ( (DefaultManagedRepositoryAdmin) getManagedRepositoryAdmin() ).setRepositoryTaskScheduler(
- repositoryTaskScheduler );
-
- DefaultRepositoryCommonValidator defaultRepositoryCommonValidator = new DefaultRepositoryCommonValidator();
- defaultRepositoryCommonValidator.setArchivaConfiguration( archivaConfiguration );
- defaultRepositoryCommonValidator.setRegistry( registry );
-
- ( (DefaultManagedRepositoryAdmin) getManagedRepositoryAdmin() ).setRepositoryCommonValidator(
- defaultRepositoryCommonValidator );
-
- action.setRepositoryCommonValidator( defaultRepositoryCommonValidator );
-
- action.setManagedRepositoryAdmin( getManagedRepositoryAdmin() );
-
- }
-
- @Test
- public void testSecureActionBundle()
- throws SecureActionException
- {
- archivaConfiguration.getConfiguration();
- archivaConfigurationControl.setReturnValue( new Configuration() );
- archivaConfigurationControl.replay();
-
- action.prepare();
- SecureActionBundle bundle = action.getSecureActionBundle();
- assertTrue( bundle.requiresAuthentication() );
- assertEquals( 1, bundle.getAuthorizationTuples().size() );
- }
-
- @Test
- public void testAddRepositoryInitialPage()
- throws Exception
- {
- archivaConfiguration.getConfiguration();
- archivaConfigurationControl.setReturnValue( new Configuration() );
- archivaConfiguration.getConfiguration();
- archivaConfigurationControl.setReturnValue( new Configuration() );
- archivaConfigurationControl.replay();
-
- action.prepare();
- ManagedRepository configuration = action.getRepository();
- assertNotNull( configuration );
- assertNull( configuration.getId() );
- // check all booleans are false
- assertFalse( configuration.isDeleteReleasedSnapshots() );
- assertFalse( configuration.isScanned() );
- assertFalse( configuration.isReleases() );
- assertFalse( configuration.isSnapshots() );
-
- String status = action.input();
- assertEquals( Action.INPUT, status );
-
- // check defaults
- assertFalse( configuration.isDeleteReleasedSnapshots() );
- assertTrue( configuration.isScanned() );
- assertTrue( configuration.isReleases() );
- assertFalse( configuration.isSnapshots() );
- }
-
- @Test
- public void testAddRepository()
- throws Exception
- {
- FileUtils.deleteDirectory( location );
-
- roleManager.templatedRoleExists( ArchivaRoleConstants.TEMPLATE_REPOSITORY_OBSERVER, REPO_ID );
- roleManagerControl.setReturnValue( false );
- roleManager.createTemplatedRole( ArchivaRoleConstants.TEMPLATE_REPOSITORY_OBSERVER, REPO_ID );
- roleManagerControl.setVoidCallable();
- roleManager.templatedRoleExists( ArchivaRoleConstants.TEMPLATE_REPOSITORY_MANAGER, REPO_ID );
- roleManagerControl.setReturnValue( false );
- roleManager.createTemplatedRole( ArchivaRoleConstants.TEMPLATE_REPOSITORY_MANAGER, REPO_ID );
- roleManagerControl.setVoidCallable();
-
- roleManagerControl.replay();
-
- registry.getString( "appserver.base", "${appserver.base}" );
- registryControl.setReturnValue( "target/test", 1, 3 );
- registry.getString( "appserver.home", "${appserver.home}" );
- registryControl.setReturnValue( "target/test", 1, 3 );
-
- registryControl.replay();
-
- RepositoryTask task = new RepositoryTask();
- task.setRepositoryId( REPO_ID );
- repositoryTaskScheduler.isProcessingRepositoryTask( REPO_ID );
- repositoryTaskSchedulerControl.setReturnValue( false );
- repositoryTaskScheduler.queueTask( task );
- repositoryTaskSchedulerControl.setVoidCallable();
- repositoryTaskSchedulerControl.replay();
-
- Configuration configuration = new Configuration();
- archivaConfiguration.getConfiguration();
- archivaConfigurationControl.setReturnValue( configuration );
-
- archivaConfiguration.getConfiguration();
- archivaConfigurationControl.setReturnValue( configuration );
-
- archivaConfiguration.getConfiguration();
- archivaConfigurationControl.setReturnValue( configuration );
-
- archivaConfiguration.save( configuration );
-
- archivaConfigurationControl.replay();
-
- action.prepare();
- ManagedRepository repository = action.getRepository();
- populateRepository( repository );
-
- assertFalse( location.exists() );
- String status = action.commit();
- assertEquals( Action.SUCCESS, status );
- assertTrue( location.exists() );
-
- assertEquals( Collections.singletonList( repository ), getManagedRepositoryAdmin().getManagedRepositories() );
- assertEquals( location.getCanonicalPath(), new File( repository.getLocation() ).getCanonicalPath() );
-
- roleManagerControl.verify();
- archivaConfigurationControl.verify();
- registryControl.verify();
- }
-
-
- @Test
- public void testAddRepositoryExistingLocation()
- throws Exception
- {
- if ( !location.exists() )
- {
- location.mkdirs();
- }
-
- registry.getString( "appserver.base", "${appserver.base}" );
- registryControl.setReturnValue( "target/test" );
- registry.getString( "appserver.home", "${appserver.home}" );
- registryControl.setReturnValue( "target/test" );
-
- registryControl.replay();
-
- action.prepare();
- ManagedRepository repository = action.getRepository();
- populateRepository( repository );
-
- assertTrue( location.exists() );
- String status = action.commit();
- assertEquals( AddManagedRepositoryAction.CONFIRM, status );
- assertEquals( location.getCanonicalPath(), new File( repository.getLocation() ).getCanonicalPath() );
- registryControl.verify();
- }
-
- @Test
- public void testStruts2ValidationFrameworkWithNullInputs()
- throws Exception
- {
- // prep
- // 0 is the default value for primitive int; null for objects
- ManagedRepository managedRepositoryConfiguration = createManagedRepository( null, null, null, null );
- action.setRepository( managedRepositoryConfiguration );
-
- // test
- actionValidatorManager.validate( action, EMPTY_STRING );
-
- // verify
- assertTrue( action.hasFieldErrors() );
-
- Map<String, List<String>> fieldErrors = action.getFieldErrors();
-
- // make an expected field error object
- Map<String, List<String>> expectedFieldErrors = new HashMap<String, List<String>>();
-
- // populate
- List<String> expectedErrorMessages = new ArrayList<String>();
- expectedErrorMessages.add( "You must enter a repository identifier." );
- expectedFieldErrors.put( "repository.id", expectedErrorMessages );
-
- expectedErrorMessages = new ArrayList<String>();
- expectedErrorMessages.add( "You must enter a directory." );
- expectedFieldErrors.put( "repository.location", expectedErrorMessages );
-
- expectedErrorMessages = new ArrayList<String>();
- expectedErrorMessages.add( "You must enter a repository name." );
- expectedFieldErrors.put( "repository.name", expectedErrorMessages );
-
- ValidatorUtil.assertFieldErrors( expectedFieldErrors, fieldErrors );
- }
-
- @Test
- public void testStruts2ValidationFrameworkWithBlankInputs()
- throws Exception
- {
- // prep
- // 0 is the default value for primitive int
- ManagedRepository managedRepositoryConfiguration =
- createManagedRepository( EMPTY_STRING, EMPTY_STRING, EMPTY_STRING, EMPTY_STRING );
- action.setRepository( managedRepositoryConfiguration );
-
- // test
- actionValidatorManager.validate( action, EMPTY_STRING );
-
- // verify
- assertTrue( action.hasFieldErrors() );
-
- Map<String, List<String>> fieldErrors = action.getFieldErrors();
-
- // make an expected field error object
- Map<String, List<String>> expectedFieldErrors = new HashMap<String, List<String>>();
-
- // populate
- List<String> expectedErrorMessages = new ArrayList<String>();
- expectedErrorMessages.add( "You must enter a repository identifier." );
- expectedFieldErrors.put( "repository.id", expectedErrorMessages );
-
- expectedErrorMessages = new ArrayList<String>();
- expectedErrorMessages.add( "You must enter a directory." );
- expectedFieldErrors.put( "repository.location", expectedErrorMessages );
-
- expectedErrorMessages = new ArrayList<String>();
- expectedErrorMessages.add( "You must enter a repository name." );
- expectedFieldErrors.put( "repository.name", expectedErrorMessages );
-
- ValidatorUtil.assertFieldErrors( expectedFieldErrors, fieldErrors );
- }
-
- @Test
- public void testStruts2ValidationFrameworkWithInvalidInputs()
- throws Exception
- {
- // prep
- ManagedRepository managedRepositoryConfiguration =
- createManagedRepository( REPOSITORY_ID_INVALID_INPUT, REPOSITORY_NAME_INVALID_INPUT,
- REPOSITORY_LOCATION_INVALID_INPUT, REPOSITORY_INDEX_DIR_INVALID_INPUT,
- REPOSITORY_DAYS_OLDER_INVALID_INPUT, REPOSITORY_RETENTION_COUNT_INVALID_INPUT );
- action.setRepository( managedRepositoryConfiguration );
-
- // test
- actionValidatorManager.validate( action, EMPTY_STRING );
-
- // verify
- assertTrue( action.hasFieldErrors() );
-
- Map<String, List<String>> fieldErrors = action.getFieldErrors();
-
- // make an expected field error object
- Map<String, List<String>> expectedFieldErrors = new HashMap<String, List<String>>();
-
- // populate
- List<String> expectedErrorMessages = new ArrayList<String>();
- expectedErrorMessages.add(
- "Identifier must only contain alphanumeric characters, underscores(_), dots(.), and dashes(-)." );
- expectedFieldErrors.put( "repository.id", expectedErrorMessages );
-
- expectedErrorMessages = new ArrayList<String>();
- expectedErrorMessages.add(
- "Directory must only contain alphanumeric characters, equals(=), question-marks(?), exclamation-points(!), ampersands(&), forward-slashes(/), back-slashes(\\), underscores(_), dots(.), colons(:), tildes(~), and dashes(-)." );
- expectedFieldErrors.put( "repository.location", expectedErrorMessages );
-
- expectedErrorMessages = new ArrayList<String>();
- expectedErrorMessages.add(
- "Repository Name must only contain alphanumeric characters, white-spaces(' '), forward-slashes(/), open-parenthesis('('), close-parenthesis(')'), underscores(_), dots(.), and dashes(-)." );
- expectedFieldErrors.put( "repository.name", expectedErrorMessages );
-
- expectedErrorMessages = new ArrayList<String>();
- expectedErrorMessages.add(
- "Index directory must only contain alphanumeric characters, equals(=), question-marks(?), exclamation-points(!), ampersands(&), forward-slashes(/), back-slashes(\\), underscores(_), dots(.), colons(:), tildes(~), and dashes(-)." );
- expectedFieldErrors.put( "repository.indexDirectory", expectedErrorMessages );
-
- expectedErrorMessages = new ArrayList<String>();
- expectedErrorMessages.add( "Repository Purge By Retention Count needs to be between 1 and 100." );
- expectedFieldErrors.put( "repository.retentionCount", expectedErrorMessages );
-
- expectedErrorMessages = new ArrayList<String>();
- expectedErrorMessages.add( "Repository Purge By Days Older Than needs to be larger than 0." );
- expectedFieldErrors.put( "repository.daysOlder", expectedErrorMessages );
-
- ValidatorUtil.assertFieldErrors( expectedFieldErrors, fieldErrors );
- }
-
- @Test
- public void testStruts2ValidationFrameworkWithValidInputs()
- throws Exception
- {
- // prep
- ManagedRepository managedRepositoryConfiguration =
- createManagedRepository( REPOSITORY_ID_VALID_INPUT, REPOSITORY_NAME_VALID_INPUT,
- REPOSITORY_LOCATION_VALID_INPUT, REPOSITORY_INDEX_DIR_VALID_INPUT,
- REPOSITORY_DAYS_OLDER_VALID_INPUT, REPOSITORY_RETENTION_COUNT_VALID_INPUT );
- action.setRepository( managedRepositoryConfiguration );
-
- // test
- actionValidatorManager.validate( action, EMPTY_STRING );
-
- // verify
- assertFalse( action.hasFieldErrors() );
- }
-
- // TODO: test errors during add, other actions
-}
+++ /dev/null
-package org.apache.archiva.web.action.admin.repositories;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import com.opensymphony.xwork2.Action;
-import org.apache.archiva.admin.model.beans.RemoteRepository;
-import org.apache.archiva.admin.repository.remote.DefaultRemoteRepositoryAdmin;
-import org.apache.archiva.configuration.ArchivaConfiguration;
-import org.apache.archiva.configuration.Configuration;
-import org.apache.archiva.web.action.AbstractActionTestCase;
-import org.apache.archiva.redback.integration.interceptor.SecureActionBundle;
-import org.easymock.MockControl;
-
-import java.util.Collections;
-import org.junit.Before;
-import org.junit.Test;
-
-/**
- * AddRemoteRepositoryActionTest
- *
- *
- */
-public class AddRemoteRepositoryActionTest
- extends AbstractActionTestCase
-{
- private AddRemoteRepositoryAction action;
-
- private MockControl archivaConfigurationControl;
-
- private ArchivaConfiguration archivaConfiguration;
-
- private static final String REPO_ID = "remote-repo-ident";
-
- @Override
- @Before
- public void setUp()
- throws Exception
- {
- super.setUp();
-
- action = (AddRemoteRepositoryAction) getActionProxy( "/admin/addRemoteRepository.action" ).getAction();
-
- archivaConfigurationControl = MockControl.createControl( ArchivaConfiguration.class );
- archivaConfiguration = (ArchivaConfiguration) archivaConfigurationControl.getMock();
-
- ( (DefaultRemoteRepositoryAdmin) action.getRemoteRepositoryAdmin() ).setArchivaConfiguration(
- archivaConfiguration );
- }
-
- @Test
- public void testSecureActionBundle()
- throws Exception
- {
- archivaConfiguration.getConfiguration();
- archivaConfigurationControl.setReturnValue( new Configuration() );
- archivaConfigurationControl.replay();
-
- action.prepare();
- SecureActionBundle bundle = action.getSecureActionBundle();
- assertTrue( bundle.requiresAuthentication() );
- assertEquals( 1, bundle.getAuthorizationTuples().size() );
- }
-
- @Test
- public void testAddRemoteRepositoryInitialPage()
- throws Exception
- {
- archivaConfiguration.getConfiguration();
- archivaConfigurationControl.setReturnValue( new Configuration() );
- archivaConfigurationControl.replay();
-
- action.prepare();
- RemoteRepository configuration = action.getRepository();
- assertNotNull( configuration );
- assertNull( configuration.getId() );
-
- String status = action.input();
- assertEquals( Action.INPUT, status );
- }
-
- @Test
- public void testAddRemoteRepository()
- throws Exception
- {
- Configuration configuration = new Configuration();
- archivaConfiguration.getConfiguration();
- archivaConfigurationControl.setReturnValue( configuration, 2 );
-
- archivaConfiguration.save( configuration );
-
- archivaConfiguration.getConfiguration();
- archivaConfigurationControl.setReturnValue( configuration, 1 );
-
- archivaConfigurationControl.replay();
-
- action.prepare();
- RemoteRepository repository = action.getRepository();
- populateRepository( repository );
-
- assertEquals( "url ", repository.getUrl() );
-
- String status = action.commit();
- assertEquals( Action.SUCCESS, status );
-
- assertEquals( Collections.singletonList( repository ),
- action.getRemoteRepositoryAdmin().getRemoteRepositories() );
-
- assertEquals( "url", repository.getUrl() );
-
- archivaConfigurationControl.verify();
- }
-
- private void populateRepository( RemoteRepository repository )
- {
- repository.setId( REPO_ID );
- repository.setName( "repo name" );
- repository.setUrl( "url " );
- repository.setLayout( "default" );
- }
-
- // TODO: test errors during add, other actions
-}
+++ /dev/null
-package org.apache.archiva.web.action.admin.repositories;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import com.opensymphony.xwork2.ActionContext;
-import com.opensymphony.xwork2.DefaultTextProvider;
-import com.opensymphony.xwork2.ObjectFactory;
-import com.opensymphony.xwork2.TextProvider;
-import com.opensymphony.xwork2.conversion.ObjectTypeDeterminer;
-import com.opensymphony.xwork2.conversion.impl.DefaultObjectTypeDeterminer;
-import com.opensymphony.xwork2.conversion.impl.XWorkBasicConverter;
-import com.opensymphony.xwork2.conversion.impl.XWorkConverter;
-import com.opensymphony.xwork2.inject.Container;
-import com.opensymphony.xwork2.inject.ContainerBuilder;
-import com.opensymphony.xwork2.inject.Scope;
-import com.opensymphony.xwork2.ognl.OgnlReflectionProvider;
-import com.opensymphony.xwork2.ognl.OgnlUtil;
-import com.opensymphony.xwork2.ognl.OgnlValueStackFactory;
-import com.opensymphony.xwork2.ognl.accessor.CompoundRootAccessor;
-import com.opensymphony.xwork2.util.CompoundRoot;
-import com.opensymphony.xwork2.util.ValueStack;
-import com.opensymphony.xwork2.util.ValueStackFactory;
-import com.opensymphony.xwork2.util.reflection.ReflectionProvider;
-import com.opensymphony.xwork2.validator.ActionValidatorManager;
-import com.opensymphony.xwork2.validator.DefaultActionValidatorManager;
-import com.opensymphony.xwork2.validator.DefaultValidatorFactory;
-import com.opensymphony.xwork2.validator.DefaultValidatorFileParser;
-import ognl.PropertyAccessor;
-
-import java.util.HashMap;
-
-/**
- * Factory for creating the DefaultActionValidatorManager to be used for the validation tests.
- */
-public class DefaultActionValidatorManagerFactory
-{
-
- // ObjectFactory.setObjectFactory(..) was removed in struts 2.1, so we have to workaround with this
- // to make the validation tests work
- public ActionValidatorManager createDefaultActionValidatorManager()
- throws ClassNotFoundException
- {
- Container container = createBootstrapContainer();
-
- ActionContext context = new ActionContext( new HashMap<String, Object>() );
- context.setValueStack( createValueStack( container ) );
- ActionContext.setContext( context );
-
- OgnlReflectionProvider reflectionProvider = new OgnlReflectionProvider();
-
- reflectionProvider.setOgnlUtil( container.getInstance( OgnlUtil.class ) );
-
- ObjectFactory objectFactory = new ObjectFactory();
- objectFactory.setReflectionProvider( reflectionProvider );
-
- DefaultValidatorFileParser fileParser = new DefaultValidatorFileParser();
- fileParser.setObjectFactory( objectFactory );
-
- DefaultValidatorFactory validatorFactory = new DefaultValidatorFactory( objectFactory, fileParser );
-
- DefaultActionValidatorManager defaultValidatorManager = new DefaultActionValidatorManager();
- defaultValidatorManager.setValidatorFactory( validatorFactory );
- defaultValidatorManager.setValidatorFileParser( fileParser );
-
- return defaultValidatorManager;
- }
-
- private ValueStack createValueStack( Container container )
- throws ClassNotFoundException
- {
- OgnlValueStackFactory stackFactory = new OgnlValueStackFactory();
-
- stackFactory.setXWorkConverter( container.getInstance( XWorkConverter.class ) );
- stackFactory.setContainer( container );
- stackFactory.setTextProvider( container.getInstance( TextProvider.class ) );
-
- ValueStack stack = stackFactory.createValueStack();
-
- return stack;
- }
-
- private Container createBootstrapContainer()
- {
- ContainerBuilder builder = new ContainerBuilder();
- builder.factory( ObjectFactory.class, Scope.SINGLETON );
- builder.factory( ReflectionProvider.class, OgnlReflectionProvider.class, Scope.SINGLETON );
- builder.factory( ValueStackFactory.class, OgnlValueStackFactory.class, Scope.SINGLETON );
- builder.factory( XWorkConverter.class, Scope.SINGLETON );
- builder.factory( XWorkBasicConverter.class, Scope.SINGLETON );
- builder.factory( TextProvider.class, "system", DefaultTextProvider.class, Scope.SINGLETON );
- builder.factory( ObjectTypeDeterminer.class, DefaultObjectTypeDeterminer.class, Scope.SINGLETON );
- builder.factory( PropertyAccessor.class, CompoundRoot.class.getName(), CompoundRootAccessor.class, Scope.SINGLETON );
- builder.factory( OgnlUtil.class, Scope.SINGLETON );
- builder.constant( "devMode", "false" );
-
- return builder.create( true );
- }
-}
+++ /dev/null
-package org.apache.archiva.web.action.admin.repositories;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import com.opensymphony.xwork2.Action;
-import net.sf.beanlib.provider.replicator.BeanReplicator;
-import org.apache.archiva.admin.model.RepositoryAdminException;
-import org.apache.archiva.admin.model.beans.ManagedRepository;
-import org.apache.archiva.admin.model.managed.ManagedRepositoryAdmin;
-import org.apache.archiva.admin.repository.managed.DefaultManagedRepositoryAdmin;
-import org.apache.archiva.audit.AuditEvent;
-import org.apache.archiva.audit.AuditListener;
-import org.apache.archiva.configuration.ArchivaConfiguration;
-import org.apache.archiva.configuration.Configuration;
-import org.apache.archiva.configuration.IndeterminateConfigurationException;
-import org.apache.archiva.configuration.ManagedRepositoryConfiguration;
-import org.apache.archiva.configuration.ProxyConnectorConfiguration;
-import org.apache.archiva.configuration.RemoteRepositoryConfiguration;
-import org.apache.archiva.configuration.RepositoryGroupConfiguration;
-import org.apache.archiva.metadata.repository.MetadataRepository;
-import org.apache.archiva.metadata.repository.RepositorySession;
-import org.apache.archiva.metadata.repository.stats.RepositoryStatisticsManager;
-import org.apache.archiva.redback.components.registry.RegistryException;
-import org.apache.archiva.redback.integration.interceptor.SecureActionBundle;
-import org.apache.archiva.redback.integration.interceptor.SecureActionException;
-import org.apache.archiva.redback.role.RoleManager;
-import org.apache.archiva.redback.role.RoleManagerException;
-import org.apache.archiva.security.common.ArchivaRoleConstants;
-import org.apache.archiva.web.action.AbstractActionTestCase;
-import org.apache.archiva.web.action.AuditEventArgumentsMatcher;
-import org.apache.archiva.webtest.memory.TestRepositorySessionFactory;
-import org.easymock.MockControl;
-
-import java.io.File;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.List;
-import org.junit.Before;
-import org.junit.Test;
-
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.when;
-
-/**
- * DeleteManagedRepositoryActionTest
- *
- *
- */
-public class DeleteManagedRepositoryActionTest
- extends AbstractActionTestCase
-{
- private DeleteManagedRepositoryAction action;
-
- private RoleManager roleManager;
-
- private MockControl roleManagerControl;
-
- private MockControl archivaConfigurationControl;
-
- private ArchivaConfiguration archivaConfiguration;
-
- private static final String REPO_ID = "repo-ident";
-
- private File location;
-
- private MockControl repositoryStatisticsManagerControl;
-
- private RepositoryStatisticsManager repositoryStatisticsManager;
-
- private MetadataRepository metadataRepository;
-
- private RepositorySession respositorySession;
-
- private MockControl metadataRepositoryControl;
-
- @Override
- @Before
- public void setUp()
- throws Exception
- {
- super.setUp();
-
- // TODO use getAction .??
- action = new DeleteManagedRepositoryAction();
-
- archivaConfigurationControl = MockControl.createControl( ArchivaConfiguration.class );
- archivaConfiguration = (ArchivaConfiguration) archivaConfigurationControl.getMock();
-
- roleManagerControl = MockControl.createControl( RoleManager.class );
- roleManager = (RoleManager) roleManagerControl.getMock();
- //action.setRoleManager( roleManager );
- location = new File( System.getProperty( "basedir" ), "target/test/location" );
-
- repositoryStatisticsManagerControl = MockControl.createControl( RepositoryStatisticsManager.class );
- repositoryStatisticsManager = (RepositoryStatisticsManager) repositoryStatisticsManagerControl.getMock();
-
- metadataRepositoryControl = MockControl.createControl( MetadataRepository.class );
- metadataRepository = (MetadataRepository) metadataRepositoryControl.getMock();
- metadataRepository.removeRepository( REPO_ID );
-
- respositorySession = mock( RepositorySession.class );
- when( respositorySession.getRepository() ).thenReturn( metadataRepository );
-
- TestRepositorySessionFactory factory = new TestRepositorySessionFactory();
- factory.setRepositorySession( respositorySession );
- action.setRepositorySessionFactory( factory );
-
- ( (DefaultManagedRepositoryAdmin) getManagedRepositoryAdmin() ).setArchivaConfiguration( archivaConfiguration );
- ( (DefaultManagedRepositoryAdmin) getManagedRepositoryAdmin() ).setRoleManager( roleManager );
- ( (DefaultManagedRepositoryAdmin) getManagedRepositoryAdmin() ).setRepositoryStatisticsManager(
- repositoryStatisticsManager );
- ( (DefaultManagedRepositoryAdmin) getManagedRepositoryAdmin() ).setRepositorySessionFactory( factory );
- action.setManagedRepositoryAdmin( getManagedRepositoryAdmin() );
-
- metadataRepositoryControl.replay();
- }
-
- @Test
- public void testSecureActionBundle()
- throws SecureActionException, RepositoryAdminException
- {
- archivaConfiguration.getConfiguration();
- archivaConfigurationControl.setReturnValue( new Configuration() );
- archivaConfigurationControl.replay();
-
- action.prepare();
- SecureActionBundle bundle = action.getSecureActionBundle();
- assertTrue( bundle.requiresAuthentication() );
- assertEquals( 1, bundle.getAuthorizationTuples().size() );
- }
-
- @Test
- public void testDeleteRepositoryAndReposUnderRepoGroup()
- throws Exception
- {
- repositoryStatisticsManager.deleteStatistics( metadataRepository, REPO_ID );
- repositoryStatisticsManagerControl.replay();
-
- Configuration configuration = prepDeletionTest( createRepository(), 6 );
- List<String> repoIds = new ArrayList<String>();
- repoIds.add( REPO_ID );
- configuration.addRepositoryGroup( createRepoGroup( repoIds, "repo.group" ) );
-
- prepareRoleManagerMock();
-
- assertEquals( 1, configuration.getRepositoryGroups().size() );
-
- MockControl control = mockAuditListeners();
- when( respositorySession.getRepository() ).thenReturn( metadataRepository );
- String status = action.deleteContents();
- assertEquals( Action.SUCCESS, status );
-
- assertTrue( configuration.getManagedRepositories().isEmpty() );
- assertEquals( 0, configuration.getRepositoryGroups().get( 0 ).getRepositories().size() );
-
- assertFalse( location.exists() );
-
- repositoryStatisticsManagerControl.verify();
- control.verify();
- metadataRepositoryControl.verify();
- }
-
- @Test
- public void testDeleteRepositoryConfirmation()
- throws Exception
- {
- ManagedRepository originalRepository = createRepository();
- Configuration configuration = createConfigurationForEditing( originalRepository );
-
- archivaConfiguration.getConfiguration();
- archivaConfigurationControl.setReturnValue( configuration );
-
- Configuration stageRepoConfiguration = new Configuration();
- stageRepoConfiguration.addManagedRepository( createStagingRepository() );
- archivaConfigurationControl.setReturnValue( stageRepoConfiguration );
-
- archivaConfiguration.getConfiguration();
- archivaConfigurationControl.setReturnValue( configuration );
-
- archivaConfigurationControl.replay();
-
- action.setRepoid( REPO_ID );
-
- action.prepare();
- assertEquals( REPO_ID, action.getRepoid() );
- ManagedRepository repository = action.getRepository();
- assertNotNull( repository );
- assertRepositoryEquals( repository, createRepository() );
-
- String status = action.execute();
- assertEquals( Action.SUCCESS, status );
-
- repository = action.getRepository();
- assertRepositoryEquals( repository, createRepository() );
- assertEquals( Collections.singletonList( originalRepository ),
- action.getManagedRepositoryAdmin().getManagedRepositories() );
- }
-
- @Test
- public void testDeleteRepositoryKeepContent()
- throws Exception
- {
- // even when we keep the content, we don't keep the metadata at this point
- repositoryStatisticsManager.deleteStatistics( metadataRepository, REPO_ID );
- repositoryStatisticsManagerControl.replay();
-
- prepareRoleManagerMock();
-
- Configuration configuration = prepDeletionTest( createRepository(), 4 );
-
- MockControl control = mockAuditListeners();
-
- when( respositorySession.getRepository() ).thenReturn( metadataRepository );
-
- String status = action.deleteEntry();
-
- assertEquals( Action.SUCCESS, status );
-
- assertTrue( configuration.getManagedRepositories().isEmpty() );
-
- assertTrue( location.exists() );
-
- repositoryStatisticsManagerControl.verify();
- control.verify();
- metadataRepositoryControl.verify();
- }
-
- private MockControl mockAuditListeners()
- {
- MockControl control = MockControl.createControl( AuditListener.class );
- AuditListener listener = (AuditListener) control.getMock();
- listener.auditEvent( new AuditEvent( REPO_ID, "guest", null, AuditEvent.DELETE_MANAGED_REPO ) );
- control.setMatcher( new AuditEventArgumentsMatcher() );
- control.replay();
- action.setAuditListeners( Arrays.asList( listener ) );
-
- ( (DefaultManagedRepositoryAdmin) getManagedRepositoryAdmin() ).setAuditListeners( Arrays.asList( listener ) );
- return control;
- }
-
- @Test
- public void testDeleteRepositoryDeleteContent()
- throws Exception
- {
- repositoryStatisticsManager.deleteStatistics( metadataRepository, REPO_ID );
- repositoryStatisticsManagerControl.replay();
-
- prepareRoleManagerMock();
-
- Configuration configuration = prepDeletionTest( createRepository(), 4 );
-
- MockControl control = mockAuditListeners();
-
- when( respositorySession.getRepository() ).thenReturn( metadataRepository );
-
- String status = action.deleteContents();
-
- assertEquals( Action.SUCCESS, status );
-
- assertTrue( configuration.getManagedRepositories().isEmpty() );
-
- assertFalse( location.exists() );
-
- repositoryStatisticsManagerControl.verify();
- control.verify();
- metadataRepositoryControl.verify();
- }
-
- @Test
- public void testDeleteRepositoryAndAssociatedProxyConnectors()
- throws Exception
- {
- repositoryStatisticsManager.deleteStatistics( metadataRepository, REPO_ID );
- repositoryStatisticsManagerControl.replay();
-
- Configuration configuration = prepDeletionTest( createRepository(), 5 );
- configuration.addRemoteRepository( createRemoteRepository( "codehaus", "http://repository.codehaus.org" ) );
- configuration.addRemoteRepository( createRemoteRepository( "java.net", "http://dev.java.net/maven2" ) );
- configuration.addProxyConnector( createProxyConnector( REPO_ID, "codehaus" ) );
-
- prepareRoleManagerMock();
-
- assertEquals( 1, configuration.getProxyConnectors().size() );
-
- MockControl control = mockAuditListeners();
- when( respositorySession.getRepository() ).thenReturn( metadataRepository );
- String status = action.deleteContents();
-
- assertEquals( Action.SUCCESS, status );
-
- assertTrue( configuration.getManagedRepositories().isEmpty() );
- assertEquals( 0, configuration.getProxyConnectors().size() );
-
- assertFalse( location.exists() );
-
- repositoryStatisticsManagerControl.verify();
- control.verify();
- metadataRepositoryControl.verify();
- }
-
- @Test
- public void testDeleteRepositoryCancelled()
- throws Exception
- {
- repositoryStatisticsManagerControl.replay();
-
- ManagedRepository originalRepository = createRepository();
- Configuration configuration = prepDeletionTest( originalRepository, 3 );
-
- String status = action.execute();
- assertEquals( Action.SUCCESS, status );
-
- ManagedRepository repository = action.getRepository();
- assertRepositoryEquals( repository, createRepository() );
- assertEquals( Collections.singletonList( originalRepository ),
- action.getManagedRepositoryAdmin().getManagedRepositories() );
-
- assertTrue( location.exists() );
-
- repositoryStatisticsManagerControl.verify();
- }
-
-
- private Configuration prepDeletionTest( ManagedRepository originalRepository, int expectCountGetConfig )
- throws RegistryException, IndeterminateConfigurationException, RepositoryAdminException
- {
-
- //Configuration originalConfiguration =
- // ( (DefaultManagedRepositoryAdmin) getManagedRepositoryAdmin() ).getArchivaConfiguration().getConfiguration();
-
- location.mkdirs();
-
- Configuration configuration = createConfigurationForEditing( originalRepository );
-
- archivaConfiguration.getConfiguration();
- archivaConfigurationControl.setReturnValue( configuration, expectCountGetConfig );
-
- Configuration stageRepoConfiguration = new Configuration();
- stageRepoConfiguration.addManagedRepository( createStagingRepository() );
- archivaConfigurationControl.setReturnValue( stageRepoConfiguration );
-
- archivaConfiguration.save( configuration );
-
- // save for staging repo delete
- archivaConfiguration.save( configuration );
-
- archivaConfigurationControl.replay();
-
- action.setRepoid( REPO_ID );
-
- action.prepare();
- assertEquals( REPO_ID, action.getRepoid() );
- ManagedRepository repository = action.getRepository();
- assertNotNull( repository );
- assertRepositoryEquals( repository, createRepository() );
-
- assertTrue( location.exists() );
- return configuration;
- }
-
- private void assertRepositoryEquals( ManagedRepository expectedRepository, ManagedRepository actualRepository )
- {
- assertEquals( expectedRepository.getDaysOlder(), actualRepository.getDaysOlder() );
- assertEquals( expectedRepository.getId(), actualRepository.getId() );
- assertEquals( expectedRepository.getIndexDirectory(), actualRepository.getIndexDirectory() );
- assertEquals( expectedRepository.getLayout(), actualRepository.getLayout() );
- assertEquals( expectedRepository.getLocation(), actualRepository.getLocation() );
- assertEquals( expectedRepository.getName(), actualRepository.getName() );
- assertEquals( expectedRepository.getCronExpression(), actualRepository.getCronExpression() );
- assertEquals( expectedRepository.getRetentionCount(), actualRepository.getRetentionCount() );
- assertEquals( expectedRepository.isDeleteReleasedSnapshots(), actualRepository.isDeleteReleasedSnapshots() );
- assertEquals( expectedRepository.isScanned(), actualRepository.isScanned() );
- assertEquals( expectedRepository.isReleases(), actualRepository.isReleases() );
- assertEquals( expectedRepository.isSnapshots(), actualRepository.isSnapshots() );
- }
-
- private Configuration createConfigurationForEditing( ManagedRepository repositoryConfiguration )
- {
- Configuration configuration = new Configuration();
- ManagedRepositoryConfiguration managedRepositoryConfiguration =
- new BeanReplicator().replicateBean( repositoryConfiguration, ManagedRepositoryConfiguration.class );
- managedRepositoryConfiguration.setRefreshCronExpression( repositoryConfiguration.getCronExpression() );
- configuration.addManagedRepository( managedRepositoryConfiguration );
- return configuration;
- }
-
- private ManagedRepository createRepository()
- {
- ManagedRepository r = new ManagedRepository();
- r.setId( REPO_ID );
- r.setName( "repo name" );
- r.setLocation( location.getAbsolutePath() );
- r.setLayout( "default" );
- r.setCronExpression( "* 0/5 * * * ?" );
- r.setDaysOlder( 0 );
- r.setRetentionCount( 0 );
- r.setReleases( true );
- r.setSnapshots( true );
- r.setScanned( false );
- r.setDeleteReleasedSnapshots( false );
- return r;
- }
-
- private ManagedRepositoryConfiguration createStagingRepository()
- {
- ManagedRepositoryConfiguration r = new ManagedRepositoryConfiguration();
- r.setId( REPO_ID + "-stage" );
- r.setName( "repo name" );
- r.setLocation( location.getAbsolutePath() );
- r.setLayout( "default" );
- r.setRefreshCronExpression( "* 0/5 * * * ?" );
- r.setDaysOlder( 0 );
- r.setRetentionCount( 0 );
- r.setReleases( true );
- r.setSnapshots( true );
- r.setScanned( false );
- r.setDeleteReleasedSnapshots( false );
- return r;
- }
-
- private RemoteRepositoryConfiguration createRemoteRepository( String id, String url )
- {
- RemoteRepositoryConfiguration r = new RemoteRepositoryConfiguration();
- r.setId( id );
- r.setUrl( url );
- r.setLayout( "default" );
-
- return r;
- }
-
- private ProxyConnectorConfiguration createProxyConnector( String managedRepoId, String remoteRepoId )
- {
- ProxyConnectorConfiguration connector = new ProxyConnectorConfiguration();
- connector.setSourceRepoId( managedRepoId );
- connector.setTargetRepoId( remoteRepoId );
-
- return connector;
- }
-
- private RepositoryGroupConfiguration createRepoGroup( List<String> repoIds, String repoGroupId )
- {
- RepositoryGroupConfiguration repoGroup = new RepositoryGroupConfiguration();
- repoGroup.setId( repoGroupId );
- repoGroup.setRepositories( repoIds );
-
- return repoGroup;
- }
-
- private void prepareRoleManagerMock()
- throws RoleManagerException
- {
- roleManager.templatedRoleExists( ArchivaRoleConstants.TEMPLATE_REPOSITORY_OBSERVER, REPO_ID );
- roleManagerControl.setReturnValue( true );
- roleManager.removeTemplatedRole( ArchivaRoleConstants.TEMPLATE_REPOSITORY_OBSERVER, REPO_ID );
- roleManager.templatedRoleExists( ArchivaRoleConstants.TEMPLATE_REPOSITORY_MANAGER, REPO_ID );
- roleManagerControl.setReturnValue( true );
- roleManager.removeTemplatedRole( ArchivaRoleConstants.TEMPLATE_REPOSITORY_MANAGER, REPO_ID );
- roleManagerControl.replay();
- }
-
- protected ManagedRepositoryAdmin getManagedRepositoryAdmin()
- {
- return applicationContext.getBean( ManagedRepositoryAdmin.class );
- }
-}
+++ /dev/null
-package org.apache.archiva.web.action.admin.repositories;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import com.opensymphony.xwork2.Action;
-import org.apache.archiva.admin.model.RepositoryAdminException;
-import org.apache.archiva.admin.model.beans.RemoteRepository;
-import org.apache.archiva.admin.repository.remote.DefaultRemoteRepositoryAdmin;
-import org.apache.archiva.configuration.ArchivaConfiguration;
-import org.apache.archiva.configuration.Configuration;
-import org.apache.archiva.configuration.IndeterminateConfigurationException;
-import org.apache.archiva.configuration.ManagedRepositoryConfiguration;
-import org.apache.archiva.configuration.ProxyConnectorConfiguration;
-import org.apache.archiva.configuration.RemoteRepositoryConfiguration;
-import org.apache.archiva.web.action.AbstractActionTestCase;
-import org.easymock.MockControl;
-
-import java.util.Collections;
-import org.junit.Before;
-import org.junit.Test;
-
-/**
- * DeleteRemoteRepositoryActionTest
- *
- *
- */
-public class DeleteRemoteRepositoryActionTest
- extends AbstractActionTestCase
-{
- private static final String REPO_ID = "remote-repo-ident";
-
- private DeleteRemoteRepositoryAction action;
-
- private MockControl archivaConfigurationControl;
-
- private ArchivaConfiguration archivaConfiguration;
-
- @Override
- @Before
- public void setUp()
- throws Exception
- {
- super.setUp();
-
- //action = (DeleteRemoteRepositoryAction) lookup( Action.class.getName(), "deleteRemoteRepositoryAction" );
- action = (DeleteRemoteRepositoryAction) getActionProxy( "/admin/deleteRemoteRepository.action" ).getAction();
-
- archivaConfigurationControl = MockControl.createControl( ArchivaConfiguration.class );
- archivaConfiguration = (ArchivaConfiguration) archivaConfigurationControl.getMock();
-
- ( (DefaultRemoteRepositoryAdmin) action.getRemoteRepositoryAdmin() ).setArchivaConfiguration(
- archivaConfiguration );
- }
-
- @Test
- public void testDeleteRemoteRepositoryConfirmation()
- throws Exception
- {
- RemoteRepository originalRepository = createRepository();
- Configuration configuration = createConfigurationForEditing( originalRepository );
-
- archivaConfiguration.getConfiguration();
- archivaConfigurationControl.setReturnValue( configuration, 3, 4 );
-
- archivaConfigurationControl.replay();
-
- action.setRepoid( REPO_ID );
-
- action.prepare();
- assertEquals( REPO_ID, action.getRepoid() );
- RemoteRepository repository = action.getRepository();
- assertNotNull( repository );
- assertRepositoryEquals( repository, createRepository() );
-
- String status = action.confirmDelete();
- assertEquals( Action.INPUT, status );
- repository = action.getRepository();
- assertRepositoryEquals( repository, createRepository() );
- assertEquals( Collections.singletonList( originalRepository ),
- action.getRemoteRepositoryAdmin().getRemoteRepositories() );
- }
-
- @Test
- public void testDeleteRemoteRepository()
- throws org.apache.archiva.redback.components.registry.RegistryException, IndeterminateConfigurationException, RepositoryAdminException
- {
- Configuration configuration = createConfigurationForEditing( createRepository() );
- configuration.addManagedRepository( createManagedRepository( "internal", "target/repo/internal" ) );
- configuration.addManagedRepository( createManagedRepository( "snapshots", "target/repo/snapshots" ) );
- configuration.addProxyConnector( createProxyConnector( "internal", REPO_ID ) );
-
- archivaConfiguration.getConfiguration();
- archivaConfigurationControl.setReturnValue( configuration, 4 );
-
- archivaConfiguration.save( configuration );
- archivaConfigurationControl.replay();
-
- action.setRepoid( REPO_ID );
-
- action.prepare();
- assertEquals( REPO_ID, action.getRepoid() );
- RemoteRepository repository = action.getRepository();
- assertNotNull( repository );
- assertRepositoryEquals( repository, createRepository() );
-
- assertEquals( 1, configuration.getProxyConnectors().size() );
-
- String status = action.delete();
- assertEquals( Action.SUCCESS, status );
-
- assertTrue( configuration.getRemoteRepositories().isEmpty() );
- assertEquals( 0, configuration.getProxyConnectors().size() );
- }
-
- @Test
- public void testDeleteRemoteRepositoryCancelled()
- throws Exception
- {
- RemoteRepository originalRepository = createRepository();
- Configuration configuration = createConfigurationForEditing( originalRepository );
-
- archivaConfiguration.getConfiguration();
- archivaConfigurationControl.setReturnValue( configuration, 4 );
-
- archivaConfiguration.save( configuration );
- archivaConfigurationControl.replay();
-
- action.setRepoid( REPO_ID );
-
- action.prepare();
- assertEquals( REPO_ID, action.getRepoid() );
- RemoteRepository repositoryConfiguration = action.getRepository();
- assertNotNull( repositoryConfiguration );
- assertRepositoryEquals( repositoryConfiguration, createRepository() );
-
- String status = action.execute();
- assertEquals( Action.SUCCESS, status );
-
- RemoteRepository repository = action.getRepository();
- assertRepositoryEquals( repository, createRepository() );
- assertEquals( Collections.singletonList( originalRepository ),
- action.getRemoteRepositoryAdmin().getRemoteRepositories() );
- }
-
- private Configuration createConfigurationForEditing( RemoteRepository repositoryConfiguration )
- {
- Configuration configuration = new Configuration();
- RemoteRepositoryConfiguration conf = new RemoteRepositoryConfiguration();
- conf.setId( repositoryConfiguration.getId() );
- conf.setLayout( repositoryConfiguration.getLayout() );
- conf.setUrl( repositoryConfiguration.getUrl() );
- conf.setName( repositoryConfiguration.getName() );
- configuration.addRemoteRepository( conf );
- return configuration;
- }
-
- private RemoteRepository createRepository()
- {
- RemoteRepository r = new RemoteRepository();
- r.setId( REPO_ID );
- populateRepository( r );
- return r;
- }
-
- private void assertRepositoryEquals( RemoteRepository expectedRepository, RemoteRepository actualRepository )
- {
- assertEquals( expectedRepository.getId(), actualRepository.getId() );
- assertEquals( expectedRepository.getLayout(), actualRepository.getLayout() );
- assertEquals( expectedRepository.getUrl(), actualRepository.getUrl() );
- assertEquals( expectedRepository.getName(), actualRepository.getName() );
- }
-
- private ManagedRepositoryConfiguration createManagedRepository( String string, String testPath )
- {
- ManagedRepositoryConfiguration r = new ManagedRepositoryConfiguration();
- r.setId( REPO_ID );
- r.setName( "repo name" );
- r.setLocation( testPath );
- r.setLayout( "default" );
- r.setRefreshCronExpression( "* 0/5 * * * ?" );
- r.setDaysOlder( 0 );
- r.setRetentionCount( 0 );
- r.setReleases( true );
- r.setSnapshots( true );
- r.setScanned( false );
- r.setDeleteReleasedSnapshots( false );
- return r;
- }
-
- private ProxyConnectorConfiguration createProxyConnector( String managedRepoId, String remoteRepoId )
- {
- ProxyConnectorConfiguration connector = new ProxyConnectorConfiguration();
- connector.setSourceRepoId( managedRepoId );
- connector.setTargetRepoId( remoteRepoId );
-
- return connector;
- }
-
- private void populateRepository( RemoteRepository repository )
- {
- repository.setId( REPO_ID );
- repository.setName( "repo name" );
- repository.setUrl( "url" );
- repository.setLayout( "default" );
- }
-
- // TODO: what about removing proxied content if a proxy is removed?
-}
+++ /dev/null
-package org.apache.archiva.web.action.admin.repositories;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import com.opensymphony.xwork2.Action;
-import org.apache.archiva.admin.model.RepositoryAdminException;
-import org.apache.archiva.admin.model.beans.RepositoryGroup;
-import org.apache.archiva.admin.repository.group.DefaultRepositoryGroupAdmin;
-import org.apache.archiva.configuration.ArchivaConfiguration;
-import org.apache.archiva.configuration.Configuration;
-import org.apache.archiva.configuration.RepositoryGroupConfiguration;
-import org.apache.archiva.web.action.AbstractActionTestCase;
-import org.apache.archiva.redback.integration.interceptor.SecureActionBundle;
-import org.apache.archiva.redback.integration.interceptor.SecureActionException;
-import org.easymock.MockControl;
-
-import java.util.Collections;
-import org.junit.Before;
-import org.junit.Test;
-
-/**
- * DeleteRepositoryGroupActionTest
- */
-public class DeleteRepositoryGroupActionTest
- extends AbstractActionTestCase
-{
- private static final String REPO_GROUP_ID = "repo-group-ident";
-
- private DeleteRepositoryGroupAction action;
-
- private MockControl archivaConfigurationControl;
-
- private ArchivaConfiguration archivaConfiguration;
-
- @Override
- @Before
- public void setUp()
- throws Exception
- {
- super.setUp();
-
- action = (DeleteRepositoryGroupAction) getActionProxy( "/admin/deleteRepositoryGroup.action" ).getAction();
-
- archivaConfigurationControl = MockControl.createControl( ArchivaConfiguration.class );
- archivaConfiguration = (ArchivaConfiguration) archivaConfigurationControl.getMock();
-
- ( (DefaultRepositoryGroupAdmin) action.getRepositoryGroupAdmin() ).setArchivaConfiguration(
- archivaConfiguration );
- }
-
- @Test
- public void testSecureActionBundle()
- throws SecureActionException, RepositoryAdminException
- {
- archivaConfiguration.getConfiguration();
- archivaConfigurationControl.setReturnValue( new Configuration() );
- archivaConfigurationControl.replay();
-
- action.prepare();
- SecureActionBundle bundle = action.getSecureActionBundle();
- assertTrue( bundle.requiresAuthentication() );
- assertEquals( 1, bundle.getAuthorizationTuples().size() );
- }
-
- @Test
- public void testDeleteRepositoryGroupConfirmation()
- throws Exception
- {
- RepositoryGroupConfiguration origRepoGroup = createRepositoryGroup();
- Configuration configuration = createConfigurationForEditing( origRepoGroup );
-
- archivaConfiguration.getConfiguration();
- archivaConfigurationControl.setReturnValue( configuration, 2 );
- archivaConfigurationControl.replay();
-
- action.setRepoGroupId( REPO_GROUP_ID );
-
- action.prepare();
- assertEquals( REPO_GROUP_ID, action.getRepoGroupId() );
- RepositoryGroup repoGroup = action.getRepositoryGroup();
- assertNotNull( repoGroup );
- assertEquals( repoGroup.getId(), action.getRepoGroupId() );
- assertEquals( Collections.singletonList( origRepoGroup ), configuration.getRepositoryGroups() );
- }
-
- @Test
- public void testDeleteRepositoryGroup()
- throws Exception
- {
- Configuration configuration = createConfigurationForEditing( createRepositoryGroup() );
-
- archivaConfiguration.getConfiguration();
- archivaConfigurationControl.setReturnValue( configuration, 7 );
- archivaConfiguration.save( configuration );
- archivaConfigurationControl.replay();
-
- action.setRepoGroupId( REPO_GROUP_ID );
-
- action.prepare();
- assertEquals( REPO_GROUP_ID, action.getRepoGroupId() );
- RepositoryGroup repoGroup = action.getRepositoryGroup();
- assertNotNull( repoGroup );
- assertEquals( Collections.singletonList( repoGroup ),
- action.getRepositoryGroupAdmin().getRepositoriesGroups() );
-
- String status = action.delete();
- assertEquals( Action.SUCCESS, status );
- assertTrue( configuration.getRepositoryGroups().isEmpty() );
- }
-
- @Test
- public void testDeleteRepositoryGroupCancelled()
- throws Exception
- {
- RepositoryGroupConfiguration origRepoGroup = createRepositoryGroup();
- Configuration configuration = createConfigurationForEditing( origRepoGroup );
-
- archivaConfiguration.getConfiguration();
- archivaConfigurationControl.setReturnValue( configuration, 4 );
-
- archivaConfiguration.save( configuration );
- archivaConfigurationControl.replay();
-
- action.setRepoGroupId( REPO_GROUP_ID );
-
- action.prepare();
- assertEquals( REPO_GROUP_ID, action.getRepoGroupId() );
- RepositoryGroup repoGroup = action.getRepositoryGroup();
- assertNotNull( repoGroup );
-
- String status = action.execute();
- assertEquals( Action.SUCCESS, status );
- assertEquals( Collections.singletonList( repoGroup ),
- action.getRepositoryGroupAdmin().getRepositoriesGroups() );
- }
-
- private Configuration createConfigurationForEditing( RepositoryGroupConfiguration repoGroup )
- {
- Configuration configuration = new Configuration();
- configuration.addRepositoryGroup( repoGroup );
- return configuration;
- }
-
- private RepositoryGroupConfiguration createRepositoryGroup()
- {
- RepositoryGroupConfiguration repoGroup = new RepositoryGroupConfiguration();
- repoGroup.setId( REPO_GROUP_ID );
-
- return repoGroup;
- }
-}
+++ /dev/null
-package org.apache.archiva.web.action.admin.repositories;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import com.opensymphony.xwork2.Action;
-import org.apache.archiva.admin.model.RepositoryAdminException;
-import org.apache.archiva.admin.model.beans.ManagedRepository;
-import org.apache.archiva.admin.repository.DefaultRepositoryCommonValidator;
-import org.apache.archiva.admin.repository.managed.DefaultManagedRepositoryAdmin;
-import org.apache.archiva.audit.AuditListener;
-import org.apache.archiva.configuration.ArchivaConfiguration;
-import org.apache.archiva.configuration.Configuration;
-import org.apache.archiva.configuration.ManagedRepositoryConfiguration;
-import org.apache.archiva.metadata.repository.MetadataRepository;
-import org.apache.archiva.metadata.repository.RepositorySession;
-import org.apache.archiva.metadata.repository.stats.RepositoryStatisticsManager;
-import org.apache.archiva.redback.integration.interceptor.SecureActionBundle;
-import org.apache.archiva.redback.integration.interceptor.SecureActionException;
-import org.apache.archiva.redback.role.RoleManager;
-import org.apache.archiva.scheduler.repository.RepositoryArchivaTaskScheduler;
-import org.apache.archiva.scheduler.repository.RepositoryTask;
-import org.apache.archiva.security.common.ArchivaRoleConstants;
-import org.apache.archiva.web.validator.utils.ValidatorUtil;
-import org.apache.archiva.webtest.memory.TestRepositorySessionFactory;
-import org.apache.commons.io.FileUtils;
-import org.easymock.MockControl;
-import org.easymock.classextension.MockClassControl;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.when;
-
-import org.apache.archiva.test.utils.ArchivaBlockJUnit4ClassRunner;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-/**
- * EditManagedRepositoryActionTest
- *
- *
- */
-@RunWith( ArchivaBlockJUnit4ClassRunner.class )
-public class EditManagedRepositoryActionTest
- extends AbstractManagedRepositoryActionTest
-{
- private EditManagedRepositoryAction action;
-
- private RoleManager roleManager;
-
- private MockControl roleManagerControl;
-
- private MockControl archivaConfigurationControl;
-
- private ArchivaConfiguration archivaConfiguration;
-
- private org.apache.archiva.redback.components.registry.Registry registry;
-
- private MockControl registryControl;
-
- private MetadataRepository metadataRepository;
-
- private MockControl repositoryTaskSchedulerControl;
-
- private RepositoryArchivaTaskScheduler repositoryTaskScheduler;
-
- @Override
- @Before
- public void setUp()
- throws Exception
- {
- super.setUp();
-
- action = new EditManagedRepositoryAction();
-
- archivaConfigurationControl = MockControl.createControl( ArchivaConfiguration.class );
- archivaConfiguration = (ArchivaConfiguration) archivaConfigurationControl.getMock();
-
- roleManagerControl = MockControl.createControl( RoleManager.class );
- roleManager = (RoleManager) roleManagerControl.getMock();
-
- registryControl = MockControl.createControl( org.apache.archiva.redback.components.registry.Registry.class );
- registry = (org.apache.archiva.redback.components.registry.Registry) registryControl.getMock();
-
- repositoryTaskSchedulerControl = MockClassControl.createControl( RepositoryArchivaTaskScheduler.class );
- repositoryTaskScheduler = (RepositoryArchivaTaskScheduler) repositoryTaskSchedulerControl.getMock();
-
- location = new File( System.getProperty( "basedir", "target/test/location" ) );
-
- metadataRepository = mock( MetadataRepository.class );
- RepositorySession repositorySession = mock( RepositorySession.class );
- when( repositorySession.getRepository() ).thenReturn( metadataRepository );
- TestRepositorySessionFactory factory = applicationContext.getBean( TestRepositorySessionFactory.class );
- factory.setRepositorySession( repositorySession );
-
- ( (DefaultManagedRepositoryAdmin) getManagedRepositoryAdmin() ).setArchivaConfiguration( archivaConfiguration );
- ( (DefaultManagedRepositoryAdmin) getManagedRepositoryAdmin() ).setRoleManager( roleManager );
- ( (DefaultManagedRepositoryAdmin) getManagedRepositoryAdmin() ).setRepositoryTaskScheduler(
- repositoryTaskScheduler );
- ( (DefaultManagedRepositoryAdmin) getManagedRepositoryAdmin() ).setRepositorySessionFactory( factory );
-
- ( (DefaultManagedRepositoryAdmin) getManagedRepositoryAdmin() ).setRegistry( registry );
-
- ( (DefaultManagedRepositoryAdmin) getManagedRepositoryAdmin() ).setAuditListeners(
- new ArrayList<AuditListener>( 0 ) );
-
- DefaultRepositoryCommonValidator defaultRepositoryCommonValidator = new DefaultRepositoryCommonValidator();
- defaultRepositoryCommonValidator.setArchivaConfiguration( archivaConfiguration );
- defaultRepositoryCommonValidator.setRegistry( registry );
-
- ( (DefaultManagedRepositoryAdmin) getManagedRepositoryAdmin() ).setRepositoryCommonValidator(
- defaultRepositoryCommonValidator );
-
- action.setRepositoryCommonValidator( defaultRepositoryCommonValidator );
-
- action.setManagedRepositoryAdmin( getManagedRepositoryAdmin() );
-
- }
-
- @Test
- public void testSecureActionBundle()
- throws SecureActionException, RepositoryAdminException
- {
- archivaConfiguration.getConfiguration();
- archivaConfigurationControl.setReturnValue( new Configuration() );
- archivaConfigurationControl.replay();
-
- action.prepare();
- SecureActionBundle bundle = action.getSecureActionBundle();
- assertTrue( bundle.requiresAuthentication() );
- assertEquals( 1, bundle.getAuthorizationTuples().size() );
- }
-
- @Test
- public void testEditRepositoryInitialPage()
- throws Exception
- {
- Configuration configuration = createConfigurationForEditing( createRepository() );
-
- archivaConfiguration.getConfiguration();
- archivaConfigurationControl.setReturnValue( configuration );
- Configuration stageRepoConfiguration = new Configuration();
- stageRepoConfiguration.addManagedRepository( createStagingRepository() );
- archivaConfigurationControl.setReturnValue( stageRepoConfiguration );
-
- archivaConfigurationControl.replay();
-
- action.setRepoid( REPO_ID );
-
- action.prepare();
- assertEquals( REPO_ID, action.getRepoid() );
- ManagedRepository repository = action.getRepository();
- assertNotNull( repository );
-
- ManagedRepository newRepository = createRepository();
- assertRepositoryEquals( repository, newRepository );
- assertEquals( repository.getLocation(), newRepository.getLocation() );
-
- String status = action.input();
- assertEquals( Action.INPUT, status );
- repository = action.getRepository();
- assertRepositoryEquals( repository, createRepository() );
- }
-
- @Test
- public void testEditRepository()
- throws Exception
- {
- String stageRepoId = REPO_ID + "-stage";
-
- roleManager.templatedRoleExists( ArchivaRoleConstants.TEMPLATE_REPOSITORY_OBSERVER, REPO_ID );
- roleManagerControl.setReturnValue( false );
- roleManager.createTemplatedRole( ArchivaRoleConstants.TEMPLATE_REPOSITORY_OBSERVER, REPO_ID );
- roleManagerControl.setVoidCallable();
-
- roleManager.templatedRoleExists( ArchivaRoleConstants.TEMPLATE_REPOSITORY_MANAGER, REPO_ID );
- roleManagerControl.setReturnValue( false );
- roleManager.createTemplatedRole( ArchivaRoleConstants.TEMPLATE_REPOSITORY_MANAGER, REPO_ID );
- roleManagerControl.setVoidCallable();
-
- roleManager.templatedRoleExists( ArchivaRoleConstants.TEMPLATE_REPOSITORY_OBSERVER, stageRepoId );
- roleManagerControl.setReturnValue( false );
- roleManager.createTemplatedRole( ArchivaRoleConstants.TEMPLATE_REPOSITORY_OBSERVER, stageRepoId );
- roleManagerControl.setVoidCallable();
-
- roleManager.templatedRoleExists( ArchivaRoleConstants.TEMPLATE_REPOSITORY_MANAGER, stageRepoId );
- roleManagerControl.setReturnValue( false );
- roleManager.createTemplatedRole( ArchivaRoleConstants.TEMPLATE_REPOSITORY_MANAGER, stageRepoId );
- roleManagerControl.setVoidCallable();
-
- roleManagerControl.replay();
-
- registry.getString( "appserver.base", "${appserver.base}" );
- registryControl.setReturnValue( "target/test", 1, 3 );
- registry.getString( "appserver.home", "${appserver.home}" );
- registryControl.setReturnValue( "target/test", 1, 3 );
-
- registryControl.replay();
-
- RepositoryTask task = new RepositoryTask();
- task.setRepositoryId( REPO_ID );
- repositoryTaskScheduler.isProcessingRepositoryTask( REPO_ID );
- repositoryTaskSchedulerControl.setReturnValue( false );
- repositoryTaskScheduler.queueTask( task );
- repositoryTaskSchedulerControl.setVoidCallable();
-
- RepositoryTask stageTask = new RepositoryTask();
- stageTask.setRepositoryId( stageRepoId );
- repositoryTaskScheduler.isProcessingRepositoryTask( stageRepoId );
- repositoryTaskSchedulerControl.setReturnValue( false );
- repositoryTaskScheduler.queueTask( stageTask );
- repositoryTaskSchedulerControl.setVoidCallable();
-
- repositoryTaskSchedulerControl.replay();
-
- Configuration configuration = createConfigurationForEditing( createRepository() );
- archivaConfiguration.getConfiguration();
- archivaConfigurationControl.setReturnValue( configuration );
- archivaConfigurationControl.setReturnValue( configuration );
- archivaConfigurationControl.setReturnValue( configuration );
-
- archivaConfigurationControl.setReturnValue( configuration );
- archivaConfigurationControl.setReturnValue( configuration );
-
- Configuration stageRepoConfiguration = new Configuration();
- stageRepoConfiguration.addManagedRepository( createStagingRepository() );
- archivaConfigurationControl.setReturnValue( stageRepoConfiguration );
- archivaConfigurationControl.setReturnValue( configuration );
- archivaConfigurationControl.setReturnValue( configuration );
-
- archivaConfiguration.save( configuration );
- archivaConfiguration.save( configuration );
-
- archivaConfiguration.save( configuration );
-
- archivaConfigurationControl.replay();
-
- action.setRepoid( REPO_ID );
- action.prepare();
- assertEquals( REPO_ID, action.getRepoid() );
- ManagedRepository repository = action.getRepository();
- populateRepository( repository );
- repository.setName( "new repo name" );
-
- MockControl repositoryStatisticsManagerControl = MockControl.createControl( RepositoryStatisticsManager.class );
- RepositoryStatisticsManager repositoryStatisticsManager =
- (RepositoryStatisticsManager) repositoryStatisticsManagerControl.getMock();
- ( (DefaultManagedRepositoryAdmin) getManagedRepositoryAdmin() ).setRepositoryStatisticsManager(
- repositoryStatisticsManager );
- repositoryStatisticsManager.deleteStatistics( metadataRepository , REPO_ID );
- repositoryStatisticsManagerControl.setVoidCallable();
- repositoryStatisticsManagerControl.replay();
-
- new File( "target/test/" + REPO_ID + "-stage" ).mkdirs();
-
- repository.setLocation( System.getProperty( "basedir" ) + "/target/test/" + REPO_ID );
-
- action.setRepository( repository );
- action.setStageNeeded( true );
- String status = action.commit();
- assertEquals( Action.SUCCESS, status );
-
- ManagedRepository newRepository = createRepository();
- newRepository.setName( "new repo name" );
- assertRepositoryEquals( repository, newRepository );
- //assertEquals( Collections.singletonList( repository ), configuration.getManagedRepositories() );
- //assertEquals( location.getCanonicalPath(), new File( repository.getLocation() ).getCanonicalPath() );
-
- roleManagerControl.verify();
- //archivaConfigurationControl.verify();
- repositoryStatisticsManagerControl.verify();
- registryControl.verify();
- }
-
- @Test
- public void testEditRepositoryLocationChanged()
- throws Exception
- {
- roleManager.templatedRoleExists( ArchivaRoleConstants.TEMPLATE_REPOSITORY_OBSERVER, REPO_ID );
- roleManagerControl.setReturnValue( false );
- roleManager.createTemplatedRole( ArchivaRoleConstants.TEMPLATE_REPOSITORY_OBSERVER, REPO_ID );
- roleManagerControl.setVoidCallable();
-
- roleManager.templatedRoleExists( ArchivaRoleConstants.TEMPLATE_REPOSITORY_MANAGER, REPO_ID );
- roleManagerControl.setReturnValue( false );
- roleManager.createTemplatedRole( ArchivaRoleConstants.TEMPLATE_REPOSITORY_MANAGER, REPO_ID );
- roleManagerControl.setVoidCallable();
-
- roleManager.templatedRoleExists( ArchivaRoleConstants.TEMPLATE_REPOSITORY_OBSERVER, REPO_ID + "-stage" );
- roleManagerControl.setReturnValue( false );
- roleManager.createTemplatedRole( ArchivaRoleConstants.TEMPLATE_REPOSITORY_OBSERVER, REPO_ID + "-stage" );
- roleManagerControl.setVoidCallable();
-
- roleManager.templatedRoleExists( ArchivaRoleConstants.TEMPLATE_REPOSITORY_MANAGER, REPO_ID + "-stage" );
- roleManagerControl.setReturnValue( false );
- roleManager.createTemplatedRole( ArchivaRoleConstants.TEMPLATE_REPOSITORY_MANAGER, REPO_ID + "-stage" );
- roleManagerControl.setVoidCallable();
-
- roleManagerControl.replay();
-
- registry.getString( "appserver.base" );
- registryControl.setReturnValue( "target/test", 1, 3 );
-
- registry.getString( "appserver.base", "${appserver.base}" );
- registryControl.setReturnValue( "target/test", 1, 3 );
- registry.getString( "appserver.home", "${appserver.home}" );
- registryControl.setReturnValue( "target/test", 1, 3 );
-
- registryControl.replay();
-
- RepositoryTask task = new RepositoryTask();
- task.setRepositoryId( REPO_ID );
- repositoryTaskScheduler.isProcessingRepositoryTask( REPO_ID );
- repositoryTaskSchedulerControl.setReturnValue( false );
- repositoryTaskScheduler.queueTask( task );
- repositoryTaskSchedulerControl.setVoidCallable();
-
- repositoryTaskSchedulerControl.replay();
-
- Configuration configuration = createConfigurationForEditing( createRepository() );
- archivaConfiguration.getConfiguration();
-
- archivaConfigurationControl.setReturnValue( configuration );
- archivaConfigurationControl.setReturnValue( configuration );
- archivaConfigurationControl.setReturnValue( configuration );
- archivaConfigurationControl.setReturnValue( configuration );
-
- archivaConfigurationControl.setReturnValue( configuration );
-
- archivaConfigurationControl.setReturnValue( buildEasyConfiguration() );
-
- Configuration stageRepoConfiguration = buildEasyConfiguration();
- stageRepoConfiguration.addManagedRepository( createStagingRepository() );
- archivaConfigurationControl.setReturnValue( stageRepoConfiguration );
-
- archivaConfigurationControl.setReturnValue( configuration );
- archivaConfigurationControl.setReturnValue( configuration );
-
- archivaConfiguration.save( configuration );
- configuration.addManagedRepository( stageRepoConfiguration.getManagedRepositories().get( 0 ) );
- archivaConfiguration.save( configuration );
- archivaConfiguration.save( configuration );
-
- archivaConfigurationControl.replay();
-
- MockControl repositoryStatisticsManagerControl = MockControl.createControl( RepositoryStatisticsManager.class );
- RepositoryStatisticsManager repositoryStatisticsManager =
- (RepositoryStatisticsManager) repositoryStatisticsManagerControl.getMock();
- ( (DefaultManagedRepositoryAdmin) getManagedRepositoryAdmin() ).setRepositoryStatisticsManager(
- repositoryStatisticsManager );
- repositoryStatisticsManager.deleteStatistics( metadataRepository, REPO_ID );
- repositoryStatisticsManagerControl.replay();
-
- new File( "target/test/location/" + REPO_ID + "-stage" ).mkdirs();
-
- action.setStageNeeded( true );
- action.setRepoid( REPO_ID );
- action.prepare();
- assertEquals( REPO_ID, action.getRepoid() );
-
- ManagedRepository repository = new ManagedRepository();
- populateRepository( repository );
- File testFile = new File( "target/test/location/new" );
- FileUtils.deleteDirectory( testFile );
- repository.setLocation( "${appserver.base}/location/new" );
- action.setRepository( repository );
- String status = action.commit();
- assertEquals( Action.SUCCESS, status );
- //assertEquals( Collections.singletonList( repository ), configuration.getManagedRepositories() );
- //assertEquals( testFile.getCanonicalPath(), new File( repository.getLocation() ).getCanonicalPath() );
-
- roleManagerControl.verify();
- //archivaConfigurationControl.verify();
- repositoryStatisticsManagerControl.verify();
- registryControl.verify();
- }
-
- @Test
- public void testStruts2ValidationFrameworkWithNullInputs()
- throws Exception
- {
- // prep
- // 0 is the default value for primitive int; null for objects
- ManagedRepository managedRepositoryConfiguration = createManagedRepository( null, null, null, null, 1, 1 );
- action.setRepository( managedRepositoryConfiguration );
-
- // test
- actionValidatorManager.validate( action, EMPTY_STRING );
-
- // verify
- assertTrue( action.hasFieldErrors() );
-
- Map<String, List<String>> fieldErrors = action.getFieldErrors();
-
- // make an expected field error object
- Map<String, List<String>> expectedFieldErrors = new HashMap<String, List<String>>();
-
- // populate
- List<String> expectedErrorMessages = new ArrayList<String>();
- expectedErrorMessages.add( "You must enter a repository identifier." );
- expectedFieldErrors.put( "repository.id", expectedErrorMessages );
-
- expectedErrorMessages = new ArrayList<String>();
- expectedErrorMessages.add( "You must enter a directory." );
- expectedFieldErrors.put( "repository.location", expectedErrorMessages );
-
- expectedErrorMessages = new ArrayList<String>();
- expectedErrorMessages.add( "You must enter a repository name." );
- expectedFieldErrors.put( "repository.name", expectedErrorMessages );
-
- ValidatorUtil.assertFieldErrors( expectedFieldErrors, fieldErrors );
- }
-
- @Test
- public void testStruts2ValidationFrameworkWithBlankInputs()
- throws Exception
- {
- // prep
- // 0 is the default value for primitive int
- ManagedRepository managedRepositoryConfiguration =
- createManagedRepository( EMPTY_STRING, EMPTY_STRING, EMPTY_STRING, EMPTY_STRING, 1, 1 );
- action.setRepository( managedRepositoryConfiguration );
-
- // test
- actionValidatorManager.validate( action, EMPTY_STRING );
-
- // verify
- assertTrue( action.hasFieldErrors() );
-
- Map<String, List<String>> fieldErrors = action.getFieldErrors();
-
- // make an expected field error object
- Map<String, List<String>> expectedFieldErrors = new HashMap<String, List<String>>();
-
- // populate
- List<String> expectedErrorMessages = new ArrayList<String>();
- expectedErrorMessages.add( "You must enter a repository identifier." );
- expectedFieldErrors.put( "repository.id", expectedErrorMessages );
-
- expectedErrorMessages = new ArrayList<String>();
- expectedErrorMessages.add( "You must enter a directory." );
- expectedFieldErrors.put( "repository.location", expectedErrorMessages );
-
- expectedErrorMessages = new ArrayList<String>();
- expectedErrorMessages.add( "You must enter a repository name." );
- expectedFieldErrors.put( "repository.name", expectedErrorMessages );
-
- ValidatorUtil.assertFieldErrors( expectedFieldErrors, fieldErrors );
- }
-
- @Test
- public void testStruts2ValidationFrameworkWithInvalidInputs()
- throws Exception
- {
- // prep
- ManagedRepository managedRepositoryConfiguration =
- createManagedRepository( REPOSITORY_ID_INVALID_INPUT, REPOSITORY_NAME_INVALID_INPUT,
- REPOSITORY_LOCATION_INVALID_INPUT, REPOSITORY_INDEX_DIR_INVALID_INPUT,
- REPOSITORY_DAYS_OLDER_INVALID_INPUT, REPOSITORY_RETENTION_COUNT_INVALID_INPUT );
- action.setRepository( managedRepositoryConfiguration );
-
- // test
- actionValidatorManager.validate( action, EMPTY_STRING );
-
- // verify
- assertTrue( action.hasFieldErrors() );
-
- Map<String, List<String>> fieldErrors = action.getFieldErrors();
-
- // make an expected field error object
- Map<String, List<String>> expectedFieldErrors = new HashMap<String, List<String>>();
-
- // populate
- List<String> expectedErrorMessages = new ArrayList<String>();
- expectedErrorMessages.add(
- "Identifier must only contain alphanumeric characters, underscores(_), dots(.), and dashes(-)." );
- expectedFieldErrors.put( "repository.id", expectedErrorMessages );
-
- expectedErrorMessages = new ArrayList<String>();
- expectedErrorMessages.add(
- "Directory must only contain alphanumeric characters, equals(=), question-marks(?), exclamation-points(!), ampersands(&), forward-slashes(/), back-slashes(\\), underscores(_), dots(.), colons(:), tildes(~), and dashes(-)." );
- expectedFieldErrors.put( "repository.location", expectedErrorMessages );
-
- expectedErrorMessages = new ArrayList<String>();
- expectedErrorMessages.add(
- "Repository Name must only contain alphanumeric characters, white-spaces(' '), forward-slashes(/), open-parenthesis('('), close-parenthesis(')'), underscores(_), dots(.), and dashes(-)." );
- expectedFieldErrors.put( "repository.name", expectedErrorMessages );
-
- expectedErrorMessages = new ArrayList<String>();
- expectedErrorMessages.add(
- "Index directory must only contain alphanumeric characters, equals(=), question-marks(?), exclamation-points(!), ampersands(&), forward-slashes(/), back-slashes(\\), underscores(_), dots(.), colons(:), tildes(~), and dashes(-)." );
- expectedFieldErrors.put( "repository.indexDirectory", expectedErrorMessages );
-
- expectedErrorMessages = new ArrayList<String>();
- expectedErrorMessages.add( "Repository Purge By Retention Count needs to be between 1 and 100." );
- expectedFieldErrors.put( "repository.retentionCount", expectedErrorMessages );
-
- expectedErrorMessages = new ArrayList<String>();
- expectedErrorMessages.add( "Repository Purge By Days Older Than needs to be larger than 0." );
- expectedFieldErrors.put( "repository.daysOlder", expectedErrorMessages );
-
- ValidatorUtil.assertFieldErrors( expectedFieldErrors, fieldErrors );
- }
-
- @Test
- public void testStruts2ValidationFrameworkWithValidInputs()
- throws Exception
- {
- // prep
- ManagedRepository managedRepositoryConfiguration =
- createManagedRepository( REPOSITORY_ID_VALID_INPUT, REPOSITORY_NAME_VALID_INPUT,
- REPOSITORY_LOCATION_VALID_INPUT, REPOSITORY_INDEX_DIR_VALID_INPUT,
- REPOSITORY_DAYS_OLDER_VALID_INPUT, REPOSITORY_RETENTION_COUNT_VALID_INPUT );
- action.setRepository( managedRepositoryConfiguration );
-
- // test
- actionValidatorManager.validate( action, EMPTY_STRING );
-
- // verify
- assertFalse( action.hasFieldErrors() );
- }
-
- private void assertRepositoryEquals( ManagedRepository expectedRepository, ManagedRepository actualRepository )
- {
- assertEquals( expectedRepository.getDaysOlder(), actualRepository.getDaysOlder() );
- assertEquals( expectedRepository.getId(), actualRepository.getId() );
- assertEquals( expectedRepository.getIndexDirectory(), actualRepository.getIndexDirectory() );
- assertEquals( expectedRepository.getLayout(), actualRepository.getLayout() );
- assertEquals( expectedRepository.getName(), actualRepository.getName() );
- assertEquals( expectedRepository.getCronExpression(), actualRepository.getCronExpression() );
- assertEquals( expectedRepository.getRetentionCount(), actualRepository.getRetentionCount() );
- assertEquals( expectedRepository.isDeleteReleasedSnapshots(), actualRepository.isDeleteReleasedSnapshots() );
- assertEquals( expectedRepository.isScanned(), actualRepository.isScanned() );
- assertEquals( expectedRepository.isReleases(), actualRepository.isReleases() );
- assertEquals( expectedRepository.isSnapshots(), actualRepository.isSnapshots() );
- }
-
- private Configuration createConfigurationForEditing( ManagedRepository repositoryConfiguration )
- throws Exception
- {
- Configuration configuration = buildEasyConfiguration();
-
- ManagedRepositoryConfiguration managedRepositoryConfiguration = new ManagedRepositoryConfiguration();
-
- managedRepositoryConfiguration.setDaysOlder( repositoryConfiguration.getDaysOlder() );
- managedRepositoryConfiguration.setIndexDir( repositoryConfiguration.getIndexDirectory() );
- managedRepositoryConfiguration.setRetentionCount( repositoryConfiguration.getRetentionCount() );
- managedRepositoryConfiguration.setBlockRedeployments( repositoryConfiguration.isBlockRedeployments() );
- managedRepositoryConfiguration.setDeleteReleasedSnapshots(
- repositoryConfiguration.isDeleteReleasedSnapshots() );
- managedRepositoryConfiguration.setLocation( repositoryConfiguration.getLocation() );
- managedRepositoryConfiguration.setRefreshCronExpression( repositoryConfiguration.getCronExpression() );
- managedRepositoryConfiguration.setReleases( repositoryConfiguration.isReleases() );
- managedRepositoryConfiguration.setScanned( repositoryConfiguration.isScanned() );
- managedRepositoryConfiguration.setId( repositoryConfiguration.getId() );
- managedRepositoryConfiguration.setName( repositoryConfiguration.getName() );
- managedRepositoryConfiguration.setLayout( repositoryConfiguration.getLayout() );
-
- configuration.addManagedRepository( managedRepositoryConfiguration );
- return configuration;
- }
-
- // easy configuration for hashCode/equals
- private Configuration buildEasyConfiguration()
- {
- return new Configuration()
- {
- @Override
- public int hashCode()
- {
- return getManagedRepositories().size();
- }
-
- @Override
- public boolean equals( Object o )
- {
- return true;
- }
- };
- }
-
- private ManagedRepository createRepository()
- throws IOException
- {
- ManagedRepository r = new ManagedRepository();
- r.setLocation( System.getProperty( "basedir" ) + "/target/repo-" + REPO_ID );
- r.setIndexDirectory( System.getProperty( "basedir" ) + "/target/repo-" + REPO_ID + "-index" );
- r.setId( REPO_ID );
- populateRepository( r );
- return r;
- }
-
- private ManagedRepositoryConfiguration createStagingRepository()
- throws IOException
- {
- ManagedRepositoryConfiguration r = new ManagedRepositoryConfiguration();
- r.setId( REPO_ID + "-stage" );
- r.setLocation( System.getProperty( "basedir" ) + "/target/" + REPO_ID + "-stage" );
- populateStagingRepository( r );
- return r;
- }
-
- private void populateStagingRepository( ManagedRepositoryConfiguration repository )
- throws IOException
- {
- repository.setId( REPO_ID + "-stage" );
- repository.setName( "repo name" );
- repository.setLocation( "${appserver.base}/location" );
- repository.setLayout( "default" );
- repository.setRefreshCronExpression( "* 0/5 * * * ?" );
- repository.setDaysOlder( 31 );
- repository.setRetentionCount( 20 );
- repository.setReleases( true );
- repository.setSnapshots( true );
- repository.setScanned( false );
- repository.setDeleteReleasedSnapshots( true );
- }
-}
+++ /dev/null
-package org.apache.archiva.web.action.admin.repositories;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import com.opensymphony.xwork2.Action;
-import org.apache.archiva.admin.model.RepositoryAdminException;
-import org.apache.archiva.admin.model.beans.RemoteRepository;
-import org.apache.archiva.admin.repository.remote.DefaultRemoteRepositoryAdmin;
-import org.apache.archiva.configuration.ArchivaConfiguration;
-import org.apache.archiva.configuration.Configuration;
-import org.apache.archiva.configuration.RemoteRepositoryConfiguration;
-import org.apache.struts2.StrutsSpringTestCase;
-import org.apache.archiva.redback.integration.interceptor.SecureActionBundle;
-import org.apache.archiva.redback.integration.interceptor.SecureActionException;
-import org.easymock.MockControl;
-
-import java.util.Collections;
-
-import org.apache.archiva.test.utils.ArchivaBlockJUnit4ClassRunner;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-/**
- * EditRemoteRepositoryActionTest
- *
- *
- */
-@RunWith( ArchivaBlockJUnit4ClassRunner.class )
-public class EditRemoteRepositoryActionTest
- extends StrutsSpringTestCase
-{
- private static final String REPO_ID = "remote-repo-ident";
-
- private EditRemoteRepositoryAction action;
-
- private MockControl archivaConfigurationControl;
-
- private ArchivaConfiguration archivaConfiguration;
-
- @Override
- protected String[] getContextLocations()
- {
- return new String[]{ "classpath*:/META-INF/spring-context.xml", "classpath*:/spring-context.xml" };
- }
-
- @Before
- @Override
- public void setUp()
- throws Exception
- {
- super.setUp();
-
- action = (EditRemoteRepositoryAction) getActionProxy( "/admin/editRemoteRepository.action" ).getAction();
-
- archivaConfigurationControl = MockControl.createControl( ArchivaConfiguration.class );
- archivaConfiguration = (ArchivaConfiguration) archivaConfigurationControl.getMock();
-
- ( (DefaultRemoteRepositoryAdmin) action.getRemoteRepositoryAdmin() ).setArchivaConfiguration(
- archivaConfiguration );
- }
-
- @Test
- public void testEditRemoteRepository()
- throws Exception
- {
- Configuration configuration = createConfigurationForEditing( createRepository() );
- archivaConfiguration.getConfiguration();
- archivaConfigurationControl.setReturnValue( configuration, 4, 6 );
- archivaConfiguration.save( configuration );
- archivaConfigurationControl.replay();
-
- action.setRepoid( REPO_ID );
- action.prepare();
-
- assertEquals( REPO_ID, action.getRepoid() );
- RemoteRepository repository = action.getRepository();
- populateRepository( repository );
- repository.setName( "new repo name" );
-
- String status = action.commit();
- assertEquals( Action.SUCCESS, status );
-
- RemoteRepository newRepository = createRepository();
- newRepository.setName( "new repo name" );
- assertRepositoryEquals( repository, newRepository );
- assertEquals( Collections.singletonList( repository ),
- action.getRemoteRepositoryAdmin().getRemoteRepositories() );
-
- archivaConfigurationControl.verify();
- }
-
- @Test
- public void testEditRemoteRepositoryInitialPage()
- throws Exception
- {
- Configuration configuration = createConfigurationForEditing( createRepository() );
-
- archivaConfiguration.getConfiguration();
- archivaConfigurationControl.setReturnValue( configuration, 2 );
- archivaConfigurationControl.replay();
-
- action.setRepoid( REPO_ID );
-
- action.prepare();
- assertEquals( REPO_ID, action.getRepoid() );
- RemoteRepository repository = action.getRepository();
- assertNotNull( repository );
- assertRepositoryEquals( repository, createRepository() );
-
- String status = action.input();
- assertEquals( Action.INPUT, status );
- repository = action.getRepository();
- assertRepositoryEquals( repository, createRepository() );
- }
-
- @Test
- public void testSecureActionBundle()
- throws SecureActionException, RepositoryAdminException
- {
- archivaConfiguration.getConfiguration();
- archivaConfigurationControl.setReturnValue( new Configuration() );
- archivaConfigurationControl.replay();
-
- action.prepare();
- SecureActionBundle bundle = action.getSecureActionBundle();
- assertTrue( bundle.requiresAuthentication() );
- assertEquals( 1, bundle.getAuthorizationTuples().size() );
- }
-
- private void assertRepositoryEquals( RemoteRepository expectedRepository, RemoteRepository actualRepository )
- {
- assertEquals( expectedRepository.getId(), actualRepository.getId() );
- assertEquals( expectedRepository.getLayout(), actualRepository.getLayout() );
- assertEquals( expectedRepository.getUrl(), actualRepository.getUrl() );
- assertEquals( expectedRepository.getName(), actualRepository.getName() );
- }
-
- private Configuration createConfigurationForEditing( RemoteRepository repositoryConfiguration )
- {
- Configuration configuration = new Configuration();
- RemoteRepositoryConfiguration conf = new RemoteRepositoryConfiguration();
- conf.setId( repositoryConfiguration.getId() );
- conf.setLayout( repositoryConfiguration.getLayout() );
- conf.setUrl( repositoryConfiguration.getUrl() );
- conf.setName( repositoryConfiguration.getName() );
- configuration.addRemoteRepository( conf );
- return configuration;
- }
-
- private RemoteRepository createRepository()
- {
- RemoteRepository r = new RemoteRepository();
- r.setId( REPO_ID );
- populateRepository( r );
- return r;
- }
-
- private void populateRepository( RemoteRepository repository )
- {
- repository.setId( REPO_ID );
- repository.setName( "repo name" );
- repository.setUrl( "url" );
- repository.setLayout( "default" );
- }
-}
+++ /dev/null
-package org.apache.archiva.web.action.admin.repositories;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import com.meterware.servletunit.ServletRunner;
-import com.meterware.servletunit.ServletUnitClient;
-import com.opensymphony.xwork2.Action;
-import org.apache.archiva.admin.repository.group.DefaultRepositoryGroupAdmin;
-import org.apache.archiva.admin.repository.managed.DefaultManagedRepositoryAdmin;
-import org.apache.archiva.admin.repository.remote.DefaultRemoteRepositoryAdmin;
-import org.apache.archiva.metadata.repository.MetadataRepository;
-import org.apache.archiva.metadata.repository.RepositorySession;
-import org.apache.archiva.webtest.memory.TestRepositorySessionFactory;
-import org.apache.archiva.metadata.repository.stats.RepositoryStatistics;
-import org.apache.archiva.configuration.ArchivaConfiguration;
-import org.apache.struts2.StrutsSpringTestCase;
-import org.apache.archiva.redback.integration.interceptor.SecureActionBundle;
-import org.apache.archiva.redback.integration.interceptor.SecureActionException;
-import org.easymock.MockControl;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.util.Arrays;
-
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.when;
-import org.apache.archiva.test.utils.ArchivaBlockJUnit4ClassRunner;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-/**
- * Test the repositories action returns the correct data.
- */
-@RunWith( ArchivaBlockJUnit4ClassRunner.class )
-public class RepositoriesActionTest
- extends StrutsSpringTestCase
-{
- private Logger log = LoggerFactory.getLogger( getClass() );
-
- private RepositoriesAction action;
-
- ArchivaConfiguration originalArchivaConfiguration;
-
- @Override
- @Before
- public void setUp()
- throws Exception
- {
-
- super.setUp();
-
- action = (RepositoriesAction) getActionProxy( "/admin/index.action" ).getAction();
- originalArchivaConfiguration =
- ( (DefaultRepositoryGroupAdmin) action.getRepositoryGroupAdmin() ).getArchivaConfiguration();
- // some other test are modifying archivaConfiguration with a mocked instance : this test need the real one
- // so use the real one from spring, backup the mock and restore it at the end (tearDown)
- ArchivaConfiguration real = applicationContext.getBean( ArchivaConfiguration.class );
- ( (DefaultRepositoryGroupAdmin) action.getRepositoryGroupAdmin() ).setArchivaConfiguration( real );
- ( (DefaultManagedRepositoryAdmin) action.getManagedRepositoryAdmin() ).setArchivaConfiguration( real );
- ( (DefaultRemoteRepositoryAdmin) action.getRemoteRepositoryAdmin() ).setArchivaConfiguration( real );
- }
-
-
- @Override
- @After
- public void tearDown()
- throws Exception
- {
- super.tearDown();
- ( (DefaultRepositoryGroupAdmin) action.getRepositoryGroupAdmin() ).setArchivaConfiguration(
- originalArchivaConfiguration );
- ( (DefaultManagedRepositoryAdmin) action.getManagedRepositoryAdmin() ).setArchivaConfiguration(
- originalArchivaConfiguration );
- ( (DefaultRemoteRepositoryAdmin) action.getRemoteRepositoryAdmin() ).setArchivaConfiguration(
- originalArchivaConfiguration );
- }
-
- @Override
- protected String[] getContextLocations()
- {
- return new String[]{ "classpath*:/META-INF/spring-context.xml", "classpath*:/spring-context.xml" };
- }
-
- @Test
- public void testGetRepositories()
- throws Exception
- {
- try
- {
- MockControl control = MockControl.createControl( MetadataRepository.class );
- MetadataRepository metadataRepository = (MetadataRepository) control.getMock();
- control.expectAndReturn( metadataRepository.getMetadataFacets( "internal", RepositoryStatistics.FACET_ID ),
- Arrays.asList( "20091125.123456.678" ) );
- control.expectAndReturn(
- metadataRepository.getMetadataFacet( "internal", RepositoryStatistics.FACET_ID, "20091125.123456.678" ),
- new RepositoryStatistics() );
- control.expectAndReturn( metadataRepository.getMetadataFacets( "snapshots", RepositoryStatistics.FACET_ID ),
- Arrays.asList( "20091112.012345.012" ) );
- control.expectAndReturn( metadataRepository.getMetadataFacet( "snapshots", RepositoryStatistics.FACET_ID,
- "20091112.012345.012" ),
- new RepositoryStatistics() );
- control.replay();
-
- RepositorySession session = mock( RepositorySession.class );
- when( session.getRepository() ).thenReturn( metadataRepository );
- TestRepositorySessionFactory factory =
- applicationContext.getBean( "repositorySessionFactory#test", TestRepositorySessionFactory.class );
- factory.setRepositorySession( session );
-
- ServletRunner sr = new ServletRunner();
- ServletUnitClient sc = sr.newClient();
-
- action.setServletRequest( sc.newInvocation( "http://localhost/admin/repositories.action" ).getRequest() );
-
- action.prepare();
- String result = action.execute();
- assertEquals( Action.SUCCESS, result );
-
- // TODO: for some reason servletunit is not populating the port of the servlet request
- assertEquals( "http://localhost:0/repository", action.getBaseUrl() );
-
- assertNotNull( action.getManagedRepositories() );
- assertNotNull( action.getRemoteRepositories() );
- assertNotNull( action.getRepositoryStatistics() );
-
- assertEquals( 2, action.getManagedRepositories().size() );
- assertEquals( 1, action.getRemoteRepositories().size() );
- assertEquals( 2, action.getRepositoryStatistics().size() );
-
- control.verify();
- }
- catch ( Exception e )
- {
- log.error( e.getMessage(), e );
- throw e;
- }
- }
-
- @Test
- public void testSecureActionBundle()
- throws SecureActionException
- {
- SecureActionBundle bundle = action.getSecureActionBundle();
- assertTrue( bundle.requiresAuthentication() );
- assertEquals( 1, bundle.getAuthorizationTuples().size() );
- }
-}
+++ /dev/null
-package org.apache.archiva.web.action.admin.repositories;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import com.meterware.servletunit.ServletRunner;
-import com.meterware.servletunit.ServletUnitClient;
-import com.opensymphony.xwork2.Action;
-import org.apache.archiva.admin.model.RepositoryAdminException;
-import org.apache.archiva.admin.model.beans.RepositoryGroup;
-import org.apache.archiva.admin.repository.group.DefaultRepositoryGroupAdmin;
-import org.apache.archiva.admin.repository.managed.DefaultManagedRepositoryAdmin;
-import org.apache.archiva.configuration.ArchivaConfiguration;
-import org.apache.archiva.configuration.Configuration;
-import org.apache.archiva.configuration.ManagedRepositoryConfiguration;
-import org.apache.archiva.configuration.RepositoryGroupConfiguration;
-import org.apache.archiva.web.action.AbstractActionTestCase;
-import org.apache.archiva.redback.integration.interceptor.SecureActionBundle;
-import org.apache.archiva.redback.integration.interceptor.SecureActionException;
-import org.easymock.MockControl;
-
-import java.util.Collections;
-import java.util.List;
-import org.junit.Test;
-
-/**
- * RepositoryGroupsActionTest
- */
-public class RepositoryGroupsActionTest
- extends AbstractActionTestCase
-{
- private static final String REPO_GROUP_ID = "repo-group-ident";
-
- private static final String REPO1_ID = "managed-repo-ident-1";
-
- private static final String REPO2_ID = "managed-repo-ident-2";
-
- private RepositoryGroupsAction action;
-
- private MockControl archivaConfigurationControl;
-
- private ArchivaConfiguration archivaConfiguration;
-
- @Override
- public void setUp()
- throws Exception
- {
- super.setUp();
-
- action = (RepositoryGroupsAction) getActionProxy( "/admin/repositoryGroups.action" ).getAction();
-
- archivaConfigurationControl = MockControl.createControl( ArchivaConfiguration.class );
- archivaConfiguration = (ArchivaConfiguration) archivaConfigurationControl.getMock();
-
- ( (DefaultRepositoryGroupAdmin) action.getRepositoryGroupAdmin() ).setArchivaConfiguration(
- archivaConfiguration );
- ( (DefaultManagedRepositoryAdmin) ( (DefaultRepositoryGroupAdmin) action.getRepositoryGroupAdmin() ).getManagedRepositoryAdmin() ).setArchivaConfiguration(
- archivaConfiguration );
- }
-
- @Test
- public void testSecureActionBundle()
- throws SecureActionException, RepositoryAdminException
- {
- archivaConfiguration.getConfiguration();
- archivaConfigurationControl.setReturnValue( new Configuration(), 3, 5 );
- archivaConfigurationControl.replay();
-
- action.prepare();
- SecureActionBundle bundle = action.getSecureActionBundle();
- assertTrue( bundle.requiresAuthentication() );
- assertEquals( 1, bundle.getAuthorizationTuples().size() );
- }
-
- @Test
- public void testAddRepositoryGroup()
- throws Exception
- {
- Configuration configuration = new Configuration();
- archivaConfiguration.getConfiguration();
- archivaConfigurationControl.setReturnValue( configuration, 6, 8 );
-
- archivaConfiguration.save( configuration );
- archivaConfigurationControl.replay();
-
- action.prepare();
- RepositoryGroup repositoryGroup = action.getRepositoryGroup();
- repositoryGroup.setId( REPO_GROUP_ID );
-
- String status = action.addRepositoryGroup();
- assertEquals( Action.SUCCESS, status );
-
- assertEquals( Collections.singletonList( repositoryGroup ),
- action.getRepositoryGroupAdmin().getRepositoriesGroups() );
-
- archivaConfigurationControl.verify();
- }
-
- @Test
- public void testAddEmptyRepositoryGroup()
- throws Exception
- {
- Configuration configuration = new Configuration();
- archivaConfiguration.getConfiguration();
- archivaConfigurationControl.setReturnValue( configuration, 5, 7 );
-
- archivaConfiguration.save( configuration );
-
- archivaConfigurationControl.replay();
-
- action.prepare();
-
- String status = action.addRepositoryGroup();
- assertEquals( Action.ERROR, status );
-
- assertEquals( 0, configuration.getRepositoryGroups().size() );
- }
-
- @Test
- public void testAddDuplicateRepositoryGroup()
- throws Exception
- {
- Configuration configuration = new Configuration();
- archivaConfiguration.getConfiguration();
- archivaConfigurationControl.setReturnValue( configuration, 10, 12 );
-
- archivaConfiguration.save( configuration );
-
- archivaConfigurationControl.replay();
-
- action.prepare();
- RepositoryGroup repositoryGroup = action.getRepositoryGroup();
- repositoryGroup.setId( REPO_GROUP_ID );
-
- String status = action.addRepositoryGroup();
- assertEquals( Action.SUCCESS, status );
-
- assertEquals( Collections.singletonList( repositoryGroup ),
- action.getRepositoryGroupAdmin().getRepositoriesGroups() );
-
- repositoryGroup.setId( REPO_GROUP_ID );
- status = action.addRepositoryGroup();
-
- assertEquals( Action.ERROR, status );
- assertEquals( Collections.singletonList( repositoryGroup ),
- action.getRepositoryGroupAdmin().getRepositoriesGroups() );
- }
-
- @Test
- public void testGetRepositoryGroups()
- throws Exception
- {
- ServletRunner sr = new ServletRunner();
- ServletUnitClient sc = sr.newClient();
-
- Configuration configuration = createInitialConfiguration();
-
- archivaConfiguration.getConfiguration();
- archivaConfigurationControl.setReturnValue( configuration, 6, 8 );
- archivaConfigurationControl.replay();
-
- action.setServletRequest( sc.newInvocation( "http://localhost/admin/repositoryGroups.action" ).getRequest() );
- action.prepare();
- String result = action.execute();
- assertEquals( Action.SUCCESS, result );
-
- assertEquals( "http://localhost:0/repository", action.getBaseUrl() );
-
- assertNotNull( action.getRepositoryGroups() );
- assertEquals( 1, action.getRepositoryGroups().size() );
- assertEquals( 2, action.getManagedRepositories().size() );
-
- RepositoryGroup repoGroup = action.getRepositoryGroups().get( REPO_GROUP_ID );
-
- assertEquals( 1, repoGroup.getRepositories().size() );
- assertEquals( REPO1_ID, repoGroup.getRepositories().get( 0 ) );
- assertNotNull( action.getGroupToRepositoryMap() );
- assertEquals( 1, action.getGroupToRepositoryMap().size() );
-
- List<String> repos = action.getGroupToRepositoryMap().get( repoGroup.getId() );
- assertEquals( 1, repos.size() );
- assertEquals( REPO2_ID, repos.get( 0 ) );
- }
-
- @Test
- public void testAddRepositoryToGroup()
- throws Exception
- {
- Configuration configuration = createInitialConfiguration();
-
- archivaConfiguration.getConfiguration();
- archivaConfigurationControl.setReturnValue( configuration, 20, 24 );
- archivaConfiguration.save( configuration );
- archivaConfigurationControl.replay();
-
- action.prepare();
- String result = action.execute();
- assertEquals( Action.SUCCESS, result );
-
- assertNotNull( action.getRepositoryGroups() );
- assertEquals( 1, action.getRepositoryGroups().size() );
- assertEquals( 2, action.getManagedRepositories().size() );
-
- RepositoryGroup repoGroup = action.getRepositoryGroups().get( REPO_GROUP_ID );
- assertEquals( 1, repoGroup.getRepositories().size() );
- assertEquals( REPO1_ID, repoGroup.getRepositories().get( 0 ) );
-
- assertNotNull( action.getGroupToRepositoryMap() );
- assertEquals( 1, action.getGroupToRepositoryMap().size() );
-
- List<String> repos = action.getGroupToRepositoryMap().get( repoGroup.getId() );
- assertEquals( 1, repos.size() );
- assertEquals( REPO2_ID, repos.get( 0 ) );
-
- action.setRepoGroupId( REPO_GROUP_ID );
- action.setRepoId( REPO2_ID );
-
- result = action.addRepositoryToGroup();
- assertEquals( Action.SUCCESS, result );
-
- action.prepare();
- result = action.execute();
- assertEquals( Action.SUCCESS, result );
-
- assertEquals( 1, action.getRepositoryGroups().size() );
- repoGroup = action.getRepositoryGroups().get( REPO_GROUP_ID );
- assertEquals( 2, repoGroup.getRepositories().size() );
- assertEquals( REPO1_ID, repoGroup.getRepositories().get( 0 ) );
- assertEquals( REPO2_ID, repoGroup.getRepositories().get( 1 ) );
-
- assertEquals( 0, action.getGroupToRepositoryMap().size() );
- assertNull( action.getGroupToRepositoryMap().get( repoGroup.getId() ) );
- }
-
- @Test
- public void testRemoveRepositoryFromGroup()
- throws Exception
- {
- Configuration configuration = createInitialConfiguration();
-
- archivaConfiguration.getConfiguration();
- archivaConfigurationControl.setReturnValue( configuration, 19, 22 );
- archivaConfiguration.save( configuration );
- archivaConfigurationControl.replay();
-
- action.prepare();
- String result = action.execute();
- assertEquals( Action.SUCCESS, result );
-
- assertNotNull( action.getRepositoryGroups() );
- assertEquals( 1, action.getRepositoryGroups().size() );
- assertEquals( 2, action.getManagedRepositories().size() );
-
- RepositoryGroup repoGroup = action.getRepositoryGroups().get( REPO_GROUP_ID );
- assertEquals( 1, repoGroup.getRepositories().size() );
- assertEquals( REPO1_ID, repoGroup.getRepositories().get( 0 ) );
-
- assertNotNull( action.getGroupToRepositoryMap() );
- assertEquals( 1, action.getGroupToRepositoryMap().size() );
-
- List<String> repos = action.getGroupToRepositoryMap().get( repoGroup.getId() );
- assertEquals( 1, repos.size() );
- assertEquals( REPO2_ID, repos.get( 0 ) );
-
- action.setRepoGroupId( REPO_GROUP_ID );
- action.setRepoId( REPO1_ID );
-
- result = action.removeRepositoryFromGroup();
- assertEquals( Action.SUCCESS, result );
-
- action.prepare();
- result = action.execute();
- assertEquals( Action.SUCCESS, result );
-
- repoGroup = action.getRepositoryGroups().get( REPO_GROUP_ID );
- assertEquals( 0, repoGroup.getRepositories().size() );
-
- assertNotNull( action.getGroupToRepositoryMap() );
- assertEquals( 1, action.getGroupToRepositoryMap().size() );
-
- repos = action.getGroupToRepositoryMap().get( repoGroup.getId() );
- assertEquals( 2, repos.size() );
- assertEquals( REPO1_ID, repos.get( 0 ) );
- assertEquals( REPO2_ID, repos.get( 1 ) );
- }
-
- @Test
- public void testAddDuplicateRepositoryToGroup()
- throws Exception
- {
- Configuration configuration = createInitialConfiguration();
-
- archivaConfiguration.getConfiguration();
- archivaConfigurationControl.setReturnValue( configuration, 6, 10 );
- archivaConfiguration.save( configuration );
- archivaConfigurationControl.replay();
-
- action.prepare();
- String result = action.execute();
- assertEquals( Action.SUCCESS, result );
-
- assertNotNull( action.getRepositoryGroups() );
- assertEquals( 1, action.getRepositoryGroups().size() );
- assertEquals( 2, action.getManagedRepositories().size() );
-
- RepositoryGroup repoGroup = action.getRepositoryGroups().get( REPO_GROUP_ID );
- assertEquals( 1, repoGroup.getRepositories().size() );
- assertEquals( REPO1_ID, repoGroup.getRepositories().get( 0 ) );
-
- assertNotNull( action.getGroupToRepositoryMap() );
- assertEquals( 1, action.getGroupToRepositoryMap().size() );
-
- List<String> repos = action.getGroupToRepositoryMap().get( repoGroup.getId() );
- assertEquals( 1, repos.size() );
- assertEquals( REPO2_ID, repos.get( 0 ) );
-
- action.setRepoGroupId( REPO_GROUP_ID );
- action.setRepoId( REPO1_ID );
-
- result = action.addRepositoryToGroup();
- assertEquals( Action.ERROR, result );
- }
-
- @Test
- public void testRemoveRepositoryNotInGroup()
- throws Exception
- {
- Configuration configuration = createInitialConfiguration();
-
- archivaConfiguration.getConfiguration();
- archivaConfigurationControl.setReturnValue( configuration, 6, 10 );
- archivaConfiguration.save( configuration );
- archivaConfigurationControl.replay();
-
- action.prepare();
- String result = action.execute();
- assertEquals( Action.SUCCESS, result );
-
- assertNotNull( action.getRepositoryGroups() );
- assertEquals( 1, action.getRepositoryGroups().size() );
- assertEquals( 2, action.getManagedRepositories().size() );
-
- RepositoryGroup repoGroup = action.getRepositoryGroups().get( REPO_GROUP_ID );
- assertEquals( 1, repoGroup.getRepositories().size() );
- assertEquals( REPO1_ID, repoGroup.getRepositories().get( 0 ) );
-
- assertNotNull( action.getGroupToRepositoryMap() );
- assertEquals( 1, action.getGroupToRepositoryMap().size() );
-
- List<String> repos = action.getGroupToRepositoryMap().get( repoGroup.getId() );
- assertEquals( 1, repos.size() );
- assertEquals( REPO2_ID, repos.get( 0 ) );
-
- action.setRepoGroupId( REPO_GROUP_ID );
- action.setRepoId( REPO2_ID );
-
- result = action.removeRepositoryFromGroup();
- assertEquals( Action.ERROR, result );
- }
-
- private Configuration createInitialConfiguration()
- {
- Configuration config = new Configuration();
-
- ManagedRepositoryConfiguration managedRepo1 = new ManagedRepositoryConfiguration();
- managedRepo1.setId( REPO1_ID );
-
- config.addManagedRepository( managedRepo1 );
-
- ManagedRepositoryConfiguration managedRepo2 = new ManagedRepositoryConfiguration();
- managedRepo2.setId( REPO2_ID );
-
- config.addManagedRepository( managedRepo2 );
-
- RepositoryGroupConfiguration repoGroup = new RepositoryGroupConfiguration();
- repoGroup.setId( REPO_GROUP_ID );
- repoGroup.addRepository( REPO1_ID );
-
- config.addRepositoryGroup( repoGroup );
-
- return config;
- }
-}
+++ /dev/null
-package org.apache.archiva.web.action.admin.repositories;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import com.opensymphony.xwork2.Action;
-import org.apache.archiva.configuration.ArchivaConfiguration;
-import org.apache.archiva.configuration.Configuration;
-import org.apache.archiva.configuration.RepositoryGroupConfiguration;
-import org.apache.struts2.StrutsSpringTestCase;
-import org.apache.archiva.redback.integration.interceptor.SecureActionBundle;
-import org.apache.archiva.redback.integration.interceptor.SecureActionException;
-import org.easymock.MockControl;
-
-import org.apache.archiva.test.utils.ArchivaBlockJUnit4ClassRunner;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-/**
- * SortRepositoriesActionTest
- */
-@RunWith( ArchivaBlockJUnit4ClassRunner.class )
-public class SortRepositoriesActionTest
- extends StrutsSpringTestCase
-{
- private static final String REPO_GROUP_ID = "repo-group-ident";
-
- private static final String REPO1_ID = "managed-repo-ident-1";
-
- private static final String REPO2_ID = "managed-repo-ident-2";
-
- private static final String REPO3_ID = "managed-repo-ident-3";
-
- private MockControl archivaConfigurationControl;
-
- private ArchivaConfiguration archivaConfiguration;
-
- private ArchivaConfiguration originalArchivaConfiguration;
-
- private SortRepositoriesAction action;
-
- @Override
- protected String[] getContextLocations()
- {
- return new String[]{ "classpath*:/META-INF/spring-context.xml", "classpath*:/spring-context.xml" };
- }
-
- @Before
- @Override
- public void setUp()
- throws Exception
- {
- super.setUp();
- action = (SortRepositoriesAction) getActionProxy( "/admin/sortDownRepositoryFromGroup.action" ).getAction();
- archivaConfigurationControl = MockControl.createControl( ArchivaConfiguration.class );
- archivaConfiguration = (ArchivaConfiguration) archivaConfigurationControl.getMock();
- originalArchivaConfiguration = action.archivaConfiguration;
- action.setArchivaConfiguration( archivaConfiguration );
- }
-
- @Override
- @After
- public void tearDown()
- throws Exception
- {
- super.tearDown();
- action.archivaConfiguration = originalArchivaConfiguration;
- }
-
- @Test
- public void testSecureActionBundle()
- throws SecureActionException
- {
- archivaConfiguration.getConfiguration();
- archivaConfigurationControl.setReturnValue( new Configuration() );
- archivaConfigurationControl.replay();
-
- SecureActionBundle bundle = action.getSecureActionBundle();
- assertTrue( bundle.requiresAuthentication() );
- assertEquals( 1, bundle.getAuthorizationTuples().size() );
- }
-
- @Test
- public void testSortDownFirstRepository()
- throws Exception
- {
- Configuration configuration = createInitialConfiguration();
-
- archivaConfiguration.getConfiguration();
- archivaConfigurationControl.setReturnValue( configuration, 4 );
- archivaConfiguration.save( configuration );
- archivaConfigurationControl.replay();
-
- RepositoryGroupConfiguration repoGroup =
- (RepositoryGroupConfiguration) configuration.getRepositoryGroups().get( 0 );
- java.util.List<String> repositories = repoGroup.getRepositories();
-
- assertEquals( 3, repositories.size() );
- assertEquals( REPO1_ID, repositories.get( 0 ) );
- assertEquals( REPO2_ID, repositories.get( 1 ) );
- assertEquals( REPO3_ID, repositories.get( 2 ) );
-
- // sort down first repo
- action.setRepoGroupId( repoGroup.getId() );
- action.setTargetRepo( REPO1_ID );
-
- String result = action.sortDown();
- assertEquals( Action.SUCCESS, result );
-
- repoGroup = (RepositoryGroupConfiguration) configuration.getRepositoryGroups().get( 0 );
- repositories = repoGroup.getRepositories();
- assertEquals( 3, repositories.size() );
- assertEquals( REPO2_ID, repositories.get( 0 ) );
- assertEquals( REPO1_ID, repositories.get( 1 ) );
- assertEquals( REPO3_ID, repositories.get( 2 ) );
- }
-
- @Test
- public void testSortDownLastRepository()
- throws Exception
- {
- Configuration configuration = createInitialConfiguration();
-
- archivaConfiguration.getConfiguration();
- archivaConfigurationControl.setReturnValue( configuration, 4 );
- archivaConfiguration.save( configuration );
- archivaConfigurationControl.replay();
-
- RepositoryGroupConfiguration repoGroup =
- (RepositoryGroupConfiguration) configuration.getRepositoryGroups().get( 0 );
- java.util.List<String> repositories = repoGroup.getRepositories();
-
- assertEquals( 3, repositories.size() );
- assertEquals( REPO1_ID, repositories.get( 0 ) );
- assertEquals( REPO2_ID, repositories.get( 1 ) );
- assertEquals( REPO3_ID, repositories.get( 2 ) );
-
- // sort down last repo
- action.setRepoGroupId( repoGroup.getId() );
- action.setTargetRepo( REPO3_ID );
-
- String result = action.sortDown();
- assertEquals( Action.SUCCESS, result );
-
- repoGroup = (RepositoryGroupConfiguration) configuration.getRepositoryGroups().get( 0 );
- repositories = repoGroup.getRepositories();
- assertEquals( 3, repositories.size() );
- assertEquals( REPO1_ID, repositories.get( 0 ) );
- assertEquals( REPO2_ID, repositories.get( 1 ) );
- assertEquals( REPO3_ID, repositories.get( 2 ) );
- }
-
- @Test
- public void testSortUpLastRepository()
- throws Exception
- {
- Configuration configuration = createInitialConfiguration();
-
- archivaConfiguration.getConfiguration();
- archivaConfigurationControl.setReturnValue( configuration, 4 );
- archivaConfiguration.save( configuration );
- archivaConfigurationControl.replay();
-
- RepositoryGroupConfiguration repoGroup =
- (RepositoryGroupConfiguration) configuration.getRepositoryGroups().get( 0 );
- java.util.List<String> repositories = repoGroup.getRepositories();
-
- assertEquals( 3, repositories.size() );
- assertEquals( REPO1_ID, repositories.get( 0 ) );
- assertEquals( REPO2_ID, repositories.get( 1 ) );
- assertEquals( REPO3_ID, repositories.get( 2 ) );
-
- // sort up last repo
- action.setRepoGroupId( repoGroup.getId() );
- action.setTargetRepo( REPO3_ID );
-
- String result = action.sortUp();
- assertEquals( Action.SUCCESS, result );
-
- repoGroup = (RepositoryGroupConfiguration) configuration.getRepositoryGroups().get( 0 );
- repositories = repoGroup.getRepositories();
- assertEquals( 3, repositories.size() );
- assertEquals( REPO1_ID, repositories.get( 0 ) );
- assertEquals( REPO3_ID, repositories.get( 1 ) );
- assertEquals( REPO2_ID, repositories.get( 2 ) );
- }
-
- @Test
- public void testSortUpFirstRepository()
- throws Exception
- {
- Configuration configuration = createInitialConfiguration();
-
- archivaConfiguration.getConfiguration();
- archivaConfigurationControl.setReturnValue( configuration, 4 );
- archivaConfiguration.save( configuration );
- archivaConfigurationControl.replay();
-
- RepositoryGroupConfiguration repoGroup =
- (RepositoryGroupConfiguration) configuration.getRepositoryGroups().get( 0 );
- java.util.List<String> repositories = repoGroup.getRepositories();
-
- assertEquals( 3, repositories.size() );
- assertEquals( REPO1_ID, repositories.get( 0 ) );
- assertEquals( REPO2_ID, repositories.get( 1 ) );
- assertEquals( REPO3_ID, repositories.get( 2 ) );
-
- // sort up first repo
- action.setRepoGroupId( repoGroup.getId() );
- action.setTargetRepo( REPO1_ID );
-
- String result = action.sortUp();
- assertEquals( Action.SUCCESS, result );
-
- repoGroup = (RepositoryGroupConfiguration) configuration.getRepositoryGroups().get( 0 );
- repositories = repoGroup.getRepositories();
- assertEquals( 3, repositories.size() );
- assertEquals( REPO1_ID, repositories.get( 0 ) );
- assertEquals( REPO2_ID, repositories.get( 1 ) );
- assertEquals( REPO3_ID, repositories.get( 2 ) );
- }
-
- private Configuration createInitialConfiguration()
- {
- Configuration config = new Configuration();
-
- RepositoryGroupConfiguration repoGroup = new RepositoryGroupConfiguration();
- repoGroup.setId( REPO_GROUP_ID );
- repoGroup.addRepository( REPO1_ID );
- repoGroup.addRepository( REPO2_ID );
- repoGroup.addRepository( REPO3_ID );
-
- config.addRepositoryGroup( repoGroup );
-
- return config;
- }
-}
+++ /dev/null
-package org.apache.archiva.web.action.admin.scanning;
-
-import org.apache.archiva.admin.repository.admin.DefaultArchivaAdministration;
-import org.apache.archiva.configuration.ArchivaConfiguration;
-import org.apache.archiva.configuration.Configuration;
-import org.apache.archiva.configuration.RepositoryScanningConfiguration;
-import org.apache.archiva.web.action.AbstractActionTestCase;
-import org.easymock.MockControl;
-
-import java.util.ArrayList;
-import java.util.List;
-import org.junit.Before;
-import org.junit.Test;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-public class RepositoryScanningActionTest
- extends AbstractActionTestCase
-{
- private RepositoryScanningAction action;
-
- private MockControl archivaConfigControl;
-
- private ArchivaConfiguration archivaConfig;
-
- private Configuration config;
-
- @Override
- @Before
- public void setUp()
- throws Exception
- {
-
- super.setUp();
-
- archivaConfigControl = MockControl.createControl( ArchivaConfiguration.class );
- archivaConfig = (ArchivaConfiguration) archivaConfigControl.getMock();
-
- action = new RepositoryScanningAction();
-
- config = new Configuration();
-
- RepositoryScanningConfiguration repositoryScanningConfig = new RepositoryScanningConfiguration();
-
- repositoryScanningConfig.setKnownContentConsumers( createKnownContentConsumersList() );
-
- config.setRepositoryScanning( repositoryScanningConfig );
-
- DefaultArchivaAdministration archivaAdministration = new DefaultArchivaAdministration();
- archivaAdministration.setArchivaConfiguration( archivaConfig );
- action.setArchivaAdministration( archivaAdministration );
-
- }
-
- @Test
- public void testUpdateKnownConsumers()
- throws Exception
- {
- archivaConfigControl.expectAndReturn( archivaConfig.getConfiguration(), config, 10 );
-
- archivaConfig.save( config );
- archivaConfig.save( config );
- archivaConfig.save( config );
- archivaConfig.save( config );
- archivaConfig.save( config );
- archivaConfig.save( config );
- archivaConfig.save( config );
- archivaConfig.save( config );
- archivaConfigControl.replay();
-
- setEnabledKnownContentConsumers();
-
- String returnString = action.updateKnownConsumers();
-
- List<String> results = config.getRepositoryScanning().getKnownContentConsumers();
-
- assertEquals( action.SUCCESS, returnString );
- assertEquals( "results " + results, 8, results.size() );
- }
-
- @Test
- public void testDisableAllKnownConsumers()
- throws Exception
- {
- archivaConfigControl.expectAndReturn( archivaConfig.getConfiguration(), config, 10 );
-
- archivaConfig.save( config );
- archivaConfig.save( config );
- archivaConfig.save( config );
- archivaConfig.save( config );
- archivaConfig.save( config );
- archivaConfig.save( config );
- archivaConfig.save( config );
- archivaConfig.save( config );
- archivaConfigControl.replay();
-
- action.setEnabledKnownContentConsumers( null );
-
- String returnString = action.updateKnownConsumers();
-
- List<String> results = config.getRepositoryScanning().getKnownContentConsumers();
-
- assertEquals( action.SUCCESS, returnString );
- assertEquals( 0, results.size() );
- }
-
- private void setEnabledKnownContentConsumers()
- {
- action.setEnabledKnownContentConsumers( createKnownContentConsumersList() );
- }
-
- private List<String> createKnownContentConsumersList()
- {
- List<String> knownContentConsumers = new ArrayList<String>();
- knownContentConsumers.add( "auto-remove" );
- knownContentConsumers.add( "auto-rename" );
- knownContentConsumers.add( "create-missing-checksums" );
- knownContentConsumers.add( "index-content" );
- knownContentConsumers.add( "metadata-updater" );
- knownContentConsumers.add( "repository-purge" );
- knownContentConsumers.add( "update-db-artifact" );
- knownContentConsumers.add( "validate-checksums" );
-
- return knownContentConsumers;
- }
-}
+++ /dev/null
-package org.apache.archiva.web.action.reports;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import com.google.common.collect.Lists;
-import com.opensymphony.xwork2.Action;
-import org.apache.archiva.admin.model.beans.ManagedRepository;
-import org.apache.archiva.admin.model.managed.ManagedRepositoryAdmin;
-import org.apache.archiva.metadata.model.MetadataFacet;
-import org.apache.archiva.metadata.repository.MetadataRepository;
-import org.apache.archiva.metadata.repository.RepositorySession;
-import org.apache.archiva.webtest.memory.TestRepositorySessionFactory;
-import org.apache.archiva.metadata.repository.stats.RepositoryStatistics;
-import org.apache.archiva.metadata.repository.stats.RepositoryStatisticsManager;
-import org.apache.archiva.reports.RepositoryProblemFacet;
-import org.apache.archiva.security.UserRepositoriesStub;
-import org.apache.commons.io.IOUtils;
-import org.apache.archiva.web.action.AbstractActionTestCase;
-import org.easymock.MockControl;
-import org.junit.After;
-
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import org.junit.Test;
-
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.when;
-
-/**
- * Test the GenerationReportAction. Note that we are testing for <i>current</i> behaviour, however there are several
- * instances below where other behaviour may actually be more appropriate (eg the error handling, download stats should
- * never forward to HTML page, etc). This is also missing tests for various combinations of paging at this point.
- */
-public class GenerateReportActionTest
- extends AbstractActionTestCase
-{
- private GenerateReportAction action;
-
- private static final String SNAPSHOTS = "snapshots";
-
- private static final String INTERNAL = "internal";
-
- private static final String GROUP_ID = "groupId";
-
- private RepositoryStatisticsManager repositoryStatisticsManager;
-
- private MockControl repositoryStatisticsManagerControl;
-
- private MockControl metadataRepositoryControl;
-
- private MetadataRepository metadataRepository;
-
- private static final String PROBLEM = "problem";
-
-
- @Override
- public void setUp()
- throws Exception
- {
- super.setUp();
-
- UserRepositoriesStub stub = applicationContext.getBean( "userRepositories", UserRepositoriesStub.class );
- stub.setRepoIds( Lists.<String>newArrayList( "internal", "snapshots" ) );
-
- action = (GenerateReportAction) getActionProxy( "/report/generateReport.action" ).getAction();
-
- repositoryStatisticsManagerControl = MockControl.createControl( RepositoryStatisticsManager.class );
- repositoryStatisticsManager = (RepositoryStatisticsManager) repositoryStatisticsManagerControl.getMock();
- action.setRepositoryStatisticsManager( repositoryStatisticsManager );
-
- metadataRepositoryControl = MockControl.createControl( MetadataRepository.class );
- metadataRepository = (MetadataRepository) metadataRepositoryControl.getMock();
-
- RepositorySession repositorySession = mock( RepositorySession.class );
- when( repositorySession.getRepository() ).thenReturn( metadataRepository );
-
- TestRepositorySessionFactory factory =
- applicationContext.getBean( "repositorySessionFactory#test", TestRepositorySessionFactory.class );
- factory.setRepositorySession( repositorySession );
- }
-
-
- @Override
- @After
- public void tearDown()
- throws Exception
- {
- UserRepositoriesStub stub = applicationContext.getBean( "userRepositories", UserRepositoriesStub.class );
- stub.setRepoIds( Lists.<String>newArrayList( "test-repo" ) );
-
- super.tearDown();
-
- }
-
- private void prepareAction( List<String> selectedRepositories, List<String> availableRepositories )
- throws Exception
- {
- MockControl managedRepositoryControl = MockControl.createControl( ManagedRepositoryAdmin.class );
- ManagedRepositoryAdmin managedRepositoryAdmin = (ManagedRepositoryAdmin) managedRepositoryControl.getMock();
-
- Map<String, ManagedRepository> map = new HashMap<String, ManagedRepository>( availableRepositories.size() );
- for ( String repoId : availableRepositories )
- {
- map.put( repoId, new ManagedRepository() );
- }
-
- managedRepositoryControl.expectAndReturn( managedRepositoryAdmin.getManagedRepositoriesAsMap(), map, 1, 10 );
-
- managedRepositoryControl.replay();
- action.setManagedRepositoryAdmin( managedRepositoryAdmin );
-
-
- action.setSelectedRepositories( selectedRepositories );
- action.prepare();
-
- List<String> repos = Arrays.asList( GenerateReportAction.ALL_REPOSITORIES, INTERNAL, SNAPSHOTS );
-
- Collections.sort( repos );
-
- Collections.sort( action.getRepositoryIds() );
-
- assertEquals( repos, action.getRepositoryIds() );
- Collections.sort( action.getAvailableRepositories() );
-
- availableRepositories = new ArrayList<String>( availableRepositories );
- Collections.sort( availableRepositories );
-
-
- assertEquals( availableRepositories, action.getAvailableRepositories() );
- }
-
- @Test
- public void testGenerateStatisticsInvalidRowCount()
- throws Exception
- {
- repositoryStatisticsManagerControl.replay();
- prepareAction( Collections.singletonList( INTERNAL ), Collections.singletonList( SNAPSHOTS ) );
-
- action.setRowCount( 0 );
- String result = action.generateStatistics();
- assertEquals( Action.INPUT, result );
- assertTrue( action.hasFieldErrors() );
- repositoryStatisticsManagerControl.verify();
- }
-
- @Test
- public void testGenerateStatisticsInvalidEndDate()
- throws Exception
- {
- repositoryStatisticsManagerControl.replay();
- prepareAction( Collections.singletonList( INTERNAL ), Collections.singletonList( SNAPSHOTS ) );
-
- action.setStartDate( "2009/12/12" );
- action.setEndDate( "2008/11/11" );
- String result = action.generateStatistics();
- assertEquals( Action.INPUT, result );
- assertTrue( action.hasFieldErrors() );
- repositoryStatisticsManagerControl.verify();
- }
-
- @Test
- public void testGenerateStatisticsMalformedEndDate()
- throws Exception
- {
- repositoryStatisticsManagerControl.replay();
- prepareAction( Collections.singletonList( INTERNAL ), Collections.singletonList( SNAPSHOTS ) );
-
- action.setEndDate( "This is not a date" );
- String result = action.generateStatistics();
-
- // TODO: should be an input error
- assertEquals( Action.ERROR, result );
- assertTrue( action.hasActionErrors() );
- repositoryStatisticsManagerControl.verify();
- }
-
- @Test
- public void testGenerateStatisticsInvalidEndDateMultiRepo()
- throws Exception
- {
- repositoryStatisticsManagerControl.replay();
- prepareAction( Arrays.asList( SNAPSHOTS, INTERNAL ), Collections.<String>emptyList() );
-
- action.setStartDate( "2009/12/12" );
- action.setEndDate( "2008/11/11" );
- String result = action.generateStatistics();
- assertEquals( Action.INPUT, result );
- assertTrue( action.hasFieldErrors() );
- repositoryStatisticsManagerControl.verify();
- }
-
- @Test
- public void testGenerateStatisticsMalformedEndDateMultiRepo()
- throws Exception
- {
- repositoryStatisticsManagerControl.replay();
- prepareAction( Arrays.asList( SNAPSHOTS, INTERNAL ), Collections.<String>emptyList() );
-
- action.setEndDate( "This is not a date" );
- String result = action.generateStatistics();
-
- // TODO: should be an input error
- assertEquals( Action.ERROR, result );
- assertTrue( action.hasActionErrors() );
- repositoryStatisticsManagerControl.verify();
- }
-
- @Test
- public void testGenerateStatisticsNoRepos()
- throws Exception
- {
- repositoryStatisticsManagerControl.replay();
- prepareAction( Collections.<String>emptyList(), Arrays.asList( SNAPSHOTS, INTERNAL ) );
-
- String result = action.generateStatistics();
- assertEquals( Action.INPUT, result );
- assertTrue( action.hasFieldErrors() );
- repositoryStatisticsManagerControl.verify();
- }
-
- @Test
- public void testGenerateStatisticsSingleRepo()
- throws Exception
- {
- repositoryStatisticsManagerControl.expectAndReturn(
- repositoryStatisticsManager.getStatisticsInRange( metadataRepository, INTERNAL, null, null ),
- Collections.singletonList( createDefaultStats() ) );
-
- repositoryStatisticsManagerControl.replay();
- prepareAction( Collections.singletonList( INTERNAL ), Collections.singletonList( SNAPSHOTS ) );
-
- String result = action.generateStatistics();
- assertSuccessResult( result );
- repositoryStatisticsManagerControl.verify();
- }
-
- @Test
- public void testGenerateStatisticsSingleRepoNoStats()
- throws Exception
-
- {
- repositoryStatisticsManagerControl.expectAndReturn(
- repositoryStatisticsManager.getStatisticsInRange( metadataRepository, INTERNAL, null, null ),
- Collections.<Object>emptyList() );
- repositoryStatisticsManagerControl.replay();
- prepareAction( Collections.singletonList( INTERNAL ), Collections.singletonList( SNAPSHOTS ) );
-
- String result = action.generateStatistics();
- assertEquals( Action.ERROR, result );
- assertTrue( action.hasActionErrors() );
-
- repositoryStatisticsManagerControl.verify();
- }
-
- @Test
- public void testGenerateStatisticsOvershotPages()
- throws Exception
-
- {
- repositoryStatisticsManagerControl.expectAndReturn(
- repositoryStatisticsManager.getStatisticsInRange( metadataRepository, INTERNAL, null, null ),
- Collections.singletonList( createDefaultStats() ) );
- repositoryStatisticsManagerControl.replay();
- action.setPage( 2 );
- prepareAction( Collections.singletonList( INTERNAL ), Collections.singletonList( SNAPSHOTS ) );
-
- String result = action.generateStatistics();
- assertEquals( Action.ERROR, result );
- assertTrue( action.hasActionErrors() );
- repositoryStatisticsManagerControl.verify();
- }
-
- @Test
- public void testGenerateStatisticsMultipleRepoNoResults()
- throws Exception
-
- {
- repositoryStatisticsManagerControl.expectAndReturn(
- repositoryStatisticsManager.getStatisticsInRange( metadataRepository, SNAPSHOTS, null, null ),
- Collections.<Object>emptyList() );
- repositoryStatisticsManagerControl.expectAndReturn(
- repositoryStatisticsManager.getStatisticsInRange( metadataRepository, INTERNAL, null, null ),
- Collections.<Object>emptyList() );
- repositoryStatisticsManagerControl.replay();
- prepareAction( Arrays.asList( SNAPSHOTS, INTERNAL ), Collections.<String>emptyList() );
-
- String result = action.generateStatistics();
- assertEquals( GenerateReportAction.BLANK, result );
- assertFalse( action.hasActionErrors() );
- assertFalse( action.hasActionMessages() );
- assertFalse( action.hasFieldErrors() );
-
- repositoryStatisticsManagerControl.verify();
- }
-
- @Test
- public void testGenerateStatisticsMultipleRepo()
- throws Exception
-
- {
- repositoryStatisticsManagerControl.expectAndReturn(
- repositoryStatisticsManager.getStatisticsInRange( metadataRepository, SNAPSHOTS, null, null ),
- Collections.singletonList( createDefaultStats() ) );
- repositoryStatisticsManagerControl.expectAndReturn(
- repositoryStatisticsManager.getStatisticsInRange( metadataRepository, INTERNAL, null, null ),
- Collections.singletonList( createDefaultStats() ) );
-
- repositoryStatisticsManagerControl.replay();
- prepareAction( Arrays.asList( SNAPSHOTS, INTERNAL ), Collections.<String>emptyList() );
-
- String result = action.generateStatistics();
- assertSuccessResult( result );
- repositoryStatisticsManagerControl.verify();
- }
-
- @Test
- public void testDownloadStatisticsSingleRepo()
- throws Exception
- {
- Date date = new Date();
- repositoryStatisticsManagerControl.expectAndReturn(
- repositoryStatisticsManager.getStatisticsInRange( metadataRepository, SNAPSHOTS, null, null ),
- Collections.singletonList( createStats( date ) ) );
- repositoryStatisticsManagerControl.replay();
-
- prepareAction( Arrays.asList( SNAPSHOTS ), Arrays.asList( INTERNAL ) );
-
- String result = action.downloadStatisticsReport();
- assertEquals( GenerateReportAction.SEND_FILE, result );
- assertFalse( action.hasActionErrors() );
- assertFalse( action.hasFieldErrors() );
-
- assertEquals(
- "Date of Scan,Total File Count,Total Size,Artifact Count,Group Count,Project Count,Plugins,Archetypes,Jars,Wars\n"
- + date + ",0,0,0,0,0,0,0,0,0\n", IOUtils.toString( action.getInputStream() ) );
- repositoryStatisticsManagerControl.verify();
- }
-
- @Test
- public void testDownloadStatisticsMultipleRepos()
- throws Exception
- {
- repositoryStatisticsManagerControl.expectAndReturn(
- repositoryStatisticsManager.getStatisticsInRange( metadataRepository, SNAPSHOTS, null, null ),
- Collections.singletonList( createDefaultStats() ) );
- repositoryStatisticsManagerControl.expectAndReturn(
- repositoryStatisticsManager.getStatisticsInRange( metadataRepository, INTERNAL, null, null ),
- Collections.singletonList( createDefaultStats() ) );
- repositoryStatisticsManagerControl.replay();
- prepareAction( Arrays.asList( SNAPSHOTS, INTERNAL ), Collections.<String>emptyList() );
-
- String result = action.downloadStatisticsReport();
- assertEquals( GenerateReportAction.SEND_FILE, result );
- assertFalse( action.hasActionErrors() );
- assertFalse( action.hasFieldErrors() );
-
- assertMultiRepoCsvResult();
- repositoryStatisticsManagerControl.verify();
- }
-
- @Test
- public void testDownloadStatisticsMalformedEndDateMultiRepo()
- throws Exception
- {
- repositoryStatisticsManagerControl.replay();
- prepareAction( Arrays.asList( SNAPSHOTS, INTERNAL ), Collections.<String>emptyList() );
-
- action.setEndDate( "This is not a date" );
- String result = action.downloadStatisticsReport();
-
- // TODO: should be an input error
- assertEquals( Action.ERROR, result );
- assertTrue( action.hasActionErrors() );
- repositoryStatisticsManagerControl.verify();
- }
-
- @Test
- public void testDownloadStatisticsMalformedEndDateSingleRepo()
- throws Exception
- {
- repositoryStatisticsManagerControl.replay();
- prepareAction( Arrays.asList( SNAPSHOTS ), Arrays.asList( INTERNAL ) );
-
- action.setEndDate( "This is not a date" );
- String result = action.downloadStatisticsReport();
-
- // TODO: should be an input error
- assertEquals( Action.ERROR, result );
- assertTrue( action.hasActionErrors() );
- repositoryStatisticsManagerControl.verify();
- }
-
- @Test
- public void testDownloadStatisticsInvalidEndDateMultiRepo()
- throws Exception
- {
- repositoryStatisticsManagerControl.replay();
- prepareAction( Arrays.asList( SNAPSHOTS, INTERNAL ), Collections.<String>emptyList() );
-
- action.setStartDate( "2009/12/12" );
- action.setEndDate( "2008/11/11" );
- String result = action.downloadStatisticsReport();
- assertEquals( Action.INPUT, result );
- assertTrue( action.hasFieldErrors() );
- repositoryStatisticsManagerControl.verify();
- }
-
- @Test
- public void testDownloadStatisticsInvalidEndDateSingleRepo()
- throws Exception
- {
- repositoryStatisticsManagerControl.replay();
- prepareAction( Arrays.asList( SNAPSHOTS ), Arrays.asList( INTERNAL ) );
-
- action.setStartDate( "2009/12/12" );
- action.setEndDate( "2008/11/11" );
- String result = action.downloadStatisticsReport();
- assertEquals( Action.INPUT, result );
- assertTrue( action.hasFieldErrors() );
- repositoryStatisticsManagerControl.verify();
- }
-
- @Test
- public void testDownloadStatisticsSingleRepoNoStats()
- throws Exception
-
- {
- repositoryStatisticsManagerControl.expectAndReturn(
- repositoryStatisticsManager.getStatisticsInRange( metadataRepository, INTERNAL, null, null ),
- Collections.<Object>emptyList() );
- repositoryStatisticsManagerControl.replay();
- prepareAction( Collections.singletonList( INTERNAL ), Collections.singletonList( SNAPSHOTS ) );
-
- String result = action.downloadStatisticsReport();
- assertEquals( Action.ERROR, result );
- assertTrue( action.hasActionErrors() );
- repositoryStatisticsManagerControl.verify();
- }
-
- @Test
- public void testDownloadStatisticsNoRepos()
- throws Exception
- {
- repositoryStatisticsManagerControl.replay();
- prepareAction( Collections.<String>emptyList(), Arrays.asList( SNAPSHOTS, INTERNAL ) );
-
- String result = action.downloadStatisticsReport();
- assertEquals( Action.INPUT, result );
- assertTrue( action.hasFieldErrors() );
- repositoryStatisticsManagerControl.verify();
- }
-
- @Test
- public void testDownloadStatisticsMultipleRepoNoResults()
- throws Exception
-
- {
- repositoryStatisticsManagerControl.expectAndReturn(
- repositoryStatisticsManager.getStatisticsInRange( metadataRepository, SNAPSHOTS, null, null ),
- Collections.<Object>emptyList() );
- repositoryStatisticsManagerControl.expectAndReturn(
- repositoryStatisticsManager.getStatisticsInRange( metadataRepository, INTERNAL, null, null ),
- Collections.<Object>emptyList() );
- repositoryStatisticsManagerControl.replay();
- prepareAction( Arrays.asList( SNAPSHOTS, INTERNAL ), Collections.<String>emptyList() );
-
- String result = action.downloadStatisticsReport();
- assertEquals( GenerateReportAction.BLANK, result );
- assertFalse( action.hasActionErrors() );
- assertFalse( action.hasActionMessages() );
- assertFalse( action.hasFieldErrors() );
- repositoryStatisticsManagerControl.verify();
- }
-
- @Test
- public void testDownloadStatisticsMultipleRepoInStrutsFormat()
- throws Exception
- {
- repositoryStatisticsManagerControl.expectAndReturn(
- repositoryStatisticsManager.getStatisticsInRange( metadataRepository, SNAPSHOTS, null, null ),
- Collections.singletonList( createDefaultStats() ) );
- repositoryStatisticsManagerControl.expectAndReturn(
- repositoryStatisticsManager.getStatisticsInRange( metadataRepository, INTERNAL, null, null ),
- Collections.singletonList( createDefaultStats() ) );
- repositoryStatisticsManagerControl.replay();
- prepareAction( Arrays.asList( SNAPSHOTS, INTERNAL ), Collections.<String>emptyList() );
-
- action.setSelectedRepositories( Collections.singletonList( "[" + SNAPSHOTS + "],[" + INTERNAL + "]" ) );
- String result = action.downloadStatisticsReport();
- assertEquals( GenerateReportAction.SEND_FILE, result );
- assertFalse( action.hasActionErrors() );
- assertFalse( action.hasFieldErrors() );
-
- assertMultiRepoCsvResult();
- repositoryStatisticsManagerControl.verify();
- }
-
- @Test
- public void testHealthReportSingleRepo()
- throws Exception
- {
- RepositoryProblemFacet problem1 = createProblem( GROUP_ID, "artifactId", INTERNAL );
- RepositoryProblemFacet problem2 = createProblem( GROUP_ID, "artifactId-2", INTERNAL );
-
- metadataRepositoryControl.expectAndReturn(
- metadataRepository.getMetadataFacets( INTERNAL, RepositoryProblemFacet.FACET_ID ),
- Arrays.asList( problem1.getName(), problem2.getName() ) );
- metadataRepositoryControl.expectAndReturn(
- metadataRepository.getMetadataFacet( INTERNAL, RepositoryProblemFacet.FACET_ID, problem1.getName() ),
- problem1 );
- metadataRepositoryControl.expectAndReturn(
- metadataRepository.getMetadataFacet( INTERNAL, RepositoryProblemFacet.FACET_ID, problem2.getName() ),
- problem2 );
- metadataRepositoryControl.replay();
-
- action.setRepositoryId( INTERNAL );
-
- prepareAction( Collections.<String>emptyList(), Arrays.asList( SNAPSHOTS, INTERNAL ) );
-
- String result = action.execute();
- assertSuccessResult( result );
-
- assertEquals( Collections.singleton( INTERNAL ), action.getRepositoriesMap().keySet() );
- assertEquals( Arrays.asList( problem1, problem2 ), action.getRepositoriesMap().get( INTERNAL ) );
-
- metadataRepositoryControl.verify();
- }
-
- @Test
- public void testHealthReportInvalidRowCount()
- throws Exception
- {
- metadataRepositoryControl.replay();
-
- action.setRowCount( 0 );
- action.setRepositoryId( INTERNAL );
-
- prepareAction( Collections.<String>emptyList(), Arrays.asList( SNAPSHOTS, INTERNAL ) );
-
- String result = action.execute();
- assertEquals( Action.INPUT, result );
- assertFalse( action.hasActionErrors() );
- assertTrue( action.hasFieldErrors() );
-
- metadataRepositoryControl.verify();
- }
-
- @Test
- public void testHealthReportAllRepos()
- throws Exception
- {
- RepositoryProblemFacet problem1 = createProblem( GROUP_ID, "artifactId", INTERNAL );
- RepositoryProblemFacet problem2 = createProblem( GROUP_ID, "artifactId-2", SNAPSHOTS );
- metadataRepositoryControl.expectAndReturn(
- metadataRepository.getMetadataFacets( INTERNAL, RepositoryProblemFacet.FACET_ID ),
- Arrays.asList( problem1.getName() ) );
- metadataRepositoryControl.expectAndReturn(
- metadataRepository.getMetadataFacets( SNAPSHOTS, RepositoryProblemFacet.FACET_ID ),
- Arrays.asList( problem2.getName() ) );
- metadataRepositoryControl.expectAndReturn(
- metadataRepository.getMetadataFacet( INTERNAL, RepositoryProblemFacet.FACET_ID, problem1.getName() ),
- problem1 );
- metadataRepositoryControl.expectAndReturn(
- metadataRepository.getMetadataFacet( SNAPSHOTS, RepositoryProblemFacet.FACET_ID, problem2.getName() ),
- problem2 );
- metadataRepositoryControl.replay();
-
- action.setRepositoryId( GenerateReportAction.ALL_REPOSITORIES );
-
- prepareAction( Collections.<String>emptyList(), Arrays.asList( SNAPSHOTS, INTERNAL ) );
-
- String result = action.execute();
- assertSuccessResult( result );
-
- assertEquals( Arrays.asList( INTERNAL, SNAPSHOTS ),
- new ArrayList<String>( action.getRepositoriesMap().keySet() ) );
- assertEquals( Arrays.asList( problem1 ), action.getRepositoriesMap().get( INTERNAL ) );
- assertEquals( Arrays.asList( problem2 ), action.getRepositoriesMap().get( SNAPSHOTS ) );
-
- metadataRepositoryControl.verify();
- }
-
- @Test
- public void testHealthReportSingleRepoByCorrectGroupId()
- throws Exception
- {
- RepositoryProblemFacet problem1 = createProblem( GROUP_ID, "artifactId", INTERNAL );
- RepositoryProblemFacet problem2 = createProblem( GROUP_ID, "artifactId-2", INTERNAL );
- metadataRepositoryControl.expectAndReturn(
- metadataRepository.getMetadataFacets( INTERNAL, RepositoryProblemFacet.FACET_ID ),
- Arrays.asList( problem1.getName(), problem2.getName() ) );
- metadataRepositoryControl.expectAndReturn(
- metadataRepository.getMetadataFacet( INTERNAL, RepositoryProblemFacet.FACET_ID, problem1.getName() ),
- problem1 );
- metadataRepositoryControl.expectAndReturn(
- metadataRepository.getMetadataFacet( INTERNAL, RepositoryProblemFacet.FACET_ID, problem2.getName() ),
- problem2 );
- metadataRepositoryControl.replay();
-
- action.setGroupId( GROUP_ID );
- action.setRepositoryId( INTERNAL );
-
- prepareAction( Collections.<String>emptyList(), Arrays.asList( SNAPSHOTS, INTERNAL ) );
-
- String result = action.execute();
- assertSuccessResult( result );
-
- assertEquals( Collections.singleton( INTERNAL ), action.getRepositoriesMap().keySet() );
- assertEquals( Arrays.asList( problem1, problem2 ), action.getRepositoriesMap().get( INTERNAL ) );
-
- metadataRepositoryControl.verify();
- }
-
- @Test
- public void testHealthReportSingleRepoByCorrectGroupIdAllRepositories()
- throws Exception
- {
- RepositoryProblemFacet problem1 = createProblem( GROUP_ID, "artifactId", INTERNAL );
- RepositoryProblemFacet problem2 = createProblem( GROUP_ID, "artifactId-2", SNAPSHOTS );
- metadataRepositoryControl.expectAndReturn(
- metadataRepository.getMetadataFacets( INTERNAL, RepositoryProblemFacet.FACET_ID ),
- Arrays.asList( problem1.getName() ) );
- metadataRepositoryControl.expectAndReturn(
- metadataRepository.getMetadataFacets( SNAPSHOTS, RepositoryProblemFacet.FACET_ID ),
- Arrays.asList( problem2.getName() ) );
- metadataRepositoryControl.expectAndReturn(
- metadataRepository.getMetadataFacet( INTERNAL, RepositoryProblemFacet.FACET_ID, problem1.getName() ),
- problem1 );
- metadataRepositoryControl.expectAndReturn(
- metadataRepository.getMetadataFacet( SNAPSHOTS, RepositoryProblemFacet.FACET_ID, problem2.getName() ),
- problem2 );
- metadataRepositoryControl.replay();
-
- action.setGroupId( GROUP_ID );
- action.setRepositoryId( GenerateReportAction.ALL_REPOSITORIES );
-
- prepareAction( Collections.<String>emptyList(), Arrays.asList( SNAPSHOTS, INTERNAL ) );
-
- String result = action.execute();
- assertSuccessResult( result );
-
- assertEquals( Arrays.asList( INTERNAL, SNAPSHOTS ),
- new ArrayList<String>( action.getRepositoriesMap().keySet() ) );
- assertEquals( Arrays.asList( problem1 ), action.getRepositoriesMap().get( INTERNAL ) );
- assertEquals( Arrays.asList( problem2 ), action.getRepositoriesMap().get( SNAPSHOTS ) );
-
- metadataRepositoryControl.verify();
- }
-
- @Test
- public void testHealthReportSingleRepoByIncorrectGroupId()
- throws Exception
- {
- metadataRepositoryControl.expectAndReturn(
- metadataRepository.getMetadataFacets( INTERNAL, RepositoryProblemFacet.FACET_ID ),
- Collections.<MetadataFacet>emptyList() );
- metadataRepositoryControl.replay();
-
- action.setGroupId( "not.it" );
- action.setRepositoryId( INTERNAL );
-
- prepareAction( Collections.<String>emptyList(), Arrays.asList( SNAPSHOTS, INTERNAL ) );
-
- String result = action.execute();
- assertEquals( GenerateReportAction.BLANK, result );
- assertFalse( action.hasActionErrors() );
- assertFalse( action.hasFieldErrors() );
-
- metadataRepositoryControl.verify();
- }
-
- private void assertMultiRepoCsvResult()
- throws IOException
- {
- assertEquals(
- "Repository,Total File Count,Total Size,Artifact Count,Group Count,Project Count,Plugins,Archetypes,Jars,Wars\n"
- + "snapshots,0,0,0,0,0,0,0,0,0\n" + "internal,0,0,0,0,0,0,0,0,0\n",
- IOUtils.toString( action.getInputStream() ) );
- }
-
- private RepositoryProblemFacet createProblem( String groupId, String artifactId, String repoId )
- {
- RepositoryProblemFacet problem = new RepositoryProblemFacet();
- problem.setRepositoryId( repoId );
- problem.setNamespace( groupId );
- problem.setProject( artifactId );
- problem.setProblem( PROBLEM );
- return problem;
- }
-
- @Test
- public void testHealthReportNoRepositoryId()
- throws Exception
- {
- prepareAction( Collections.<String>emptyList(), Arrays.asList( SNAPSHOTS, INTERNAL ) );
-
- String result = action.execute();
- assertEquals( Action.INPUT, result );
- assertTrue( action.hasFieldErrors() );
- }
-
- private void assertSuccessResult( String result )
- {
- assertEquals( Action.SUCCESS, result );
- assertFalse( action.hasActionErrors() );
- assertFalse( action.hasFieldErrors() );
- }
-
- private RepositoryStatistics createDefaultStats()
- {
- return createStats( new Date() );
- }
-
- private RepositoryStatistics createStats( Date date )
- {
- RepositoryStatistics stats = new RepositoryStatistics();
- stats.setScanStartTime( date );
- return stats;
- }
-}
+++ /dev/null
-package org.apache.archiva.web.startup;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.util.zip.GZIPInputStream;
-
-import org.apache.commons.io.IOUtils;
-
-import junit.framework.TestCase;
-import org.apache.archiva.test.utils.ArchivaBlockJUnit4ClassRunner;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-/**
- * BannerTest
- *
- *
- */
-@RunWith( ArchivaBlockJUnit4ClassRunner.class )
-public class BannerTest
- extends TestCase
-{
- private static final String eol = System.getProperty( "line.separator" );
-
- private void assertEncodeDecode( String encoded, String decoded )
- {
- assertEquals( "Encoding: ", encoded, Banner.encode( decoded ) );
- assertEquals( "Decoding: ", decoded, Banner.decode( encoded ) );
- }
-
- @Test
- public void testEncodeDecode()
- {
- assertEncodeDecode( "[$10 ]", "[ ]" );
- assertEncodeDecode( "$$$5_$n$5_", "$_____" + eol + "_____" );
- assertEncodeDecode( "$${Refgjuvyr}", "${Erstwhile}" );
- }
-
- @Test
- public void testInjectVersion()
- {
- assertEquals( "[ 1.0 ]", Banner.injectVersion( "[#####]", "1.0" ) );
- assertEquals( ".\\ 1.0-SNAPSHOT \\._____",
- Banner.injectVersion( ".\\################\\._____", "1.0-SNAPSHOT" ) );
- assertEquals( "Archiva:\"+eol+\" ( 1.0-alpha-1 )",
- Banner.injectVersion( "Archiva:\"+eol+\" (##############)", "1.0-alpha-1" ) );
- }
-
- @Test
- public void testGetBanner()
- throws IOException
- {
- String version = "1.0-alpha-1-SNAPSHOT";
- String banner = Banner.getBanner( version );
- assertNotNull( "Banner should not be null.", banner );
- assertTrue( "Banner contains version.", banner.indexOf( version ) > 0 );
-
- /* Want to make a new banner?
- * Steps to do it.
- * 1) Edit the src/test/resources/banner.gz file.
- * 2) Save it compressed.
- * 3) Add (to this test method) ...
- * System.out.println( "\"" + Banner.encode( getRawBanner() ) + "\"" );
- * 4) Run the test
- * 5) Copy / Paste the encoded form into the Banner.getBanner() method.
- */
- }
-
- public String getRawBanner()
- throws IOException
- {
- File gzBanner = new File( "src/test/resources/banner.gz" );
- assertTrue( "File [" + gzBanner.getPath() + "] not found.", gzBanner.exists() );
- FileInputStream fis = new FileInputStream( gzBanner );
- GZIPInputStream gzis = new GZIPInputStream( fis );
- String str = IOUtils.toString( gzis );
- IOUtils.closeQuietly( gzis );
- return str;
- }
-}
+++ /dev/null
-package org.apache.archiva.web.tags;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import com.opensymphony.xwork2.ActionContext;
-import com.opensymphony.xwork2.config.ConfigurationManager;
-import com.opensymphony.xwork2.config.providers.XWorkConfigurationProvider;
-import com.opensymphony.xwork2.inject.Container;
-import com.opensymphony.xwork2.util.ValueStack;
-import com.opensymphony.xwork2.util.ValueStackFactory;
-import junit.framework.TestCase;
-import org.apache.archiva.common.ArchivaException;
-import org.apache.archiva.common.plexusbridge.PlexusSisuBridge;
-import org.apache.archiva.configuration.ArchivaConfiguration;
-import org.apache.archiva.configuration.Configuration;
-import org.apache.archiva.configuration.ManagedRepositoryConfiguration;
-import org.apache.archiva.configuration.RepositoryScanningConfiguration;
-import org.apache.archiva.metadata.model.ProjectVersionMetadata;
-import org.apache.archiva.metadata.repository.RepositorySession;
-import org.apache.archiva.test.utils.ArchivaSpringJUnit4ClassRunner;
-import org.apache.archiva.webtest.memory.TestMetadataResolver;
-import org.apache.archiva.webtest.memory.TestRepositorySessionFactory;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.sonatype.aether.artifact.Artifact;
-import org.sonatype.aether.util.artifact.DefaultArtifact;
-import org.springframework.context.ApplicationContext;
-import org.springframework.test.context.ContextConfiguration;
-
-import javax.inject.Inject;
-import java.util.List;
-
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.when;
-
-@RunWith( ArchivaSpringJUnit4ClassRunner.class )
-@ContextConfiguration( locations = { "classpath*:/META-INF/spring-context.xml", "classpath:/spring-context.xml",
- "classpath:/spring-context-DependencyTreeTest.xml" } )
-public class DependencyTreeTest
- extends TestCase
-{
- @Inject
- private DependencyTree tree;
-
- @Inject
- private PlexusSisuBridge plexusSisuBridge;
-
- @Inject
- private ApplicationContext applicationContext;
-
-
- private static final String TEST_VERSION = "version";
-
- private static final String TEST_REPO_ID = "test-repo";
-
- private static final String TEST_GROUP_ID = "groupId";
-
- private static final String TEST_ARTIFACT_ID = "artifactId";
-
-
- @Override
- @Before
- public void setUp()
- throws Exception
- {
- super.setUp();
-
- ConfigurationManager configurationManager = new ConfigurationManager();
- configurationManager.addContainerProvider( new XWorkConfigurationProvider() );
- com.opensymphony.xwork2.config.Configuration config = configurationManager.getConfiguration();
- Container container = config.getContainer();
-
- ValueStack stack = container.getInstance( ValueStackFactory.class ).createValueStack();
- stack.getContext().put( ActionContext.CONTAINER, container );
- ActionContext.setContext( new ActionContext( stack.getContext() ) );
-
- assertNotNull( ActionContext.getContext() );
-
- Configuration configuration = new Configuration();
- ManagedRepositoryConfiguration repoConfig = new ManagedRepositoryConfiguration();
- repoConfig.setId( TEST_REPO_ID );
- repoConfig.setLocation( "src/test/repositories/test" );
- configuration.addManagedRepository( repoConfig );
-
- ArchivaConfiguration archivaConfiguration = applicationContext.getBean( ArchivaConfiguration.class );
- archivaConfiguration.getConfiguration().setRepositoryScanning( new RepositoryScanningConfiguration() );
- archivaConfiguration.save( configuration );
-
- TestMetadataResolver metadataResolver = applicationContext.getBean( TestMetadataResolver.class );
- ProjectVersionMetadata metadata = new ProjectVersionMetadata();
- metadata.setId( TEST_VERSION );
- metadataResolver.setProjectVersion( TEST_REPO_ID, TEST_GROUP_ID, TEST_ARTIFACT_ID, metadata );
-
- RepositorySession repositorySession = mock( RepositorySession.class );
- when( repositorySession.getResolver() ).thenReturn( metadataResolver );
- TestRepositorySessionFactory repositorySessionFactory =
- applicationContext.getBean( TestRepositorySessionFactory.class );
- repositorySessionFactory.setRepositorySession( repositorySession );
- }
-
- @Test
- public void testTree()
- throws ArchivaException
- {
- List<DependencyTree.TreeEntry> entries = tree.gatherTreeList( TEST_GROUP_ID, TEST_ARTIFACT_ID, TEST_VERSION );
- assertEquals( 8, entries.size() );
-
- DependencyTree.TreeEntry artifactId = entries.get( 0 );
- assertEquals( "<ul><li>", artifactId.getPre() );
- // olamy tree with aether always create jar so createPomArtifact failed but it's not used
- assertTrue( assertArtifactsEquals( createArtifact( TEST_GROUP_ID, TEST_ARTIFACT_ID, TEST_VERSION ),
- artifactId.getArtifact() ) );
- assertEquals( "</li>", artifactId.getPost() );
-
- DependencyTree.TreeEntry child1 = entries.get( 1 );
- assertEquals( "<ul><li>", child1.getPre() );
- assertTrue( assertArtifactsEquals( createArtifact( TEST_GROUP_ID, "child1", "1.0" ), child1.getArtifact() ) );
- assertEquals( "</li>", child1.getPost() );
-
- DependencyTree.TreeEntry grandchild = entries.get( 2 );
- assertEquals( "<ul><li>", grandchild.getPre() );
- assertTrue(
- assertArtifactsEquals( createArtifact( TEST_GROUP_ID, "grandchild1", "2.0" ), grandchild.getArtifact() ) );
- assertEquals( "</li>", grandchild.getPost() );
-
- DependencyTree.TreeEntry greatGrandchild = entries.get( 3 );
- assertEquals( "<ul><li>", greatGrandchild.getPre() );
- assertTrue( assertArtifactsEquals( createArtifact( TEST_GROUP_ID, "great-grandchild", "3.0" ),
- greatGrandchild.getArtifact() ) );
- assertEquals( "</li></ul></ul>", greatGrandchild.getPost() );
-
- DependencyTree.TreeEntry child2 = entries.get( 4 );
- assertEquals( "<li>", child2.getPre() );
- assertTrue( assertArtifactsEquals( createArtifact( TEST_GROUP_ID, "child2", "1.0" ), child2.getArtifact() ) );
- assertEquals( "</li>", child2.getPost() );
-
- DependencyTree.TreeEntry grandchild2 = entries.get( 5 );
- assertEquals( "<ul><li>", grandchild2.getPre() );
- assertTrue(
- assertArtifactsEquals( createArtifact( TEST_GROUP_ID, "grandchild2", "2.0" ), grandchild2.getArtifact() ) );
- assertEquals( "</li>", grandchild2.getPost() );
-
- DependencyTree.TreeEntry grandchild3 = entries.get( 6 );
- assertEquals( "<li>", grandchild3.getPre() );
- assertTrue(
- assertArtifactsEquals( createArtifact( TEST_GROUP_ID, "grandchild3", "2.0" ), grandchild3.getArtifact() ) );
- assertEquals( "</li></ul>", grandchild3.getPost() );
-
- DependencyTree.TreeEntry child3 = entries.get( 7 );
- assertEquals( "<li>", child3.getPre() );
- assertTrue( assertArtifactsEquals( createArtifact( TEST_GROUP_ID, "child3", "1.0" ), child3.getArtifact() ) );
- assertEquals( "</li></ul></ul>", child3.getPost() );
- }
-
- private Artifact createPomArtifact( String groupId, String artifactId, String version )
- {
- return new DefaultArtifact( groupId + ":" + artifactId + ":" + version );
- }
-
- private Artifact createArtifact( String groupId, String artifactId, String version )
- {
- return new DefaultArtifact( groupId, artifactId, "jar", version );
- }
-
-
- public boolean assertArtifactsEquals( Artifact a, Artifact b )
- {
- return a.getArtifactId().equals( b.getArtifactId() ) && a.getGroupId().equals( b.getGroupId() )
- && a.getVersion().equals( b.getVersion() ) && a.getExtension().equals( b.getExtension() )
- && a.getClassifier().equals( b.getClassifier() );
- }
-
-}
+++ /dev/null
-package org.apache.archiva.web.validator.utils;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import junit.framework.Assert;
-import org.apache.commons.lang.SystemUtils;
-
-import java.util.List;
-import java.util.Map;
-
-public class ValidatorUtil
-{
- public static void assertFieldErrors( Map<String, List<String>> expectedFieldErrors,
- Map<String, List<String>> actualFieldErrors )
- {
- if ( expectedFieldErrors != null )
- {
- Assert.assertNotNull( actualFieldErrors );
- // checks the number of field errors
- Assert.assertEquals(
- "expected " + expectedFieldErrors + SystemUtils.LINE_SEPARATOR + ", found " + actualFieldErrors,
- expectedFieldErrors.size(), actualFieldErrors.size() );
-
- // check every content of the field error
- for ( Map.Entry<String, List<String>> expectedEntry : expectedFieldErrors.entrySet() )
- {
- if ( expectedEntry.getValue() != null )
- {
- Assert.assertNotNull( "actual with key " + expectedEntry.getKey() + " is null",
- actualFieldErrors.get( expectedEntry.getKey() ) );
- // checks the error message count per error field
- Assert.assertEquals( expectedEntry.getValue().size(),
- actualFieldErrors.get( expectedEntry.getKey() ).size() );
-
- // check the contents of error messages per field error
- for ( int i = 0; i < expectedEntry.getValue().size(); i++ )
- {
- String expected = expectedEntry.getValue().get( i );
- String actual = actualFieldErrors.get( expectedEntry.getKey() ).get( i );
- Assert.assertEquals( expected, actual );
- }
- }
- else
- {
- Assert.assertNull( actualFieldErrors.get( expectedEntry.getKey() ) );
- }
- }
- }
- else
- {
- Assert.assertNull( actualFieldErrors );
- }
- }
-}
+++ /dev/null
-<!--
- ~ Licensed to the Apache Software Foundation (ASF) under one
- ~ or more contributor license agreements. See the NOTICE file
- ~ distributed with this work for additional information
- ~ regarding copyright ownership. The ASF licenses this file
- ~ to you under the Apache License, Version 2.0 (the
- ~ "License"); you may not use this file except in compliance
- ~ with the License. You may obtain a copy of the License at
- ~
- ~ http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing,
- ~ software distributed under the License is distributed on an
- ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- ~ KIND, either express or implied. See the License for the
- ~ specific language governing permissions and limitations
- ~ under the License.
- -->
-
-<project>
- <modelVersion>4.0.0</modelVersion>
- <groupId>groupId</groupId>
- <artifactId>artifactId</artifactId>
- <version>version</version>
-
- <dependencies>
- <dependency>
- <groupId>groupId</groupId>
- <artifactId>child1</artifactId>
- <version>1.0</version>
- </dependency>
- <dependency>
- <groupId>groupId</groupId>
- <artifactId>child2</artifactId>
- <version>1.0</version>
- </dependency>
- <dependency>
- <groupId>groupId</groupId>
- <artifactId>child3</artifactId>
- <version>1.0</version>
- </dependency>
- </dependencies>
-</project>
\ No newline at end of file
+++ /dev/null
-<!--
- ~ Licensed to the Apache Software Foundation (ASF) under one
- ~ or more contributor license agreements. See the NOTICE file
- ~ distributed with this work for additional information
- ~ regarding copyright ownership. The ASF licenses this file
- ~ to you under the Apache License, Version 2.0 (the
- ~ "License"); you may not use this file except in compliance
- ~ with the License. You may obtain a copy of the License at
- ~
- ~ http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing,
- ~ software distributed under the License is distributed on an
- ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- ~ KIND, either express or implied. See the License for the
- ~ specific language governing permissions and limitations
- ~ under the License.
- -->
-
-<project>
- <modelVersion>4.0.0</modelVersion>
- <groupId>groupId</groupId>
- <artifactId>child1</artifactId>
- <version>1.0</version>
-
- <dependencies>
- <dependency>
- <groupId>groupId</groupId>
- <artifactId>grandchild1</artifactId>
- <version>2.0</version>
- </dependency>
- </dependencies>
-</project>
\ No newline at end of file
+++ /dev/null
-<!--
- ~ Licensed to the Apache Software Foundation (ASF) under one
- ~ or more contributor license agreements. See the NOTICE file
- ~ distributed with this work for additional information
- ~ regarding copyright ownership. The ASF licenses this file
- ~ to you under the Apache License, Version 2.0 (the
- ~ "License"); you may not use this file except in compliance
- ~ with the License. You may obtain a copy of the License at
- ~
- ~ http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing,
- ~ software distributed under the License is distributed on an
- ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- ~ KIND, either express or implied. See the License for the
- ~ specific language governing permissions and limitations
- ~ under the License.
- -->
-
-<project>
- <modelVersion>4.0.0</modelVersion>
- <groupId>groupId</groupId>
- <artifactId>child2</artifactId>
- <version>1.0</version>
- <dependencies>
- <dependency>
- <groupId>groupId</groupId>
- <artifactId>grandchild2</artifactId>
- <version>2.0</version>
- </dependency>
- <dependency>
- <groupId>groupId</groupId>
- <artifactId>grandchild3</artifactId>
- <version>2.0</version>
- </dependency>
- </dependencies>
-</project>
\ No newline at end of file
+++ /dev/null
-<!--
- ~ Licensed to the Apache Software Foundation (ASF) under one
- ~ or more contributor license agreements. See the NOTICE file
- ~ distributed with this work for additional information
- ~ regarding copyright ownership. The ASF licenses this file
- ~ to you under the Apache License, Version 2.0 (the
- ~ "License"); you may not use this file except in compliance
- ~ with the License. You may obtain a copy of the License at
- ~
- ~ http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing,
- ~ software distributed under the License is distributed on an
- ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- ~ KIND, either express or implied. See the License for the
- ~ specific language governing permissions and limitations
- ~ under the License.
- -->
-
-<project>
- <modelVersion>4.0.0</modelVersion>
- <groupId>groupId</groupId>
- <artifactId>child3</artifactId>
- <version>1.0</version>
-</project>
\ No newline at end of file
+++ /dev/null
-<!--
- ~ Licensed to the Apache Software Foundation (ASF) under one
- ~ or more contributor license agreements. See the NOTICE file
- ~ distributed with this work for additional information
- ~ regarding copyright ownership. The ASF licenses this file
- ~ to you under the Apache License, Version 2.0 (the
- ~ "License"); you may not use this file except in compliance
- ~ with the License. You may obtain a copy of the License at
- ~
- ~ http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing,
- ~ software distributed under the License is distributed on an
- ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- ~ KIND, either express or implied. See the License for the
- ~ specific language governing permissions and limitations
- ~ under the License.
- -->
-
-<project>
- <modelVersion>4.0.0</modelVersion>
- <groupId>groupId</groupId>
- <artifactId>grandchild1</artifactId>
- <version>2.0</version>
- <dependencies>
- <dependency>
- <groupId>groupId</groupId>
- <artifactId>great-grandchild</artifactId>
- <version>3.0</version>
- </dependency>
- </dependencies>
-</project>
\ No newline at end of file
+++ /dev/null
-<!--
- ~ Licensed to the Apache Software Foundation (ASF) under one
- ~ or more contributor license agreements. See the NOTICE file
- ~ distributed with this work for additional information
- ~ regarding copyright ownership. The ASF licenses this file
- ~ to you under the Apache License, Version 2.0 (the
- ~ "License"); you may not use this file except in compliance
- ~ with the License. You may obtain a copy of the License at
- ~
- ~ http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing,
- ~ software distributed under the License is distributed on an
- ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- ~ KIND, either express or implied. See the License for the
- ~ specific language governing permissions and limitations
- ~ under the License.
- -->
-
-<project>
- <modelVersion>4.0.0</modelVersion>
- <groupId>groupId</groupId>
- <artifactId>grandchild2</artifactId>
- <version>2.0</version>
-</project>
\ No newline at end of file
+++ /dev/null
-<!--
- ~ Licensed to the Apache Software Foundation (ASF) under one
- ~ or more contributor license agreements. See the NOTICE file
- ~ distributed with this work for additional information
- ~ regarding copyright ownership. The ASF licenses this file
- ~ to you under the Apache License, Version 2.0 (the
- ~ "License"); you may not use this file except in compliance
- ~ with the License. You may obtain a copy of the License at
- ~
- ~ http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing,
- ~ software distributed under the License is distributed on an
- ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- ~ KIND, either express or implied. See the License for the
- ~ specific language governing permissions and limitations
- ~ under the License.
- -->
-
-<project>
- <modelVersion>4.0.0</modelVersion>
- <groupId>groupId</groupId>
- <artifactId>grandchild2</artifactId>
- <version>2.0</version>
-</project>
\ No newline at end of file
+++ /dev/null
-<!--
- ~ Licensed to the Apache Software Foundation (ASF) under one
- ~ or more contributor license agreements. See the NOTICE file
- ~ distributed with this work for additional information
- ~ regarding copyright ownership. The ASF licenses this file
- ~ to you under the Apache License, Version 2.0 (the
- ~ "License"); you may not use this file except in compliance
- ~ with the License. You may obtain a copy of the License at
- ~
- ~ http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing,
- ~ software distributed under the License is distributed on an
- ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- ~ KIND, either express or implied. See the License for the
- ~ specific language governing permissions and limitations
- ~ under the License.
- -->
-
-<project>
- <modelVersion>4.0.0</modelVersion>
- <groupId>groupId</groupId>
- <artifactId>great-grandchild</artifactId>
- <version>3.0</version>
- <packaging>pom</packaging>
-</project>
\ No newline at end of file
+++ /dev/null
-<!--
- ~ Licensed to the Apache Software Foundation (ASF) under one
- ~ or more contributor license agreements. See the NOTICE file
- ~ distributed with this work for additional information
- ~ regarding copyright ownership. The ASF licenses this file
- ~ to you under the Apache License, Version 2.0 (the
- ~ "License"); you may not use this file except in compliance
- ~ with the License. You may obtain a copy of the License at
- ~
- ~ http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing,
- ~ software distributed under the License is distributed on an
- ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- ~ KIND, either express or implied. See the License for the
- ~ specific language governing permissions and limitations
- ~ under the License.
- -->
-
-<!DOCTYPE Repository PUBLIC "-//The Apache Software Foundation//DTD Jackrabbit 1.6//EN"
- "http://jackrabbit.apache.org/dtd/repository-1.6.dtd">
-
-<Repository>
- <FileSystem class="org.apache.jackrabbit.core.fs.mem.MemoryFileSystem"/>
- <!--<FileSystem class="org.apache.jackrabbit.core.fs.local.LocalFileSystem">
- <param name="path" value="${rep.home}/repository"/>
-</FileSystem> -->
- <Security appName="Jackrabbit">
- <SecurityManager class="org.apache.jackrabbit.core.security.simple.SimpleSecurityManager" workspaceName="security"/>
- <AccessManager class="org.apache.jackrabbit.core.security.simple.SimpleAccessManager"/>
- <LoginModule class="org.apache.jackrabbit.core.security.simple.SimpleLoginModule"/>
- </Security>
- <Workspaces rootPath="${rep.home}/workspaces" defaultWorkspace="default"/>
- <Workspace name="${wsp.name}">
- <FileSystem class="org.apache.jackrabbit.core.fs.local.LocalFileSystem">
- <param name="path" value="${wsp.home}"/>
- </FileSystem>
- <PersistenceManager class="org.apache.jackrabbit.core.persistence.bundle.BundleFsPersistenceManager"/>
- <SearchIndex class="org.apache.jackrabbit.core.query.lucene.SearchIndex">
- <param name="path" value="${wsp.home}/index"/>
- </SearchIndex>
- </Workspace>
- <Versioning rootPath="${rep.home}/version">
- <FileSystem class="org.apache.jackrabbit.core.fs.local.LocalFileSystem">
- <param name="path" value="${rep.home}/version"/>
- </FileSystem>
- <PersistenceManager class="org.apache.jackrabbit.core.persistence.bundle.BundleFsPersistenceManager"/>
- </Versioning>
-</Repository>
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!--
- ~ Licensed to the Apache Software Foundation (ASF) under one
- ~ or more contributor license agreements. See the NOTICE file
- ~ distributed with this work for additional information
- ~ regarding copyright ownership. The ASF licenses this file
- ~ to you under the Apache License, Version 2.0 (the
- ~ "License"); you may not use this file except in compliance
- ~ with the License. You may obtain a copy of the License at
- ~
- ~ http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing,
- ~ software distributed under the License is distributed on an
- ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- ~ KIND, either express or implied. See the License for the
- ~ specific language governing permissions and limitations
- ~ under the License.
- -->
-<beans xmlns="http://www.springframework.org/schema/beans"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://www.springframework.org/schema/beans
- http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
-
- <bean name="scheduler" class="org.apache.archiva.redback.components.scheduler.DefaultScheduler">
- <property name="properties">
- <props>
- <prop key="org.quartz.scheduler.instanceName">scheduler1</prop>
- <prop key="org.quartz.threadPool.class">org.quartz.simpl.SimpleThreadPool</prop>
- <prop key="org.quartz.threadPool.threadCount">2</prop>
- <prop key="org.quartz.threadPool.threadPriority">4</prop>
- <prop key="org.quartz.jobStore.class">org.quartz.simpl.RAMJobStore</prop>
- </props>
- </property>
- </bean>
-</beans>
\ No newline at end of file
+++ /dev/null
-artifact.jar
+++ /dev/null
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!--
- ~ Licensed to the Apache Software Foundation (ASF) under one
- ~ or more contributor license agreements. See the NOTICE file
- ~ distributed with this work for additional information
- ~ regarding copyright ownership. The ASF licenses this file
- ~ to you under the Apache License, Version 2.0 (the
- ~ "License"); you may not use this file except in compliance
- ~ with the License. You may obtain a copy of the License at
- ~
- ~ http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing,
- ~ software distributed under the License is distributed on an
- ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- ~ KIND, either express or implied. See the License for the
- ~ specific language governing permissions and limitations
- ~ under the License.
- -->
-
-<configuration>
-
- <version>2</version>
-
- <repositoryScanning>
- <fileTypes>
- <fileType>
- <id>artifacts</id>
- <patterns>
- <pattern>**/*.pom</pattern>
- <pattern>**/*.jar</pattern>
- <pattern>**/*.ear</pattern>
- <pattern>**/*.war</pattern>
- <pattern>**/*.car</pattern>
- <pattern>**/*.sar</pattern>
- <pattern>**/*.mar</pattern>
- <pattern>**/*.rar</pattern>
- <pattern>**/*.dtd</pattern>
- <pattern>**/*.tld</pattern>
- <pattern>**/*.tar.gz</pattern>
- <pattern>**/*.tar.bz2</pattern>
- <pattern>**/*.zip</pattern>
- </patterns>
- </fileType>
- <fileType>
- <id>indexable-content</id>
- <patterns>
- <pattern>**/*.txt</pattern>
- <pattern>**/*.TXT</pattern>
- <pattern>**/*.block</pattern>
- <pattern>**/*.config</pattern>
- <pattern>**/*.pom</pattern>
- <pattern>**/*.xml</pattern>
- <pattern>**/*.xsd</pattern>
- <pattern>**/*.dtd</pattern>
- <pattern>**/*.tld</pattern>
- </patterns>
- </fileType>
- <fileType>
- <id>auto-remove</id>
- <patterns>
- <pattern>**/*.bak</pattern>
- <pattern>**/*~</pattern>
- <pattern>**/*-</pattern>
- </patterns>
- </fileType>
- <fileType>
- <id>ignored</id>
- <patterns>
- <pattern>**/.htaccess</pattern>
- <pattern>**/KEYS</pattern>
- <pattern>**/*.rb</pattern>
- <pattern>**/*.sh</pattern>
- <pattern>**/.svn/**</pattern>
- <pattern>**/.DAV/**</pattern>
- </patterns>
- </fileType>
- </fileTypes>
- <knownContentConsumers>
- <knownContentConsumer>update-db-artifact</knownContentConsumer>
- <knownContentConsumer>create-missing-checksums</knownContentConsumer>
- <knownContentConsumer>update-db-repository-metadata</knownContentConsumer>
- <knownContentConsumer>validate-checksum</knownContentConsumer>
- <knownContentConsumer>validate-signature</knownContentConsumer>
- <knownContentConsumer>index-content</knownContentConsumer>
- <knownContentConsumer>auto-remove</knownContentConsumer>
- <knownContentConsumer>auto-rename</knownContentConsumer>
- </knownContentConsumers>
- <invalidContentConsumers>
- <invalidContentConsumer>update-db-bad-content</invalidContentConsumer>
- </invalidContentConsumers>
- </repositoryScanning>
-
- <databaseScanning>
- <cronExpression>0 0 * * * ?</cronExpression>
- <unprocessedConsumers>
- <unprocessedConsumer>index-artifact</unprocessedConsumer>
- <unprocessedConsumer>update-db-project</unprocessedConsumer>
- <unprocessedConsumer>validate-repository-metadata</unprocessedConsumer>
- <unprocessedConsumer>index-archive-toc</unprocessedConsumer>
- <unprocessedConsumer>update-db-bytecode-stats</unprocessedConsumer>
- <unprocessedConsumer>index-public-methods</unprocessedConsumer>
- </unprocessedConsumers>
- <cleanupConsumers>
- <cleanupConsumer>not-present-remove-db-artifact</cleanupConsumer>
- <cleanupConsumer>not-present-remove-db-project</cleanupConsumer>
- <cleanupConsumer>not-present-remove-indexed</cleanupConsumer>
- </cleanupConsumers>
- </databaseScanning>
-
-</configuration>
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8" ?>
-<!--
- ~ Licensed to the Apache Software Foundation (ASF) under one
- ~ or more contributor license agreements. See the NOTICE file
- ~ distributed with this work for additional information
- ~ regarding copyright ownership. The ASF licenses this file
- ~ to you under the Apache License, Version 2.0 (the
- ~ "License"); you may not use this file except in compliance
- ~ with the License. You may obtain a copy of the License at
- ~
- ~ http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing,
- ~ software distributed under the License is distributed on an
- ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- ~ KIND, either express or implied. See the License for the
- ~ specific language governing permissions and limitations
- ~ under the License.
- -->
-
-
-<configuration status="debug">
- <appenders>
- <Console name="console" target="SYSTEM_OUT">
- <PatternLayout pattern="%d [%t] %-5p %c %x - %m%n"/>
- </Console>
- </appenders>
- <loggers>
-
- <logger name="org.apache.archiva.web.action.SearchAction" level="debug"/>
-
- <logger name="org.apache.archiva.indexer.search.NexusRepositorySearch" level="debug"/>
-
- <logger name="org.apache.archiva.common.plexusbridge.MavenIndexerUtils" level="debug"/>
-
- <logger name="JPOX" level="error"/>
-
- <!-- debug wagon transfer -->
- <logger name="org.apache.archiva.proxy.common" level="debug"/>
-
- <!-- apache httpclient debug content transfer-->
- <!--
- <logger name="org.apache.http.wire" level="debug"/>
-
- -->
- <logger name="org.apache.http.headers" level="debug"/>
-
- <logger name="org.apache.commons.configuration.DefaultConfigurationBuilder" level="error"/>
-
-
- <logger name="org.apache.archiva.web.action.UploadAction" level="debug"/>
-
-
- <logger name="org.apache.archiva.admin.repository.managed" level="debug"/>
-
-
- <logger name="com.opensymphony.xwork2.ognl.OgnlValueStack" level="error"/>
-
-
- <!-- reduce noise for unit tests -->
-
- <logger name="org.springframework" level="error"/>
-
- <logger name="org.codehaus.plexus" level="error"/>
-
- <logger name="org.apache.archiva.redback" level="error"/>
-
- <logger name="org.apache.cxf" level="error"/>
-
- <logger name="org.quartz" level="error"/>
-
- <root level="info">
- <appender-ref ref="console"/>
- </root>
- </loggers>
-</configuration>
-
-
+++ /dev/null
-<?xml version="1.0"?>
-
-<!--
- ~ Licensed to the Apache Software Foundation (ASF) under one
- ~ or more contributor license agreements. See the NOTICE file
- ~ distributed with this work for additional information
- ~ regarding copyright ownership. The ASF licenses this file
- ~ to you under the Apache License, Version 2.0 (the
- ~ "License"); you may not use this file except in compliance
- ~ with the License. You may obtain a copy of the License at
- ~
- ~ http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing,
- ~ software distributed under the License is distributed on an
- ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- ~ KIND, either express or implied. See the License for the
- ~ specific language governing permissions and limitations
- ~ under the License.
- -->
-<beans xmlns="http://www.springframework.org/schema/beans"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns:context="http://www.springframework.org/schema/context"
- xsi:schemaLocation="http://www.springframework.org/schema/beans
- http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
- http://www.springframework.org/schema/context
- http://www.springframework.org/schema/context/spring-context-3.0.xsd"
- default-lazy-init="true">
-
- <context:property-placeholder system-properties-mode="OVERRIDE"/>
-
- <context:annotation-config/>
- <context:component-scan base-package="org.apache.archiva.webtest.memory"/>
-
- <bean name="archivaConfiguration#test" class="org.apache.archiva.configuration.TestConfiguration" />
- <alias name="archivaConfiguration#test" alias="archivaConfiguration#default" />
-
-</beans>
+++ /dev/null
-<?xml version="1.0"?>
-
-<!--
- ~ Licensed to the Apache Software Foundation (ASF) under one
- ~ or more contributor license agreements. See the NOTICE file
- ~ distributed with this work for additional information
- ~ regarding copyright ownership. The ASF licenses this file
- ~ to you under the Apache License, Version 2.0 (the
- ~ "License"); you may not use this file except in compliance
- ~ with the License. You may obtain a copy of the License at
- ~
- ~ http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing,
- ~ software distributed under the License is distributed on an
- ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- ~ KIND, either express or implied. See the License for the
- ~ specific language governing permissions and limitations
- ~ under the License.
- -->
-<beans xmlns="http://www.springframework.org/schema/beans"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns:context="http://www.springframework.org/schema/context"
- xsi:schemaLocation="http://www.springframework.org/schema/beans
- http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
- http://www.springframework.org/schema/context
- http://www.springframework.org/schema/context/spring-context-3.0.xsd"
- default-lazy-init="true">
-
- <context:property-placeholder system-properties-mode="OVERRIDE"/>
-
- <context:annotation-config/>
- <context:component-scan base-package="org.apache.archiva.webtest.memory"/>
-
- <alias name="repositorySessionFactory#test" alias="repositorySessionFactory"/>
-
- <bean name="userRepositories#test" class="org.apache.archiva.security.UserRepositoriesStub"/>
-
- <alias name="userRepositories#test" alias="userRepositories"/>
-
- <bean name="metadataResolver#test" class="org.apache.archiva.webtest.memory.TestMetadataResolver"/>
- <alias name="metadataResolver#test" alias="metadataResolver#default"/>
-
-</beans>
+++ /dev/null
-<?xml version="1.0" ?>
-<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
- "http://struts.apache.org/dtds/struts-2.0.dtd">
-
-<!-- ==================================================================
- Plexus Security Tools
-
- This should contain the /security namespaced action configurations.
-
- These configurations will likely not need changing.
-
- These configurations point to the overlaid jsp files.
- ================================================================== -->
-
-<struts>
- <!-- ==================================================================
- Security Tools for Users
-
- All Users should be able to access and use the actions contained
- within this package.
- ================================================================== -->
-
- <package name="security" extends="struts-default" namespace="/security">
- <result-types>
- <result-type name="security-external" class="securityExternalResult" />
- </result-types>
-
- <interceptors>
- <interceptor name="redbackForceAdminUser" class="redbackForceAdminUserInterceptor"/>
- <interceptor name="redbackEnvCheck" class="redbackEnvironmentCheckInterceptor"/>
- <interceptor name="redbackAutoLogin" class="redbackAutoLoginInterceptor"/>
- <interceptor name="redbackPolicyEnforcement" class="redbackPolicyEnforcementInterceptor"/>
- <interceptor name="redbackSecureActions" class="redbackSecureActionInterceptor"/>
-
- <!--
- Stacks are order dependent and fail silently by not running the referenced stack.
- Make sure that redbackCommonStack remains above is usages.
- -->
- <interceptor-stack name="redbackCommonStack">
- <interceptor-ref name="redbackEnvCheck"/>
- <interceptor-ref name="redbackForceAdminUser"/>
- <interceptor-ref name="redbackAutoLogin"/>
- <interceptor-ref name="redbackPolicyEnforcement"/>
- <interceptor-ref name="redbackSecureActions">
- <param name="enableReferrerCheck">true</param>
- </interceptor-ref>
- </interceptor-stack>
-
- <interceptor-stack name="securedStack">
- <interceptor-ref name="defaultStack"/>
- <interceptor-ref name="redbackCommonStack"/>
- <interceptor-ref name="tokenSession">
- <param name="excludeMethods">*</param>
- </interceptor-ref>
- </interceptor-stack>
-
- <interceptor-stack name="securedPrepareParamsStack">
- <interceptor-ref name="paramsPrepareParamsStack"/>
- <interceptor-ref name="redbackCommonStack"/>
- </interceptor-stack>
-
- </interceptors>
-
- <default-interceptor-ref name="securedStack"/>
-
- <global-results>
- <result name="security-admin-user-needed" type="redirectAction">
- <param name="actionName">addadmin</param>
- <param name="namespace">/security</param>
- </result>
- <result name="requires-authentication">/WEB-INF/jsp/redback/requiresAuthentication.jsp</result>
- <result name="requires-authorization">/WEB-INF/jsp/redback/accessDenied.jsp</result>
- <result name="security-must-change-password" type="redirectAction">
- <param name="actionName">password</param>
- <param name="namespace">/security</param>
- </result>
- <result name="security-resend-validation-email" type="redirectAction">
- <param name="actionName">userlist</param>
- <param name="namespace">/security</param>
- </result>
- <result name="invalid.token">/WEB-INF/jsp/redback/invalidToken.jsp</result>
- </global-results>
-
- <action name="login" class="redback-login" method="show">
- <result name="input">/WEB-INF/jsp/redback/login.jsp</result>
- <result name="error">/WEB-INF/jsp/redback/login.jsp</result>
- <result name="security-login-success" type="security-external">
- <param name="externalResult">security-login-success</param>
- </result>
- <result name="cancel" type="security-external">
- <param name="externalResult">security-login-cancel</param>
- </result>
- <result name="security-login-locked" type="security-external">
- <param name="externalResult">security-login-locked</param>
- </result>
- </action>
-
- <action name="logout" class="redback-logout" method="logout">
- <result name="security-logout" type="security-external">
- <param name="externalResult">security-logout</param>
- </result>
- </action>
-
- <action name="register" class="redback-register" method="show">
- <result name="input">/WEB-INF/jsp/redback/register.jsp</result>
- <result name="error">/WEB-INF/jsp/redback/register.jsp</result>
- <result name="validation-note">/WEB-INF/jsp/redback/validationNotification.jsp</result>
- <result name="security-register-success" type="security-external">
- <param name="externalResult">security-register-success</param>
- </result>
- <result name="cancel" type="security-external">
- <param name="externalResult">security-register-cancel</param>
- </result>
- </action>
-
- <action name="account" class="redback-account" method="show">
- <result name="input">/WEB-INF/jsp/redback/account.jsp</result>
- <result name="error">/WEB-INF/jsp/redback/account.jsp</result>
- <result name="security-account-success" type="security-external">
- <param name="externalResult">security-account-success</param>
- </result>
- <result name="cancel" type="security-external">
- <param name="externalResult">security-account-cancel</param>
- </result>
- </action>
-
- <action name="password" class="redback-password" method="show">
- <result name="input">/WEB-INF/jsp/redback/password.jsp</result>
- <result name="error">/WEB-INF/jsp/redback/password.jsp</result>
- <result name="security-login-success" type="security-external">
- <param name="externalResult">security-login-success</param>
- </result>
- <result name="security-register-success" type="security-external">
- <param name="externalResult">security-register-success</param>
- </result>
- <result name="success" type="redirect">${targetUrl}</result>
- <result name="cancel" type="redirectAction">
- <param name="actionName">logout</param>
- <param name="namespace">/security</param>
- </result>
- <result name="security-change-password-success">/WEB-INF/jsp/redback/changePasswordSuccess.jsp</result>
- </action>
-
- <action name="passwordReset" class="redback-password-reset" method="show">
- <result name="input">/WEB-INF/jsp/redback/requestPasswordReset.jsp</result>
- <result name="none">/WEB-INF/jsp/redback/login.jsp</result>
- </action>
-
- <action name="addadmin" class="redback-admin-account" method="show">
- <interceptor-ref name="defaultStack"/>
- <result name="input">/WEB-INF/jsp/redback/admin/createAdmin.jsp</result>
- <result name="error">/WEB-INF/jsp/redback/admin/createAdmin.jsp</result>
- <result name="login-error">/WEB-INF/jsp/redback/login.jsp</result>
- <result name="security-login-success" type="security-external">
- <param name="externalResult">security-login-success</param>
- </result>
- <result name="security-login-locked" type="security-external">
- <param name="externalResult">security-login-locked</param>
- </result>
- </action>
-
- <!-- ==================================================================
- Security Tools for Administrators
-
- Only Administrators should be able to access and use these actions
- ================================================================== -->
-
- <action name="systeminfo" class="redback-sysinfo" method="show">
- <result>/WEB-INF/jsp/redback/admin/systemInformation.jsp</result>
- </action>
-
- <action name="adminConsole" class="redback-admin-console" method="show">
- <result>/WEB-INF/jsp/redback/admin/console.jsp</result>
- </action>
-
- <action name="report" class="redback-report" method="generate">
- <result name="error" type="redirectAction">userlist</result>
- </action>
-
- <action name="userlist" class="redback-admin-user-list" method="show">
- <result name="input">/WEB-INF/jsp/redback/admin/userList.jsp</result>
- <result name="success">/WEB-INF/jsp/redback/admin/userList.jsp</result>
- </action>
-
- <action name="useredit" class="redback-admin-user-edit" method="edit">
- <result name="input">/WEB-INF/jsp/redback/admin/userEdit.jsp</result>
- <result name="error">/WEB-INF/jsp/redback/admin/userEdit.jsp</result>
- <result name="confirm">/WEB-INF/jsp/redback/admin/confirmUserAdministrator.jsp</result>
- <result name="confirmError">/WEB-INF/jsp/redback/admin/confirmUserAdministrator.jsp</result>
- <result name="success" type="redirectAction">userlist</result>
- <result name="cancel" type="redirectAction">userlist</result>
- </action>
-
- <action name="usercreate" class="redback-admin-user-create" method="show">
- <result name="input">/WEB-INF/jsp/redback/admin/userCreate.jsp</result>
- <result name="error">/WEB-INF/jsp/redback/admin/userCreate.jsp</result>
- <result name="success" type="redirectAction">
- <param name="actionName">assignments</param>
- <param name="principal">${user.username}</param>
- </result>
- <interceptor-ref name="securedStack">
- <param name="tokenSession.includeMethods">*</param>
- </interceptor-ref>
- </action>
-
- <action name="userdelete" class="redback-admin-user-delete" method="confirm">
- <result name="input">/WEB-INF/jsp/redback/admin/userDelete.jsp</result>
- <result name="error" type="redirectAction">userlist</result>
- <result name="success" type="redirectAction">userlist</result>
- <result name="cancel" type="redirectAction">userlist</result>
- <interceptor-ref name="securedStack">
- <param name="tokenSession.includeMethods">*</param>
- </interceptor-ref>
- </action>
-
- <!-- ==== RBAC Actions ========================================== -->
-
- <!-- This action is meant to be embedded within the User Edit action output jsp.
- It is injected using the <ww:action> taglib -->
- <action name="assignments" class="redback-assignments" method="show">
- <interceptor-ref name="securedStack"/>
- <result name="input">/WEB-INF/jsp/redback/admin/assignments.jsp</result>
- <result name="error">/WEB-INF/jsp/redback/include/error.jsp</result>
- <result name="success">/WEB-INF/jsp/redback/admin/assignments.jsp</result>
- </action>
-
- <action name="addRolesToUser" class="redback-assignments" method="edituser">
- <result name="success" type="redirectAction">userlist</result>
- <interceptor-ref name="securedStack">
- <param name="tokenSession.includeMethods">*</param>
- </interceptor-ref>
- </action>
-
- <action name="removeRolesFromUser" class="redback-assignments" method="edituser">
- <result name="success" type="redirectAction">userlist</result>
- </action>
-
- <action name="rolecreate" class="redback-role-create" method="show">
- <result name="input">/WEB-INF/jsp/redback/admin/roleCreate.jsp</result>
- <result name="error">/WEB-INF/jsp/redback/admin/roleCreate.jsp</result>
- <result name="success" type="redirectAction">userlist</result>
- <interceptor-ref name="securedStack">
- <param name="tokenSession.includeMethods">*</param>
- </interceptor-ref>
- </action>
-
- <action name="role" class="redback-role-edit" method="input">
- <result name="input">/WEB-INF/jsp/redback/admin/role.jsp</result>
- <result name="error">/WEB-INF/jsp/redback/admin/role.jsp</result>
- <result name="success" type="redirectAction">roles</result>
- </action>
-
- <action name="roleedit" class="redback-role-edit" method="edit">
- <result name="input">/WEB-INF/jsp/redback/admin/roleEdit.jsp</result>
- <result name="error">/WEB-INF/jsp/redback/admin/roleEdit.jsp</result>
- <result name="success" type="redirectAction">roles</result>
- </action>
-
- <action name="rolesave" class="redback-role-edit" method="save">
- <result name="input">/WEB-INF/jsp/redback/admin/roleEdit.jsp</result>
- <result name="error">/WEB-INF/jsp/redback/admin/roleEdit.jsp</result>
- <result name="success" type="redirectAction">roles</result>
- <interceptor-ref name="securedStack">
- <param name="tokenSession.includeMethods">*</param>
- </interceptor-ref>
- </action>
-
- <action name="roleusersadd" class="redback-role-edit" method="addUsers">
- <result name="input">/WEB-INF/jsp/redback/admin/roleEdit.jsp</result>
- <result name="error">/WEB-INF/jsp/redback/admin/roleEdit.jsp</result>
- <result name="success">/WEB-INF/jsp/redback/admin/roleEdit.jsp</result>
- <interceptor-ref name="securedStack">
- <param name="tokenSession.includeMethods">*</param>
- </interceptor-ref>
- </action>
-
- <action name="roleusersremove" class="redback-role-edit" method="removeUsers">
- <result name="input">/WEB-INF/jsp/redback/admin/roleEdit.jsp</result>
- <result name="error">/WEB-INF/jsp/redback/admin/roleEdit.jsp</result>
- <result name="success">/WEB-INF/jsp/redback/admin/roleEdit.jsp</result>
- <interceptor-ref name="securedStack">
- <param name="tokenSession.includeMethods">*</param>
- </interceptor-ref>
- </action>
-
- <action name="roleSummary" class="redback-roles" method="list">
- <result name="list">/WEB-INF/jsp/redback/admin/roleSummary.jsp</result>
- </action>
-
- <action name="roles" class="redback-roles" method="list">
- <result name="list">/WEB-INF/jsp/redback/admin/roleList.jsp</result>
- </action>
-
- <action name="permissions" class="redback-permissions" method="list">
- <result name="list">/WEB-INF/jsp/redback/admin/permissionList.jsp</result>
- </action>
-
- <action name="operations" class="redback-operations" method="list">
- <result name="list">/WEB-INF/jsp/redback/admin/operationList.jsp</result>
- </action>
-
- <action name="resources" class="redback-resources" method="list">
- <result name="list">/WEB-INF/jsp/redback/admin/resourceList.jsp</result>
- </action>
-
- <action name="roleModel" class="redback-role-model" method="view">
- <result name="success">/WEB-INF/jsp/redback/admin/roleModel.jsp</result>
- </action>
-
- <!--
- Backup Restore actions
- -->
-
- <action name="backupRestore" class="backup-restore" method="view">
- <result>/WEB-INF/jsp/redback/admin/backupRestore.jsp</result>
- </action>
-
- <action name="backup" class="backup-restore" method="backup">
- <result name="custom_error">/WEB-INF/jsp/redback/admin/backupRestore.jsp</result>
- <result type="redirectAction">backupRestore</result>
- </action>
-
- <action name="restore" class="backup-restore" method="restore">
- <result name="custom_error">/WEB-INF/jsp/redback/admin/backupRestore.jsp</result>
- <result name="success" type="redirectAction">backupRestore</result>
- </action>
-
- </package>
-
-</struts>
+++ /dev/null
-5b0e72a002c047e2f200855f6d904a7e
\ No newline at end of file
+++ /dev/null
-9b3ed9b1a8f1639bcc6a6986930d71a2996ba2fe
\ No newline at end of file
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>
-<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
- <modelVersion>4.0.0</modelVersion>
- <groupId>org.apache.archiva</groupId>
- <artifactId>npe-metadata</artifactId>
- <version>1.0</version>
-</project>
+++ /dev/null
-30124c5194a639f12a2fb01e7aa5a952
\ No newline at end of file
+++ /dev/null
-83bee18c83a6f4964026587cc4ccffe653c45d0c
\ No newline at end of file
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>
-<metadata>
- <groupId>org.apache.archiva</groupId>
- <artifactId>npe-metadata</artifactId>
- <version>1.0</version>
- <versioning>
- <versions>
- <version>1.0</version>
- </versions>
- <lastUpdated>20101105071933</lastUpdated>
- </versioning>
-</metadata>
+++ /dev/null
-6b4a71798c8fcb45ee0411cc9cf68064
\ No newline at end of file
+++ /dev/null
-33c6dbdfdb263c394082d56e349d36e893ead06f
\ No newline at end of file
+++ /dev/null
-<project>
- <groupId>org.apache.archiva</groupId>
- <artifactId>artifact-to-be-uploaded</artifactId>
- <version>1.0</version>
- <packaging>jar</packaging>
-</project>
\ No newline at end of file
+++ /dev/null
-#
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements. See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership. The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations
-# under the License.
-#
-
-redback.admin.fullname=Archiva Admin
-redback.admin.email=admin@toto.com
-redback.admin.password=admin123
\ No newline at end of file
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8" ?>
-<!--
- ~ Licensed to the Apache Software Foundation (ASF) under one
- ~ or more contributor license agreements. See the NOTICE file
- ~ distributed with this work for additional information
- ~ regarding copyright ownership. The ASF licenses this file
- ~ to you under the Apache License, Version 2.0 (the
- ~ "License"); you may not use this file except in compliance
- ~ with the License. You may obtain a copy of the License at
- ~
- ~ http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing,
- ~ software distributed under the License is distributed on an
- ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- ~ KIND, either express or implied. See the License for the
- ~ specific language governing permissions and limitations
- ~ under the License.
- -->
-
-
-<configuration status="debug">
- <appenders>
- <Console name="console" target="SYSTEM_OUT">
- <PatternLayout pattern="%d [%t] %-5p %c %x - %m%n"/>
- </Console>
- </appenders>
- <loggers>
-
- <logger name="org.apache.archiva.web.action.SearchAction" level="debug"/>
-
- <logger name="org.apache.archiva.indexer.search.NexusRepositorySearch" level="debug"/>
-
- <logger name="org.apache.archiva.common.plexusbridge.MavenIndexerUtils" level="debug"/>
-
- <logger name="JPOX" level="error"/>
-
- <logger name="org.apache.commons.configuration.DefaultConfigurationBuilder" level="error"/>
-
- <logger name="org.apache.archiva.admin.repository.managed" level="debug"/>
-
- <logger name="com.opensymphony.xwork2.ognl.OgnlValueStack" level="error"/>
-
-
- <logger name="org.springframework" level="info"/>
-
-
- <logger name="org.codehaus.plexus" level="info"/>
-
- <logger name="org.apache.archiva.redback" level="info"/>
-
- <logger name="org.apache.cxf" level="info"/>
-
- <logger name="org.quartz" level="info"/>
-
- <logger name="org.apache.archiva.indexer.merger" level="debug"/>
-
- <root level="info">
- <appender-ref ref="console"/>
- </root>
- </loggers>
-</configuration>
-
-
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- ~ Licensed to the Apache Software Foundation (ASF) under one
- ~ or more contributor license agreements. See the NOTICE file
- ~ distributed with this work for additional information
- ~ regarding copyright ownership. The ASF licenses this file
- ~ to you under the Apache License, Version 2.0 (the
- ~ "License"); you may not use this file except in compliance
- ~ with the License. You may obtain a copy of the License at
- ~
- ~ http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing,
- ~ software distributed under the License is distributed on an
- ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- ~ KIND, either express or implied. See the License for the
- ~ specific language governing permissions and limitations
- ~ under the License.
- -->
-<Context path="/archiva">
- <Resource name="jdbc/users" auth="Container" type="javax.sql.DataSource"
- username="sa"
- password=""
- driverClassName="org.apache.derby.jdbc.EmbeddedDriver"
- url="jdbc:derby:${catalina.base}/target/database/users;create=true"
- />
- <Resource name="mail/Session" auth="Container"
- type="javax.mail.Session"
- mail.smtp.host="localhost"/>
-
-</Context>
+++ /dev/null
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!--
- ~ Licensed to the Apache Software Foundation (ASF) under one
- ~ or more contributor license agreements. See the NOTICE file
- ~ distributed with this work for additional information
- ~ regarding copyright ownership. The ASF licenses this file
- ~ to you under the Apache License, Version 2.0 (the
- ~ "License"); you may not use this file except in compliance
- ~ with the License. You may obtain a copy of the License at
- ~
- ~ http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing,
- ~ software distributed under the License is distributed on an
- ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- ~ KIND, either express or implied. See the License for the
- ~ specific language governing permissions and limitations
- ~ under the License.
- -->
-
-<web-app xmlns="http://java.sun.com/xml/ns/j2ee" version="2.4"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
-
- <display-name>Apache Archiva</display-name>
-
- <listener>
- <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
- </listener>
-
- <context-param>
- <param-name>contextClass</param-name>
- <param-value>org.apache.archiva.redback.components.springutils.CachingWebApplicationContext</param-value>
- </context-param>
-
- <context-param>
- <param-name>contextConfigLocation</param-name>
- <param-value>
- classpath*:/spring-context.xml
- classpath*:/META-INF/spring-context.xml
- </param-value>
- </context-param>
-
-</web-app>