/******************************************************************************* * Copyright (c) 2010, 2014 Sonatype, Inc. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Sonatype, Inc. - initial API and implementation *******************************************************************************/ package org.eclipse.aether.internal.ant.types; import java.util.Collections; import java.util.List; import org.apache.tools.ant.BuildException; import org.apache.tools.ant.Project; import org.apache.tools.ant.Task; import org.apache.tools.ant.types.DataType; import org.apache.tools.ant.types.Reference; import org.eclipse.aether.internal.ant.AntRepoSys; import org.eclipse.aether.repository.RepositoryPolicy; /** */ public class RemoteRepository extends DataType implements RemoteRepositoryContainer { private String id; private String url; private String type; private Policy releasePolicy; private Policy snapshotPolicy; private boolean releases = true; private boolean snapshots = false; private String checksums; private String updates; private Authentication authentication; @Override public void setProject( Project project ) { super.setProject( project ); // NOTE: Just trigger side-effect of default initialization before this type potentially overrides central AntRepoSys.getInstance( project ); } protected RemoteRepository getRef() { return (RemoteRepository) getCheckedRef(); } public void validate( Task task ) { if ( isReference() ) { getRef().validate( task ); } else { if ( url == null || url.length() <= 0 ) { throw new BuildException( "You must specify the 'url' for a remote repository" ); } if ( id == null || id.length() <= 0 ) { throw new BuildException( "You must specify the 'id' for a remote repository" ); } } } public void setRefid( Reference ref ) { if ( id != null || url != null || type != null || checksums != null || updates != null ) { throw tooManyAttributes(); } if ( releasePolicy != null || snapshotPolicy != null || authentication != null ) { throw noChildrenAllowed(); } super.setRefid( ref ); } public String getId() { if ( isReference() ) { return getRef().getId(); } return id; } public void setId( String id ) { this.id = id; } public String getUrl() { if ( isReference() ) { return getRef().getUrl(); } return url; } public void setUrl( String url ) { checkAttributesAllowed(); this.url = url; } public String getType() { if ( isReference() ) { return getRef().getType(); } return ( type != null ) ? type : "default"; } public void setType( String type ) { checkAttributesAllowed(); this.type = type; } public Policy getReleasePolicy() { if ( isReference() ) { return getRef().getReleasePolicy(); } return releasePolicy; } public void addReleases( Policy policy ) { checkChildrenAllowed(); if ( this.releasePolicy != null ) { throw new BuildException( "You must not specify multiple <releases> elements" ); } this.releasePolicy = policy; } public Policy getSnapshotPolicy() { if ( isReference() ) { return getRef().getSnapshotPolicy(); } return snapshotPolicy; } public void addSnapshots( Policy policy ) { checkChildrenAllowed(); if ( this.snapshotPolicy != null ) { throw new BuildException( "You must not specify multiple <snapshots> elements" ); } this.snapshotPolicy = policy; } public boolean isReleases() { if ( isReference() ) { return getRef().isReleases(); } return releases; } public void setReleases( boolean releases ) { checkAttributesAllowed(); this.releases = releases; } public boolean isSnapshots() { if ( isReference() ) { return getRef().isSnapshots(); } return snapshots; } public void setSnapshots( boolean snapshots ) { checkAttributesAllowed(); this.snapshots = snapshots; } public String getUpdates() { if ( isReference() ) { return getRef().getUpdates(); } return ( updates != null ) ? updates : RepositoryPolicy.UPDATE_POLICY_DAILY; } public void setUpdates( String updates ) { checkAttributesAllowed(); checkUpdates( updates ); this.updates = updates; } protected static void checkUpdates( String updates ) { if ( !RepositoryPolicy.UPDATE_POLICY_ALWAYS.equals( updates ) && !RepositoryPolicy.UPDATE_POLICY_DAILY.equals( updates ) && !RepositoryPolicy.UPDATE_POLICY_NEVER.equals( updates ) && !updates.startsWith( RepositoryPolicy.UPDATE_POLICY_INTERVAL ) ) { throw new BuildException( "'" + updates + "' is not a permitted update policy" ); } } public String getChecksums() { if ( isReference() ) { return getRef().getChecksums(); } return ( checksums != null ) ? checksums : RepositoryPolicy.CHECKSUM_POLICY_WARN; } public void setChecksums( String checksums ) { checkAttributesAllowed(); checkChecksums( checksums ); this.checksums = checksums; } protected static void checkChecksums( String checksums ) { if ( !RepositoryPolicy.CHECKSUM_POLICY_FAIL.equals( checksums ) && !RepositoryPolicy.CHECKSUM_POLICY_WARN.equals( checksums ) && !RepositoryPolicy.CHECKSUM_POLICY_IGNORE.equals( checksums ) ) { throw new BuildException( "'" + checksums + "' is not a permitted checksum policy" ); } } public Authentication getAuthentication() { if ( isReference() ) { return getRef().getAuthentication(); } return authentication; } public void addAuthentication( Authentication authentication ) { checkChildrenAllowed(); if ( this.authentication != null ) { throw new BuildException( "You must not specify multiple <authentication> elements" ); } this.authentication = authentication; } public void setAuthRef( Reference ref ) { checkAttributesAllowed(); if ( authentication == null ) { authentication = new Authentication(); authentication.setProject( getProject() ); } authentication.setRefid( ref ); } public List<RemoteRepository> getRepositories() { return Collections.singletonList( this ); } public static class Policy { private boolean enabled = true; private String checksumPolicy; private String updatePolicy; public boolean isEnabled() { return enabled; } public void setEnabled( boolean enabled ) { this.enabled = enabled; } public String getChecksums() { return checksumPolicy; } public void setChecksums( String checksumPolicy ) { checkChecksums( checksumPolicy ); this.checksumPolicy = checksumPolicy; } public String getUpdates() { return updatePolicy; } public void setUpdates( String updatePolicy ) { checkUpdates( updatePolicy ); this.updatePolicy = updatePolicy; } } }