* @param workspace
* @return
*/
private Workspace readContributions(Workspace workspace) {
Workspace contributions = workspaceFactory.createWorkspace();
try {
for (Contribution c: workspace.getContributions()) {
URI uri = URI.create(c.getURI());
URL location = locationURL(c.getLocation());
// Get contribution from cache
ContributionCache contributionCache = cache.contributions.get(location);
long lastModified = lastModified(location);
if (contributionCache != null) {
if (contributionCache.contributionLastModified == lastModified) {
Contribution contribution = contributionCache.contribution;
contribution.setUnresolved(false);
contributions.getContributions().add(contribution);
continue;
}
// Reset contribution cache
cache.contributions.remove(location);
}
try {
Contribution contribution = (Contribution)contributionProcessor.read(null, uri, location);
contribution.setUnresolved(false);
contributions.getContributions().add(contribution);
// Cache contribution
contributionCache = new ContributionCache();
contributionCache.contribution = contribution;
contributionCache.contributionLastModified = lastModified;
cache.contributions.put(location, contributionCache);
// Make sure that the cloud contribution does not contain
// default imports/exports as we want to isolate it from application
// provided contributions
if (contribution.getURI().equals(DEPLOYMENT_CONTRIBUTION_URI)) {
for (Iterator<Import> i = contribution.getImports().iterator(); i.hasNext(); ) {
Import import_ = i.next();
if (import_ instanceof DefaultImport) {
i.remove();
}
}
for (Iterator<Export> i = contribution.getExports().iterator(); i.hasNext(); ) {
Export export = i.next();
if (export instanceof DefaultExport) {
i.remove();
}
}
}
} catch (ContributionReadException e) {
Contribution contribution = contributionFactory.createContribution();
contribution.setURI(c.getURI());
contribution.setLocation(c.getLocation());
contribution.setUnresolved(true);
contributions.getContributions().add(contribution);
}
}
} catch (Exception e) {
throw new ServiceRuntimeException(e);
}