package org.semanticsoft.vaaclipse.p2.service.impl;
import java.io.File;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.core.runtime.Status;
import org.eclipse.equinox.internal.p2.artifact.repository.ArtifactRepositoryManager;
import org.eclipse.equinox.internal.p2.metadata.repository.MetadataRepositoryManager;
import org.eclipse.equinox.p2.core.IProvisioningAgent;
import org.eclipse.equinox.p2.core.ProvisionException;
import org.eclipse.equinox.p2.operations.ProvisioningSession;
import org.eclipse.equinox.p2.operations.RepositoryTracker;
import org.eclipse.equinox.p2.repository.IRepository;
import org.eclipse.equinox.p2.repository.IRepositoryManager;
import org.eclipse.equinox.p2.repository.artifact.IArtifactRepository;
import org.eclipse.equinox.p2.repository.artifact.spi.ArtifactRepositoryFactory;
import org.eclipse.equinox.p2.repository.metadata.IMetadataRepository;
import org.semanticsoft.vaaclipse.p2.iservice.ISitesManager;
import org.semanticsoft.vaaclipse.p2.util.Utils;
/*******************************************************************************
* Copyright (c) 2012 Klevis Ramo and others. 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: Klevis Ramo - initial API and implementation
*******************************************************************************/
public class SitesManager implements ISitesManager {
@Override
public List<URI> listAllUpdateSites(IProvisioningAgent agent) {
MetadataRepositoryManager metadataRepositoryManager = new MetadataRepositoryManager(
agent);
URI[] knownRepositories = metadataRepositoryManager
.getKnownRepositories(MetadataRepositoryManager.REPOSITORIES_ALL);
URI[] knownRepositories2 = metadataRepositoryManager
.getKnownRepositories(MetadataRepositoryManager.REPOSITORIES_DISABLED);
List<URI> finalRepositories = new ArrayList<URI>();
Collections.addAll(finalRepositories, knownRepositories);
Collections.addAll(finalRepositories, knownRepositories2);
return finalRepositories;
}
@Override
public String getReposiotoryName(IProvisioningAgent agent, URI uri) {
MetadataRepositoryManager metadataRepositoryManager = new MetadataRepositoryManager(
agent);
return metadataRepositoryManager.getRepositoryProperty(uri,
IRepository.PROP_NAME);
}
@Override
public String getReposiotoryNickName(IProvisioningAgent agent, URI uri) {
MetadataRepositoryManager metadataRepositoryManager = new MetadataRepositoryManager(
agent);
return metadataRepositoryManager.getRepositoryProperty(uri,
IRepository.PROP_NICKNAME);
}
@Override
public void setReposiotoryNickName(IProvisioningAgent agent, URI uri,
String nickName) {
MetadataRepositoryManager metadataRepositoryManager = new MetadataRepositoryManager(
agent);
ArtifactRepositoryManager artifactRepositoryManager = new ArtifactRepositoryManager(
agent);
metadataRepositoryManager.setRepositoryProperty(uri,
IRepository.PROP_NICKNAME, nickName);
artifactRepositoryManager.setRepositoryProperty(uri,
IRepository.PROP_NICKNAME, nickName);
}
@Override
public boolean isRepositoryEnabled(IProvisioningAgent agent, URI uri) {
MetadataRepositoryManager metadataRepositoryManager = new MetadataRepositoryManager(
agent);
return metadataRepositoryManager.isEnabled(uri);
}
@Override
public void setRepositoryEnabled(IProvisioningAgent agent, URI uri,
boolean enable) {
MetadataRepositoryManager metadataRepositoryManager = new MetadataRepositoryManager(
agent);
ArtifactRepositoryManager artifactRepositoryManager = new ArtifactRepositoryManager(
agent);
metadataRepositoryManager.setEnabled(uri, enable);
artifactRepositoryManager.setEnabled(uri, enable);
}
@Override
public IStatus validate(IProvisioningAgent agent, String uri) {
RepositoryTracker repositoryTracker = new RepositoryTracker() {
@Override
public void removeRepositories(URI[] locations,
ProvisioningSession session) {
// TODO Auto-generated method stub
}
@Override
public void refreshRepositories(URI[] locations,
ProvisioningSession session, IProgressMonitor monitor) {
// TODO Auto-generated method stub
}
@Override
public URI[] getKnownRepositories(ProvisioningSession session) {
// TODO Auto-generated method stub
return null;
}
@Override
public void addRepository(URI location, String nickname,
ProvisioningSession session) {
// TODO Auto-generated method stub
}
@Override
public void reportLoadFailure(URI location,
ProvisionException exception) {
// TODO Auto-generated method stub
super.reportLoadFailure(location, exception);
}
};
try {
List<URI> listAllUpdateSites = listAllUpdateSites(agent);
for (URI uri2 : listAllUpdateSites) {
if (uri2.toString().equals(uri)) {
throw new RuntimeException("Repository alwrady added");
}
}
URI u = null;
NullProgressMonitor nullProgressMonitor = new NullProgressMonitor();
IStatus validateRepositoryLocation = repositoryTracker
.validateRepositoryLocation(new ProvisioningSession(agent),
new URI(uri), true, new NullProgressMonitor());
if (validateRepositoryLocation.isOK()) {
if (!Utils.containsString(uri, "http", false)
&& !(uri.contains(".jar") || uri.contains(".zip"))) {
u = new File(uri).toURI();
}
if (u == null)
try {
u = new URI(uri);
} catch (URISyntaxException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
MetadataRepositoryManager metadataRepositoryManager = new MetadataRepositoryManager(
agent);
IMetadataRepository loadRepository = null;
try {
loadRepository = metadataRepositoryManager.loadRepository(
u, IRepositoryManager.REPOSITORIES_ALL,
nullProgressMonitor);
} catch (ProvisionException e) {
// TODO Auto-generated catch block
e.printStackTrace();
throw new RuntimeException(e.getMessage());
}
return Status.OK_STATUS;
} else
return validateRepositoryLocation;
} catch (URISyntaxException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return Status.OK_STATUS;
}
@Override
public void addRepository(String uri, IProvisioningAgent agent) {
MetadataRepositoryManager metadataRepositoryManager = new MetadataRepositoryManager(
agent);
ArtifactRepositoryManager artifactRepositoryManager = new ArtifactRepositoryManager(
agent);
try {
URI location = new URI(uri);
metadataRepositoryManager.addRepository(location);
artifactRepositoryManager.addRepository(location);
metadataRepositoryManager.setRepositoryProperty(location,
IRepository.PROP_SYSTEM, Boolean.FALSE.toString());
artifactRepositoryManager.setRepositoryProperty(location,
IRepository.PROP_SYSTEM, Boolean.FALSE.toString());
setReposiotoryNickName(agent, location,
getReposiotoryName(agent, location));
} catch (URISyntaxException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (RuntimeException e) {
// TODO: handle exception
throw e;
}
}
@Override
public void addRepository(String uri, IProvisioningAgent agent,
String nickName) {
MetadataRepositoryManager metadataRepositoryManager = new MetadataRepositoryManager(
agent);
ArtifactRepositoryManager artifactRepositoryManager = new ArtifactRepositoryManager(
agent);
try {
URI location = new URI(uri);
metadataRepositoryManager.addRepository(location);
artifactRepositoryManager.addRepository(location);
metadataRepositoryManager.setRepositoryProperty(location,
IRepository.PROP_SYSTEM, Boolean.FALSE.toString());
artifactRepositoryManager.setRepositoryProperty(location,
IRepository.PROP_SYSTEM, Boolean.FALSE.toString());
setReposiotoryNickName(agent, location, nickName);
} catch (URISyntaxException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (RuntimeException e) {
// TODO: handle exception
throw e;
}
}
@Override
public void removeRepository(String uri, IProvisioningAgent agent) {
MetadataRepositoryManager metadataRepositoryManager = new MetadataRepositoryManager(
agent);
ArtifactRepositoryManager artifactRepositoryManager = new ArtifactRepositoryManager(
agent);
try {
metadataRepositoryManager.removeRepository(new URI(uri));
artifactRepositoryManager.removeRepository(new URI(uri));
} catch (URISyntaxException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (RuntimeException e) {
// TODO: handle exception
throw e;
}
}
}