package org.mobicents.sip.servlet.tooling;
import java.util.HashMap;
import org.eclipse.core.resources.IFolder;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.Path;
import org.eclipse.jst.j2ee.internal.project.J2EEProjectUtilities;
import org.eclipse.wst.common.project.facet.core.IDelegate;
import org.eclipse.wst.common.project.facet.core.IProjectFacetVersion;
import org.mobicents.sip.servlet.tooling.util.EclipseUtils;
import org.mobicents.sip.servlet.tooling.util.FileUtil;
@SuppressWarnings("restriction")
public final class SipServletFacetAction implements IDelegate
{
private void createFolder(IFolder root, String folder) {
String[] strings = folder.split("/");
for(String token : strings) {
if(!token.equals("")) {
root = root.getFolder(token);
try {
root.create(false, true, null);
} catch (CoreException e) {
}
}
}
}
public void execute( final IProject pj,
final IProjectFacetVersion fv,
final Object config,
final IProgressMonitor monitor )
throws CoreException
{
monitor.beginTask( "Install Sip Servlets Facet", 2 );
SipServletApplicationConfig cfg = (SipServletApplicationConfig) config;
try
{
final IFolder webInfLib = EclipseUtils.getWebInfLibDir( pj );
final IFolder webInf = EclipseUtils.getWebInfDir( pj );
EclipseUtils.copyFromPlugin( new Path( "libs/sip-servlets-spec-1.1.8.jar" ),
webInfLib.getFile( "sip-servlets-spec-1.1.8.jar" ) );
HashMap<String, String> subs = new HashMap<String, String>();
monitor.worked(1);
String servletClassFile = cfg.getMainServletClass().replace('.', '/') + ".java";
int last = servletClassFile.lastIndexOf('/');
String servletClassName = cfg.getMainServletClass().substring(last+1);
String servletClassPackagePath = servletClassFile.substring(0, last);
String servletClassPackage = servletClassPackagePath.replace('/', '.');
IFolder rootFolder = (IFolder) J2EEProjectUtilities.getSourceFolderOrFirst(pj, "");
createFolder(rootFolder, servletClassPackagePath);
monitor.worked(1);
subs.put("APP_NAME", cfg.getAppName());
subs.put("APP_DESCRIPTION", cfg.getDescription());
subs.put("MAIN_SERVLET_NAME", cfg.getMainServletName());
subs.put("MAIN_SERVLET_DESCRIPTION", cfg.getMainServletDesciption());
subs.put("MAIN_SERVLET_CLASS", cfg.getMainServletClass());
subs.put("MAIN_SERVLET_PACKAGE", servletClassPackage);
subs.put("MAIN_SERVLET_CLASSNAME", servletClassName);
FileUtil.createFromTemplate(webInf, new Path("sip.xml"),
new Path("/templates/sip.xml.template"), subs, monitor);
Path p = new Path(servletClassFile);
FileUtil.createFromTemplate(rootFolder, p,
new Path("/templates/main.servlet.java.template"),
subs,
monitor);
monitor.worked( 1 );
} catch (Exception e) {
throw new RuntimeException(e);
}
finally
{
monitor.done();
}
}
}