/******************************************************************************* * Copyright (c) 2006-2010 eBay Inc. All Rights Reserved. * 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 *******************************************************************************/ /** * */ package org.ebayopensource.turmeric.repositorysystem.imp.impl; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; import java.util.TreeSet; import org.ebayopensource.turmeric.eclipse.core.resources.constants.SOAProjectConstants.SupportedProjectType; import org.ebayopensource.turmeric.eclipse.maven.core.model.MavenAssetInfo; import org.ebayopensource.turmeric.eclipse.maven.core.model.MavenProjectInfo; import org.ebayopensource.turmeric.eclipse.maven.core.utils.MavenCoreUtils; import org.ebayopensource.turmeric.eclipse.maven.core.utils.SOAMavenConstants; import org.ebayopensource.turmeric.eclipse.repositorysystem.core.GlobalRepositorySystem; import org.ebayopensource.turmeric.eclipse.repositorysystem.core.ISOAAssetRegistry; import org.ebayopensource.turmeric.eclipse.repositorysystem.utils.TurmericServiceUtils; import org.ebayopensource.turmeric.eclipse.resources.model.AssetInfo; import org.ebayopensource.turmeric.eclipse.resources.model.IAssetInfo; import org.ebayopensource.turmeric.eclipse.resources.model.ISOAConsumerProject.SOAClientEnvironment; import org.ebayopensource.turmeric.eclipse.resources.model.ISOAProject; import org.ebayopensource.turmeric.eclipse.resources.model.ProjectInfo; import org.ebayopensource.turmeric.eclipse.resources.model.SOAConsumerMetadata; import org.ebayopensource.turmeric.eclipse.resources.model.SOAConsumerProject; import org.ebayopensource.turmeric.eclipse.resources.model.SOAImplMetadata; import org.ebayopensource.turmeric.eclipse.resources.model.SOAImplProject; import org.ebayopensource.turmeric.eclipse.resources.model.SOAIntfMetadata; import org.ebayopensource.turmeric.eclipse.resources.model.SOAIntfProject; import org.ebayopensource.turmeric.eclipse.resources.util.SOAConsumerUtil; import org.ebayopensource.turmeric.eclipse.resources.util.SOAImplUtil; import org.ebayopensource.turmeric.eclipse.resources.util.SOAIntfUtil; import org.ebayopensource.turmeric.eclipse.resources.util.SOAServiceUtil; import org.ebayopensource.turmeric.eclipse.utils.plugin.WorkspaceUtil; import org.ebayopensource.turmeric.repositorysystem.imp.utils.TurmericConstants; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IProject; import org.eclipse.core.runtime.IPath; /** * The Class TurmericAssetRegistry. * * @author yayu */ public class TurmericAssetRegistry implements ISOAAssetRegistry { /** * Instantiates a new turmeric asset registry. */ public TurmericAssetRegistry() { super(); } /** * {@inheritDoc} * * @see org.ebayopensource.turmeric.eclipse.repositorysystem.core.ISOAAssetRegistry#getAllLibraries() */ public Set<? extends AssetInfo> getAllAvailableServices() throws Exception { final Set<AssetInfo> result = new TreeSet<AssetInfo>(); for (final AssetInfo assetInfo : MavenCoreUtils.getAllServicesInLocalRepository()) { result.add(assetInfo); } return result; } /** * {@inheritDoc} * * @see org.ebayopensource.turmeric.eclipse.repositorysystem.core.ISOAAssetRegistry#getAllLibraries() */ public Set<AssetInfo> getAllLibraries() throws Exception { return new HashSet<AssetInfo>(); } /** * {@inheritDoc} * * @see org.ebayopensource.turmeric.eclipse.repositorysystem.core.ISOAAssetRegistry#getDependencies(java.lang.String) */ public List<AssetInfo> getDependencies(String projectName) throws Exception { return MavenCoreUtils.getDependencies(projectName); } /** * {@inheritDoc} * * @see org.ebayopensource.turmeric.eclipse.repositorysystem.core.ISOAAssetRegistry#getProjectInfo(java.lang.String) */ public ProjectInfo getProjectInfo(String projectName) throws Exception { return MavenCoreUtils.getProjectInfo(projectName); } /** * {@inheritDoc} * */ public IAssetInfo getAsset(IProject project) throws Exception { return MavenCoreUtils.getProjectInfo(project); } /** * {@inheritDoc} * * @see org.ebayopensource.turmeric.eclipse.repositorysystem.core.ISOAAssetRegistry#getSOAProject(org.eclipse.core.resources.IProject) */ public ISOAProject getSOAProject(IProject project) throws Exception { WorkspaceUtil.refresh(project); SupportedProjectType projectType = GlobalRepositorySystem.instanceOf().getActiveRepositorySystem() .getProjectType(project); final ISOAProject soaProject = SOAServiceUtil.loadSOAProject(project, TurmericConstants.PROJECT_NATUREIDS_MAP.get(projectType)); final MavenProjectInfo projectInfo = MavenCoreUtils.getProjectInfo(project); if (projectInfo != null) { soaProject.setRequiredLibraries(projectInfo.getRequiredLibraries()); soaProject.setRequiredProjects(projectInfo.getRequiredProjects()); if (soaProject instanceof SOAIntfProject) { final SOAIntfMetadata intfMetadata = (SOAIntfMetadata) soaProject .getMetadata(); intfMetadata.setImlementationProjectName(projectInfo .getImplementationProjectName()); } else if (soaProject instanceof SOAImplProject) { final SOAImplMetadata implMetadata = (SOAImplMetadata) soaProject .getMetadata(); SOAImplUtil.loadServiceConfig((SOAImplProject) soaProject, projectInfo.getInterfaceProjectName()); final String intfProjectLocation = MavenCoreUtils.getAssetLocation(projectInfo.getInterfaceProjectName()); final SOAIntfMetadata intfMetadata = SOAIntfUtil.loadIntfMetadata(intfProjectLocation, projectInfo.getInterfaceProjectName()); implMetadata.setIntfMetadata(intfMetadata); implMetadata.setImplVersion(projectInfo.getVersion()); intfMetadata.setImlementationProjectName(project.getName()); } if (TurmericServiceUtils.isSOAConsumerProject(project)) { final SOAConsumerProject consumerProject = (SOAConsumerProject) soaProject; final Map<String, SOAIntfMetadata> requiredServices = consumerProject .getRequiredServices(); final Set<String> requiredSvcs = new HashSet<String>(); for (SOAClientEnvironment env : consumerProject.getClientConfigFiles().keySet()) { requiredSvcs.add(env.getServiceName()); } requiredSvcs.addAll(projectInfo.getRequiredServices()); for (final String requiredServiceName : requiredSvcs) { if (requiredServices.containsKey(requiredServiceName) == false) { // dependent service is not in the current workspace, // need to load from repository system. final String intfProjectLocation = MavenCoreUtils.getAssetLocation(requiredServiceName); final SOAIntfMetadata intfMetadata = SOAIntfUtil.loadIntfMetadata(intfProjectLocation, requiredServiceName); final MavenProjectInfo requiredService = MavenCoreUtils.getProjectInfo(requiredServiceName); intfMetadata.setImlementationProjectName(requiredService.getImplementationProjectName()); soaProject.getRequiredLibraries().addAll( requiredService.getRequiredLibraries()); soaProject.getRequiredProjects().addAll( requiredService.getRequiredProjects()); requiredServices.put(requiredServiceName, intfMetadata); } } final IFile consumerPropsFile = SOAConsumerUtil.getConsumerPropertiesFile(project); if (consumerPropsFile.exists() == true) { SOAConsumerMetadata metadata = SOAServiceUtil.getSOAConsumerMetadata(project); consumerProject.getMetadata().setClientName(metadata.getClientName()); consumerProject.getMetadata().setConsumerId(metadata.getConsumerId()); } } } return soaProject; } /** * {@inheritDoc} * */ public IFile getProjectConfigurationFile(IProject project) { if (project == null || project.isAccessible() == false) return null; return project.getFile(SOAMavenConstants.MAVEN_PROJECT_CONFIG_FILE); } /** * {@inheritDoc} * */ public String getAssetLocation(String projectName) throws Exception { return MavenCoreUtils.getAssetLocation(projectName); } /** * {@inheritDoc} * */ public String getAssetLocation(AssetInfo library) throws Exception { if (library instanceof MavenAssetInfo) { final MavenAssetInfo assetInfo = (MavenAssetInfo)library; final IPath result = MavenCoreUtils.getArtifactJarLocation(assetInfo.getGroupID(), assetInfo.getName(), assetInfo.getVersion()); return result != null ? result.toString() : null; } else { return MavenCoreUtils.getAssetLocation(library.getName()); } } /** * {@inheritDoc} * */ public AssetInfo getAssetFromProjectDependency(IProject project, String libraryName) throws Exception { for (AssetInfo info : MavenCoreUtils.getDependencies(project.getName())) { if (info.getName().equals(libraryName)) { return info; } } return null; } }