/******************************************************************************* * 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.eclipse.resources.util; import java.io.IOException; import java.util.ArrayList; import java.util.List; import org.ebayopensource.turmeric.eclipse.core.logging.SOALogger; import org.ebayopensource.turmeric.eclipse.core.resources.constants.SOAProjectConstants; import org.ebayopensource.turmeric.eclipse.resources.model.ISOAProject.SOAProjectSourceDirectory; import org.ebayopensource.turmeric.eclipse.resources.model.SOAImplMetadata; import org.ebayopensource.turmeric.eclipse.resources.model.SOAImplProject; import org.ebayopensource.turmeric.eclipse.resources.model.SOAProjectEclipseMetadata; import org.ebayopensource.turmeric.eclipse.soatools.configtool.ConfigTool; import org.ebayopensource.turmeric.eclipse.utils.plugin.JDTUtil; import org.ebayopensource.turmeric.eclipse.utils.plugin.WorkspaceUtil; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IFolder; import org.eclipse.core.resources.IProject; import org.eclipse.core.runtime.CoreException; import org.eclipse.jdt.core.IClasspathEntry; /** * The Class SOAImplUtil. * * @author smathew */ public class SOAImplUtil { private static final SOALogger logger = SOALogger.getLogger(); /** * Gets the service config file. * * @param metadata the metadata * @param serviceName the service name * @return the service config file */ public static IFile getServiceConfigFile(final SOAProjectEclipseMetadata metadata, final String serviceName) { if (SOALogger.DEBUG) logger.entering(metadata, serviceName); final IFile result = getServiceConfigFile(metadata.getProject(), serviceName); if (SOALogger.DEBUG) logger.exiting(result); return result; } /** * Gets the service config file. * * @param project the project * @param serviceName the service name * @return the service config file */ public static IFile getServiceConfigFile(final IProject project, final String serviceName) { if (SOALogger.DEBUG) logger.entering(project, serviceName); final String serviceConfigFile = WorkspaceUtil.addPathSeperators( SOAProjectConstants.FOLDER_META_SRC, SOAProjectConstants.IMPL_SERVICE_CONFIG_DIR, serviceName, SOAProjectConstants.IMPL_SERVICE_CONFIG_XML); final IFile result = project.getFile(serviceConfigFile); if (SOALogger.DEBUG) logger.exiting(result); return result; } /** * Fill metadata. * * @param eclipseMetadata the eclipse metadata * @return the sOA impl project * @throws IOException Signals that an I/O exception has occurred. * @throws CoreException the core exception */ public static SOAImplProject fillMetadata( final SOAProjectEclipseMetadata eclipseMetadata) throws IOException, CoreException { if (SOALogger.DEBUG) logger.entering(eclipseMetadata); SOAImplProject implProject = new SOAImplProject(); implProject.setEclipseMetadata(eclipseMetadata); SOAImplMetadata metadata = SOAServiceUtil .getSOAImplMetadata(eclipseMetadata); implProject.setMetadata(metadata); if (SOALogger.DEBUG) logger.exiting(implProject); return implProject; } /** * Load service config. * * @param implProject the impl project * @param serviceName the service name * @return the sOA impl metadata * @throws Exception the exception */ public static SOAImplMetadata loadServiceConfig(final IProject implProject, final String serviceName) throws Exception { if (SOALogger.DEBUG) logger.entering(implProject, serviceName); SOAImplMetadata result = SOAImplMetadata.create(implProject.getName(), SOAProjectConstants.DEFAULT_BASE_CONSUMER_SOURCE_DIRECTORY); final IFile serviceConfigFile = getServiceConfigFile(implProject.getProject(), serviceName); if (serviceConfigFile.isAccessible()) { ConfigTool.parseServiceConfig(serviceConfigFile.getContents(), result); } else { logger.warning("The service config file is either not exist or not accessible->" , serviceConfigFile.getLocation()); } if (SOALogger.DEBUG) logger.exiting(result); return result; } /** * Load service config. * * @param implProject the impl project * @param serviceName the service name * @throws Exception the exception */ public static void loadServiceConfig(final SOAImplProject implProject, final String serviceName) throws Exception { if (SOALogger.DEBUG) logger.entering(implProject, serviceName); final IFile serviceConfigFile = getServiceConfigFile(implProject.getProject(), serviceName); if (serviceConfigFile.isAccessible()) { ConfigTool.parseServiceConfig(serviceConfigFile.getContents(), implProject.getMetadata()); } else { logger.warning("The service config file is either not exist or not accessible->" , serviceConfigFile.getLocation()); } if (SOALogger.DEBUG) logger.exiting(); } /** * Fill metadata. * * @param eclipseMetadata the eclipse metadata * @param implProject the impl project * @return the sOA impl project * @throws Exception the exception */ public static SOAImplProject fillMetadata( final SOAProjectEclipseMetadata eclipseMetadata, final SOAImplProject implProject) throws Exception { if (SOALogger.DEBUG) logger.entering(eclipseMetadata, implProject); final List<SOAProjectSourceDirectory> entries = new ArrayList<SOAProjectSourceDirectory>(); for (final IClasspathEntry entry : JDTUtil.rawClasspath(implProject .getProject(), false)) { if (entry != null && entry.getEntryKind() == IClasspathEntry.CPE_SOURCE) { final String path = entry.getPath().removeFirstSegments(1) .toString(); entries.add(new SOAProjectSourceDirectory(path)); } } if (SOALogger.DEBUG) logger.debug("Setting source directories->", entries, " to the impl project->", implProject.getProject()); implProject.setSourceDirectories(entries); final String serviceName = implProject.getMetadata().getServiceName(); if (serviceName != null) { final IProject intfProject = WorkspaceUtil.getProject(serviceName); if (intfProject != null && intfProject.isAccessible()) { SOAServiceUtil.getSOAIntfMetadata(SOAServiceUtil .getSOAEclipseMetadata(intfProject), implProject.getMetadata().getIntfMetadata()); SOAIntfUtil.fillMetadata(intfProject, implProject.getMetadata().getIntfMetadata()); } else { logger.warning("The interface project is not accessible->", intfProject); } } else { if (SOALogger.DEBUG) logger.debug("The interface project/service name for the implementation project", implProject.getProject(), " is null->"); } return implProject; } /** * Gets the gen web folder. * * @param project the project * @return the gen web folder */ public static IFolder getGenWebFolder(IProject project) { return project.getFolder(SOAProjectConstants.FOLDER_GEN_WEB_CONTENT); } /** * Gets the temp gen web folder. * * @param project the project * @return the temp gen web folder */ public static IFolder getTempGenWebFolder(IProject project) { return project.getFolder(SOAProjectConstants.TEMP_PREFIX + SOAProjectConstants.FOLDER_GEN_WEB_CONTENT); } /** * Gets the jar file. * * @param project the project * @return the jar file */ public static IFile getJarFile(IProject project) { return project.getFile(project.getName() + SOAProjectConstants.JAR_EXT); } /** * Gets the war file. * * @param implProject the impl project * @param serviceName the service name * @return the war file */ public static IFile getWarFile(final IProject implProject, final String serviceName) { return implProject.getFile(serviceName + SOAProjectConstants.WAR_EXT); } /** * Gets the service impl properties file. * * @param implProject the impl project * @return the service impl properties file */ public static IFile getServiceImplPropertiesFile(IProject implProject){ return implProject.getFile(SOAProjectConstants.PROPS_FILE_SERVICE_IMPL); } /** * Gets the service impl web xml file. * * @param implProject the impl project * @return the service impl web xml file */ public static IFile getServiceImplWebXMLFile(IProject implProject){ return implProject.getFile(SOAProjectConstants.FOLDER_GEN_WEB_CONTENT + SOAProjectConstants.DELIMITER_URL_SLASH + SOAProjectConstants.FOLDER_WEB_INF + SOAProjectConstants.DELIMITER_URL_SLASH + SOAProjectConstants.FILE_WEB_XML); } /*public static String getImplNameFromServiceName(String serviceName){ return serviceName+SOAProjectConstants.IMPL_PROJECT_SUFFIX; }*/ }