blob: 216976101210fb3b04576b26e0afe3269ddb9741 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2004 Eteration Bilisim A.S.
* All rights reserved.   This program and the accompanying materials
* are made available under the terms of the Common Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v10.html
*
* Contributors:
* Naci M. Dai - initial API and implementation
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL ETERATION A.S. OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
* ====================================================================
*
* This software consists of voluntary contributions made by many
* individuals on behalf of the Eteration Bilisim A.S. For more
* information on eteration, please see
* <http://www.eteration.com/>.
***************************************************************************/
package org.eclipse.jst.server.generic.modules;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.core.resources.IContainer;
import org.eclipse.core.resources.IFolder;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.IResourceVisitor;
import org.eclipse.core.resources.IWorkspaceRoot;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.Path;
import org.eclipse.wst.server.core.IModule;
import org.eclipse.wst.server.core.model.IModuleFactoryListener;
import org.eclipse.wst.server.core.model.ModuleDelegate;
import org.eclipse.wst.server.core.model.ModuleFactoryDelegate;
public class J2eeSpecModuleFactoryDelegate extends ModuleFactoryDelegate {
protected static final IModule[] NO_MODULES = new IModule[0];
protected static J2eeSpecModuleFactoryDelegate instance;
protected IWorkspaceRoot root;
public J2eeSpecModuleFactoryDelegate() {
root = ResourcesPlugin.getWorkspace().getRoot();
instance = this;
}
public static J2eeSpecModuleFactoryDelegate getInstance() {
if (instance == null)
new J2eeSpecModuleFactoryDelegate();
return instance;
}
public IModule getModule(String memento) {
if (memento == null)
return null;
try {
IPath modulePath = new Path(memento);
if(!modulePath.isAbsolute())
return null;
return getModule(root.getContainerForLocation(modulePath));
} catch (Exception e) {
Trace.trace("Could not create module: " + e.getMessage());
}
return null;
}
private IModule getModule(IContainer containerForLocation) {
IModule module=null;
if (Utils.isValidModule((IFolder)containerForLocation)) {
try {
module = createModule((IFolder)containerForLocation);
} catch (Exception e) {
Trace.trace("Unable to get module for container,",e);
}
}
return module;
}
/* (non-Javadoc)
* @see org.eclipse.wst.server.core.model.IModuleFactoryDelegate#getModules()
*/
public IModule[] getModules() {
IProject[] projects = root.getProjects();
if (projects == null)
return NO_MODULES;
List list = new ArrayList();
int size = projects.length;
for (int i = 0; i < size; i++) {
this.initModules(projects[i],list);
}
return (IModule[])list.toArray(new IModule[list.size()]);
}
/* (non-Javadoc)
* @see org.eclipse.wst.server.core.model.IModuleFactoryDelegate#addModuleFactoryListener(org.eclipse.wst.server.core.model.IModuleFactoryListener)
*/
public void addModuleFactoryListener(IModuleFactoryListener listener) {
// TODO Auto-generated method stub
}
/* (non-Javadoc)
* @see org.eclipse.wst.server.core.model.IModuleFactoryDelegate#removeModuleFactoryListener(org.eclipse.wst.server.core.model.IModuleFactoryListener)
*/
public void removeModuleFactoryListener(IModuleFactoryListener listener) {
// TODO Auto-generated method stub
}
private void initModules(IProject project, List list) {
try {
IResource[] res = project.members();
initModulesIn(res,list);
} catch (Exception e) {
Trace.trace(e.getMessage(), e);
}
}
private void initModulesIn(IResource[] res, List list) throws Exception {
for (int j = 0; j < res.length; j++) {
if (res[j].getType() != IResource.FOLDER)
continue;
IFolder moduleFolder = (IFolder) res[j];
initModulesIn(moduleFolder,list);
}
}
private void initModulesIn(IFolder moduleFolder, final List list) throws Exception {
if (Utils.isValidModule(moduleFolder)) {
IModule module = createModule(moduleFolder);
if(module != null)
list.add(module);
}
moduleFolder.accept(new IResourceVisitor() {
public boolean visit(IResource resource) throws CoreException {
if (resource.getType() != IResource.FOLDER)
return false;
IResource res[] = ((IFolder )resource).members();
for (int j = 0; j < res.length; j++) {
if (res[j].getType() != IResource.FOLDER)
continue;
IFolder moduleFolder = (IFolder) res[j];
try {
initModulesIn(moduleFolder,list);
} catch (Exception e) {
Trace.trace("Could not determine modules in folder", e);
}
}
return true;
}
});
}
private IModule createModule(IFolder moduleFolder) throws Exception {
IModule module = null;
if (Utils.isValidWebModule(moduleFolder)) {
module = new WebModule(moduleFolder);
} else if (Utils.isValidEjbModule(moduleFolder)) {
module = new EjbModule(moduleFolder);
} else if (Utils.isValidEarModule(moduleFolder)) {
module = new EnterpriseApplication(moduleFolder);
}
return module;
}
/**
* @param resource
* @return
*/
public IModule getModule(IResource resource) {
return null;
}
/* (non-Javadoc)
* @see org.eclipse.wst.server.core.model.ModuleFactoryDelegate#getModuleDelegate(org.eclipse.wst.server.core.IModule)
*/
public ModuleDelegate getModuleDelegate(IModule module) {
// TODO Auto-generated method stub
return null;
}
}