/*******************************************************************************
* 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.repositorysystem.core.impl;
import java.util.Properties;
import org.apache.commons.lang.StringUtils;
import org.ebayopensource.turmeric.eclipse.core.resources.constants.SOAProjectConstants;
import org.ebayopensource.turmeric.eclipse.core.resources.constants.SOAProjectConstants.SupportedProjectType;
import org.ebayopensource.turmeric.eclipse.repositorysystem.core.GlobalRepositorySystem;
import org.ebayopensource.turmeric.eclipse.repositorysystem.core.ISOAProjectConfigurer;
import org.ebayopensource.turmeric.eclipse.resources.model.ISOAProject;
import org.ebayopensource.turmeric.eclipse.resources.model.SOAConsumerProject;
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.ProgressUtil;
import org.ebayopensource.turmeric.eclipse.utils.plugin.WorkspaceUtil;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.IProgressMonitor;
import org.osgi.framework.Version;
/**
* The Class AbstractSOAProjectConfigurer.
*
* @author yayu
*/
public abstract class AbstractSOAProjectConfigurer implements
ISOAProjectConfigurer {
/**
* Instantiates a new abstract soa project configurer.
*/
public AbstractSOAProjectConfigurer() {
super();
}
/**
* {@inheritDoc}
*/
@Override
public boolean updateProject(ISOAProject soaProject, boolean updateClasspath, IProgressMonitor monitor)
throws Exception {
boolean result = false;
if (soaProject instanceof SOAIntfProject) {
result = saveIntfProject((SOAIntfProject) soaProject, monitor);
} else if (soaProject instanceof SOAImplProject) {
result = saveImplProject((SOAImplProject) soaProject, monitor);
} else if (soaProject instanceof SOAConsumerProject) {
result = saveConsumerProject((SOAConsumerProject) soaProject, monitor);
}
return result;
}
private boolean saveIntfProject(final SOAIntfProject intfProject, IProgressMonitor monitor)
throws Exception {
final SOAIntfMetadata intfMetadata = intfProject.getMetadata();
final String newServiceVersion = intfMetadata.getServiceVersion();
if (intfMetadata.getImlementationProjectName() != null) {
final IProject implProject = WorkspaceUtil.getProject(intfMetadata.getImlementationProjectName());
if (implProject != null && implProject.isAccessible()) {
SOAImplProject imProject = (SOAImplProject)SOAServiceUtil.loadSOAProject(implProject,
GlobalRepositorySystem.instanceOf().getActiveRepositorySystem()
.getProjectNatureId(SupportedProjectType.IMPL));
ProgressUtil.progressOneStep(monitor, 5);
if (imProject != null && newServiceVersion.equals(
imProject.getMetadata().getImplVersion()) == false) {
//make sure the service name is available
imProject.getMetadata().setIntfMetadata(intfMetadata);
SOAImplUtil.loadServiceConfig(imProject, intfMetadata.getServiceName());
ProgressUtil.progressOneStep(monitor, 5);
final IFile svcConfigFile = imProject.getServiceConfigFile();
imProject.getMetadata().setImplVersion(newServiceVersion);
// plugin should never modify the ServiceConfig.xml since soa 2.9
// ConfigTool.saveServerConfig(imProject.getMetadata(),
// svcConfigFile);
svcConfigFile.refreshLocal(IResource.DEPTH_ZERO, monitor);
ProgressUtil.progressOneStep(monitor, 10);
}
}
}
final Properties props =
SOAIntfUtil.loadMetadataProps(intfProject.getProject(), intfMetadata.getServiceName());
if (props != null) {
final String oldVersion = StringUtils.trim(props.getProperty(
SOAProjectConstants.SERVICE_METADATA_PROPS_SERVICE_VERSION));
if (newServiceVersion.equals(oldVersion) == false) {
final Version newVersion = new Version(newServiceVersion);
final String wsdlVersion = newVersion.getMajor()
+ SOAProjectConstants.DELIMITER_DOT
+ newVersion.getMinor()
+ SOAProjectConstants.DELIMITER_DOT
+ newVersion.getMicro();
SOAIntfUtil.modifyWsdlAppInfoVersion(intfProject.getProject(),
wsdlVersion, monitor);
serviceVersionChanged(intfMetadata.getServiceName(),
newServiceVersion);
}
}
SOAIntfUtil.saveMetadataProps(intfProject, monitor);
ProgressUtil.progressOneStep(monitor, 10);
return true;
}
/**
* Service version changed.
*
* @param serviceName the service name
* @param newServiceVersion the new service version
*/
protected abstract void serviceVersionChanged(final String serviceName,
final String newServiceVersion);
private boolean saveImplProject(final SOAImplProject implProject, IProgressMonitor monitor)
throws Exception {
final IFile svcConfigFile = implProject.getServiceConfigFile();
// plugin should never modify the ServiceConfig.xml since soa 2.9
// ConfigTool.saveServerConfig(implProject.getMetadata(),
// svcConfigFile);
svcConfigFile.refreshLocal(IResource.DEPTH_ZERO, monitor);
ProgressUtil.progressOneStep(monitor);
return true;
}
private boolean saveConsumerProject(final SOAConsumerProject consumerProject, IProgressMonitor monitor)
throws Exception {
SOAConsumerUtil.saveImplMetadataProps(consumerProject);
ProgressUtil.progressOneStep(monitor);
return true;
}
/* (non-Javadoc)
* @see org.ebayopensource.turmeric.eclipse.repositorysystem.core.ISOAProjectConfigurer#postServiceVersionUpdated(org.ebayopensource.turmeric.eclipse.resources.model.SOAIntfProject, java.lang.String, java.lang.String, boolean, org.eclipse.core.runtime.IProgressMonitor)
*/
@Override
public void postServiceVersionUpdated(SOAIntfProject soaIntfProject,
String oldVersion, String newVersion, boolean slience,
IProgressMonitor monitor) throws Exception {
// do nothing by default. V3 need to do a build service.
}
}