/*******************************************************************************
* Copyright (c) 2009, 2010 Progress Software Corporation.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
******************************************************************************/
// Copyright (c) 2009 Progress Software Corporation.
package org.fusesource.tools.messaging.server;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.Path;
import org.eclipse.wst.common.componentcore.ComponentCore;
import org.eclipse.wst.common.componentcore.resources.IVirtualComponent;
import org.eclipse.wst.common.project.facet.core.IFacetedProject;
import org.eclipse.wst.common.project.facet.core.ProjectFacetsManager;
import org.eclipse.wst.common.project.facet.core.internal.FacetedProjectNature;
import org.eclipse.wst.server.core.IModule;
import org.eclipse.wst.server.core.model.ModuleDelegate;
import org.eclipse.wst.server.core.util.ProjectModuleFactoryDelegate;
import org.fusesource.tools.messaging.IConstants;
@SuppressWarnings("restriction")
public class MessagingModuleFactory extends ProjectModuleFactoryDelegate {
protected Map<IModule, MessagingProjectModule> moduleDelegates = new HashMap<IModule, MessagingProjectModule>();
@Override
public ModuleDelegate getModuleDelegate(IModule module) {
return moduleDelegates.get(module);
}
@Override
protected IModule[] createModules(IProject project) {
try {
FacetedProjectNature nature = (FacetedProjectNature) project.getNature(FacetedProjectNature.NATURE_ID);
if (nature != null) {
return createModules(nature);
}
} catch (CoreException e) {
e.printStackTrace();
}
return null;
}
protected IModule[] createModules(FacetedProjectNature nature) {
IProject project = nature.getProject();
try {
IFacetedProject comp = ProjectFacetsManager.create(project);
return createModuleDelegates(comp.getProject());
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
protected IModule[] createModuleDelegates(IProject component) {
List<IModule> projectModules = new ArrayList<IModule>();
try {
if (MessagingServersUtil.isMsgFacetedProject(component.getProject())) {
IVirtualComponent vComp = ComponentCore.createComponent(component.getProject());
MessagingProjectModule delegate = new MessagingProjectModule(component.getProject(), component
.getFullPath(), vComp);
IModule module = createModule(component.getName(), component.getName(), IConstants.MSG_PRJ_MODULE_ID,
delegate.getVersion(), component.getProject());
moduleDelegates.put(module, delegate);
projectModules.add(module);
}
} catch (Exception e) {
e.printStackTrace();
}
return projectModules.toArray(new IModule[projectModules.size()]);
}
@Override
protected IPath[] getListenerPaths() {
return new IPath[] { new Path(".project"), // nature
new Path(".settings/org.eclipse.wst.common.project.facet.core.xml") // facets
};
}
}