blob: cb3be1a23ca28e91abc21d856977fc95643b1209 [file] [log] [blame]
/*
* Copyright 2000-2009 JetBrains s.r.o.
*
* 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.
*/
package org.jetbrains.idea.maven.server.embedder;
import org.apache.maven.artifact.manager.WagonManager;
import org.apache.maven.artifact.repository.DefaultArtifactRepository;
import org.apache.maven.wagon.ConnectionException;
import org.apache.maven.wagon.ResourceDoesNotExistException;
import org.apache.maven.wagon.Wagon;
import org.apache.maven.wagon.WagonException;
import org.apache.maven.wagon.authentication.AuthenticationException;
import org.apache.maven.wagon.authorization.AuthorizationException;
import org.apache.maven.wagon.events.TransferListener;
import org.apache.maven.wagon.repository.Repository;
import org.jetbrains.idea.maven.server.Maven2ServerGlobals;
import org.sonatype.nexus.index.updater.ResourceFetcher;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.rmi.RemoteException;
public class Maven2ServerIndexFetcher implements ResourceFetcher {
private final String myOriginalRepositoryId;
private final String myOriginalRepositoryUrl;
private final WagonManager myWagonManager;
private final TransferListener myListener;
private Wagon myWagon = null;
public Maven2ServerIndexFetcher(String originalRepositoryId,
String originalRepositoryUrl,
WagonManager wagonManager,
TransferListener listener) {
myOriginalRepositoryId = originalRepositoryId;
myOriginalRepositoryUrl = originalRepositoryUrl;
myWagonManager = wagonManager;
myListener = listener;
}
public void connect(String _ignoredContextId, String _ignoredUrl) throws IOException {
String mirrorUrl = myWagonManager.getMirrorRepository(new DefaultArtifactRepository(myOriginalRepositoryId,
myOriginalRepositoryUrl,
null)).getUrl();
String indexUrl = mirrorUrl + (mirrorUrl.endsWith("/") ? "" : "/") + ".index";
Repository repository = new Repository(myOriginalRepositoryId, indexUrl);
try {
myWagon = myWagonManager.getWagon(repository);
myWagon.addTransferListener(myListener);
myWagon.connect(repository,
myWagonManager.getAuthenticationInfo(repository.getId()),
myWagonManager.getProxy(repository.getProtocol()));
}
catch (AuthenticationException e) {
IOException newEx = new IOException("Authentication exception connecting to " + repository);
newEx.initCause(e);
throw newEx;
}
catch (WagonException e) {
IOException newEx = new IOException("Wagon exception connecting to " + repository);
newEx.initCause(e);
throw newEx;
}
}
public void disconnect() throws RemoteException {
if (myWagon == null) return;
try {
myWagon.disconnect();
}
catch (ConnectionException ex) {
Maven2ServerGlobals.getLogger().warn(ex);
}
}
public void retrieve(String name, File targetFile) throws IOException {
try {
myWagon.get(name, targetFile);
}
catch (AuthorizationException e) {
IOException newEx = new IOException("Authorization exception retrieving " + name);
newEx.initCause(e);
throw newEx;
}
catch (ResourceDoesNotExistException e) {
IOException newEx = new FileNotFoundException("Resource " + name + " does not exist");
newEx.initCause(e);
throw newEx;
}
catch (WagonException e) {
IOException newEx = new IOException("Transfer for " + name + " failed");
newEx.initCause(e);
throw newEx;
}
}
}