use of io.fabric8.api.ProfileService in project fabric8 by jboss-fuse.
the class FabricResource method versions.
/**
* Returns the list of version ids
*/
@GET
@Path("versions")
public Map<String, String> versions() {
FabricService fabricService = getFabricService();
if (fabricService != null) {
ProfileService profileService = fabricService.adapt(ProfileService.class);
List<String> versionIds = profileService.getVersions();
return mapToLinks(versionIds, "/version/");
} else {
noFabricService();
}
return Collections.emptyMap();
}
use of io.fabric8.api.ProfileService in project fabric8 by jboss-fuse.
the class ProfileResource method deleteProfile.
@DELETE
public void deleteProfile() {
FabricService fabricService = getFabricService();
Objects.notNull(fabricService, "fabricService");
ProfileService profileService = getProfileService();
Objects.notNull(profileService, "profileService");
profileService.deleteProfile(fabricService, profile.getVersion(), profile.getId(), true);
}
use of io.fabric8.api.ProfileService in project fabric8 by jboss-fuse.
the class ResourceSupport method getProfileService.
protected ProfileService getProfileService() {
FabricService fabricService = getFabricService();
ProfileService profileService = null;
if (fabricService != null) {
profileService = fabricService.adapt(ProfileService.class);
}
return profileService;
}
use of io.fabric8.api.ProfileService in project fabric8 by jboss-fuse.
the class ProfileWatcherImpl method run.
public void run() {
assertValid();
LOG.debug("Profile watcher thread started");
int oldCounter = -1;
SortedSet<String> oldActiveProfiles = null;
Map<File, Long> localChecksums = new HashMap<File, Long>();
Map<File, Long> localModified = new HashMap<File, Long>();
Set<Profile> refreshProfiles = new HashSet<Profile>();
ProfileService profileService = fabricService.get().adapt(ProfileService.class);
while (running.get() && watchURLs.size() > 0) {
SortedSet<String> currentActiveProfiles = getCurrentActiveProfileVersions();
if (profileArtifacts == null || oldCounter != counter.get() || oldActiveProfiles == null || !oldActiveProfiles.equals(currentActiveProfiles)) {
oldCounter = counter.get();
oldActiveProfiles = currentActiveProfiles;
try {
LOG.debug("Reloading the currently active profile artifacts");
profileArtifacts = findProfileArifacts();
} catch (Exception e) {
LOG.error("Failed to get profiles artifacts: " + e, e);
}
}
// lets refresh profiles on the next loop; so we've time to finish uploading/modifying files
for (Profile profile : refreshProfiles) {
LOG.info("Refreshing profile: " + profile);
Profiles.refreshProfile(fabricService.get(), profile);
}
refreshProfiles.clear();
if (profileArtifacts != null) {
List<File> localRepositories = new LinkedList<>();
if (mavenResolver.get().getLocalRepository() != null) {
localRepositories.add(mavenResolver.get().getLocalRepository());
}
if (mavenResolver.get().getDefaultRepositories() != null) {
for (LocalRepository repository : mavenResolver.get().getDefaultRepositories()) {
localRepositories.add(repository.getBasedir());
}
}
Set<Map.Entry<ProfileVersionKey, Map<String, Parser>>> entries = profileArtifacts.entrySet();
for (Map.Entry<ProfileVersionKey, Map<String, Parser>> entry : entries) {
ProfileVersionKey key = entry.getKey();
Map<String, Parser> artifactMap = entry.getValue();
// lets find a container for the profile
Profile profile = key.getProfile();
Properties checksums = findProfileChecksums(fabricService.get(), profile);
if (checksums != null) {
Set<Map.Entry<String, Parser>> artifactMapEntries = artifactMap.entrySet();
for (Map.Entry<String, Parser> artifactMapEntry : artifactMapEntries) {
String location = artifactMapEntry.getKey();
Parser parser = artifactMapEntry.getValue();
if (isSnapshot(parser) || wildCardMatch(location)) {
Object value = checksums.get(location);
if (value == null) {
value = checksums.get(JavaContainers.removeUriPrefixBeforeMaven(location));
}
Long checksum = null;
if (value instanceof Number) {
checksum = ((Number) value).longValue();
} else if (value instanceof String) {
checksum = Long.parseLong((String) value);
}
if (checksum == null) {
if (missingChecksums.add(location)) {
LOG.warn("Could not find checksum for location " + location);
}
} else {
File file = null;
for (File localRepository : localRepositories) {
File _file = new File(localRepository.getPath() + File.separator + parser.getArtifactPath());
if (_file.isFile()) {
file = _file;
break;
}
}
if (!file.exists()) {
LOG.info("Ignoring file " + file.getPath() + " as it does not exist");
} else {
// lets use a cache of last modified times to avoid having to continuously
// recalculate the checksum on each file
Long oldModfied = localModified.get(file);
long modified = file.lastModified();
if (oldModfied == null || modified != oldModfied) {
localModified.put(file, modified);
Long fileChecksum = getFileChecksum(file);
if (fileChecksum != null && !fileChecksum.equals(checksum)) {
// lets keep track of local checksums in case we've already started the upload process
// and it takes the profile a little while to respond to uploaded jars and to
// refreshed profiles
Long localChecksum = localChecksums.get(file);
if (localChecksum == null || !localChecksum.equals(fileChecksum)) {
localChecksums.put(file, fileChecksum);
LOG.info("Checksums don't match for " + location + ", container: " + checksum + " and local file: " + fileChecksum);
LOG.info("Updated version of " + location + " detected in " + file);
if (isUpload()) {
uploadFile(location, parser, file);
}
refreshProfiles.add(profile);
}
}
}
}
}
} else {
if (LOG.isTraceEnabled()) {
LOG.trace("Ignoring " + location);
}
}
}
}
}
}
try {
Thread.sleep(interval);
} catch (InterruptedException ex) {
running.set(false);
}
}
if (LOG.isDebugEnabled()) {
LOG.debug("Profile watcher thread stopped");
}
}
use of io.fabric8.api.ProfileService in project fabric8 by jboss-fuse.
the class ProfileDownloader method downloadProfile.
/**
* Downloads the bundles, features and FABs for this profile.
*/
public void downloadProfile(Profile profile) throws Exception {
if (listener != null) {
listener.beforeDownloadProfile(profile);
}
ProfileService profileService = fabricService.adapt(ProfileService.class);
if (!profile.isOverlay()) {
profile = profileService.getOverlayProfile(profile);
}
DownloadManager downloadManager = DownloadManagers.createDownloadManager(fabricService, executorService);
Set<String> bundles = new LinkedHashSet<String>();
Set<Feature> features = new LinkedHashSet<Feature>();
addMavenBundles(fabricService, profile, bundles, profile.getBundles());
addMavenBundles(fabricService, profile, bundles, profile.getFabs());
AgentUtils.addFeatures(features, fabricService, downloadManager, profile);
Map<String, File> files = AgentUtils.downloadBundles(downloadManager, features, bundles, Collections.<String>emptySet(), !isDownloadFilesFromProfile());
Set<Map.Entry<String, File>> entries = files.entrySet();
for (Map.Entry<String, File> entry : entries) {
String name = entry.getKey();
File file = entry.getValue();
if (processedFiles.add(file)) {
String fileName = file.getName();
String mvnCoords = getMavenCoords(name);
File destFile;
if (mvnCoords != null) {
Parser parser = new Parser(mvnCoords);
destFile = new File(target, parser.getArtifactPath());
} else {
destFile = new File(target, fileName);
}
if (force || !destFile.exists()) {
LOG.info("Copying file: " + file + " to: " + destFile.getCanonicalPath());
Files.copy(file, destFile);
if (listener != null) {
listener.onCopyDone(profile, destFile);
}
}
}
}
if (listener != null) {
listener.afterDownloadProfile(profile);
}
}
Aggregations