You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by dk...@apache.org on 2011/10/24 17:16:55 UTC

svn commit: r1188169 - in /cayenne/sandbox/cayenne-modeler-eclipse-plugin-gsoc: ./ META-INF/ src/main/java/org/apache/cayenne/ src/main/java/org/apache/cayenne/extensions/views/

Author: dkazimirchyk
Date: Mon Oct 24 15:16:55 2011
New Revision: 1188169

URL: http://svn.apache.org/viewvc?rev=1188169&view=rev
Log:
CayenneModeler Eclipse Plugin: added Cayenne view

Added:
    cayenne/sandbox/cayenne-modeler-eclipse-plugin-gsoc/src/main/java/org/apache/cayenne/extensions/views/
    cayenne/sandbox/cayenne-modeler-eclipse-plugin-gsoc/src/main/java/org/apache/cayenne/extensions/views/CayenneContentProvider.java
    cayenne/sandbox/cayenne-modeler-eclipse-plugin-gsoc/src/main/java/org/apache/cayenne/extensions/views/CayenneLabelProvider.java
    cayenne/sandbox/cayenne-modeler-eclipse-plugin-gsoc/src/main/java/org/apache/cayenne/extensions/views/CayenneProjectFile.java
    cayenne/sandbox/cayenne-modeler-eclipse-plugin-gsoc/src/main/java/org/apache/cayenne/extensions/views/CayenneView.java
    cayenne/sandbox/cayenne-modeler-eclipse-plugin-gsoc/src/main/java/org/apache/cayenne/extensions/views/CayenneViewModel.java
    cayenne/sandbox/cayenne-modeler-eclipse-plugin-gsoc/src/main/java/org/apache/cayenne/extensions/views/WorkspaceProject.java
Modified:
    cayenne/sandbox/cayenne-modeler-eclipse-plugin-gsoc/META-INF/MANIFEST.MF
    cayenne/sandbox/cayenne-modeler-eclipse-plugin-gsoc/plugin.xml
    cayenne/sandbox/cayenne-modeler-eclipse-plugin-gsoc/pom.xml
    cayenne/sandbox/cayenne-modeler-eclipse-plugin-gsoc/src/main/java/org/apache/cayenne/Activator.java

Modified: cayenne/sandbox/cayenne-modeler-eclipse-plugin-gsoc/META-INF/MANIFEST.MF
URL: http://svn.apache.org/viewvc/cayenne/sandbox/cayenne-modeler-eclipse-plugin-gsoc/META-INF/MANIFEST.MF?rev=1188169&r1=1188168&r2=1188169&view=diff
==============================================================================
--- cayenne/sandbox/cayenne-modeler-eclipse-plugin-gsoc/META-INF/MANIFEST.MF (original)
+++ cayenne/sandbox/cayenne-modeler-eclipse-plugin-gsoc/META-INF/MANIFEST.MF Mon Oct 24 15:16:55 2011
@@ -58,33 +58,34 @@ Import-Package: com.ibm.icu.text,com.ibm
  ing.table,javax.swing.text,javax.swing.text.rtf,javax.swing.tree,java
  x.swing.undo,javax.xml.parsers,javax.xml.transform,javax.xml.transfor
  m.dom,javax.xml.transform.sax,javax.xml.transform.stream,junit.framew
- ork,junit.swingui,junit.textui,org.apache.bcel.classfile,org.apache.b
- cel.generic,org.apache.log4j,org.apache.log4j.net,org.apache.tools.an
- t,org.apache.tools.ant.filters,org.apache.tools.ant.taskdefs,org.apac
- he.tools.ant.types,org.apache.tools.ant.types.selectors,org.apache.to
- ols.ant.util,org.eclipse.core.commands,org.eclipse.core.commands.comm
- on,org.eclipse.core.commands.contexts,org.eclipse.core.commands.opera
- tions,org.eclipse.core.commands.util,org.eclipse.core.databinding.obs
- ervable,org.eclipse.core.databinding.observable.list,org.eclipse.core
- .databinding.observable.value,org.eclipse.core.databinding.property,o
- rg.eclipse.core.databinding.property.list,org.eclipse.core.databindin
- g.property.value,org.eclipse.core.expressions,org.eclipse.core.filebu
- ffers,org.eclipse.core.filebuffers.manipulation,org.eclipse.core.runt
- ime.dynamichelpers,org.eclipse.equinox.p2.engine,org.eclipse.equinox.
- p2.metadata,org.eclipse.equinox.p2.query,org.eclipse.help,org.eclipse
- .jface.databinding.swt,org.eclipse.jface.internal.text.html,org.eclip
- se.jface.text,org.eclipse.jface.text.hyperlink,org.eclipse.jface.text
- .information,org.eclipse.jface.text.quickassist,org.eclipse.jface.tex
- t.reconciler,org.eclipse.jface.text.revisions,org.eclipse.jface.text.
- source,org.eclipse.jface.text.templates,org.eclipse.jface.text.templa
- tes.persistence,org.eclipse.swt,org.eclipse.swt.accessibility,org.ecl
- ipse.swt.browser,org.eclipse.swt.custom,org.eclipse.swt.dnd,org.eclip
- se.swt.events,org.eclipse.swt.graphics,org.eclipse.swt.layout,org.ecl
- ipse.swt.program,org.eclipse.swt.widgets,org.eclipse.ui.forms.events,
- org.eclipse.ui.forms.widgets,org.eclipse.ui.texteditor.quickdiff,org.
- eclipse.ui.texteditor.rulers,org.eclipse.ui.texteditor.spelling,org.j
- dom,org.jdom.input,org.jdom.output,org.w3c.dom,org.xml.sax,org.xml.sa
- x.ext,org.xml.sax.helpers
+ ork,junit.swingui,junit.textui,org.apache.bcel.classfile;resolution:=
+ optional,org.apache.bcel.generic;resolution:=optional,org.apache.log4
+ j;resolution:=optional,org.apache.log4j.net;resolution:=optional,org.
+ apache.tools.ant,org.apache.tools.ant.filters,org.apache.tools.ant.ta
+ skdefs,org.apache.tools.ant.types,org.apache.tools.ant.types.selector
+ s,org.apache.tools.ant.util,org.eclipse.core.commands,org.eclipse.cor
+ e.commands.common,org.eclipse.core.commands.contexts,org.eclipse.core
+ .commands.operations,org.eclipse.core.commands.util,org.eclipse.core.
+ databinding.observable,org.eclipse.core.databinding.observable.list,o
+ rg.eclipse.core.databinding.observable.value,org.eclipse.core.databin
+ ding.property,org.eclipse.core.databinding.property.list,org.eclipse.
+ core.databinding.property.value,org.eclipse.core.expressions,org.ecli
+ pse.core.filebuffers,org.eclipse.core.filebuffers.manipulation,org.ec
+ lipse.core.runtime.dynamichelpers,org.eclipse.equinox.p2.engine,org.e
+ clipse.equinox.p2.metadata,org.eclipse.equinox.p2.query,org.eclipse.h
+ elp,org.eclipse.jface.databinding.swt,org.eclipse.jface.internal.text
+ .html,org.eclipse.jface.text,org.eclipse.jface.text.hyperlink,org.ecl
+ ipse.jface.text.information,org.eclipse.jface.text.quickassist,org.ec
+ lipse.jface.text.reconciler,org.eclipse.jface.text.revisions,org.ecli
+ pse.jface.text.source,org.eclipse.jface.text.templates,org.eclipse.jf
+ ace.text.templates.persistence,org.eclipse.swt,org.eclipse.swt.access
+ ibility,org.eclipse.swt.browser,org.eclipse.swt.custom,org.eclipse.sw
+ t.dnd,org.eclipse.swt.events,org.eclipse.swt.graphics,org.eclipse.swt
+ .layout,org.eclipse.swt.program,org.eclipse.swt.widgets,org.eclipse.u
+ i.forms.events,org.eclipse.ui.forms.widgets,org.eclipse.ui.texteditor
+ .quickdiff,org.eclipse.ui.texteditor.rulers,org.eclipse.ui.texteditor
+ .spelling,org.jdom,org.jdom.input,org.jdom.output,org.w3c.dom,org.xml
+ .sax,org.xml.sax.ext,org.xml.sax.helpers
 Embed-StripGroup: true
 Bundle-SymbolicName: cayenne-modeler-eclipse-plugin;singleton:=true
 

Modified: cayenne/sandbox/cayenne-modeler-eclipse-plugin-gsoc/plugin.xml
URL: http://svn.apache.org/viewvc/cayenne/sandbox/cayenne-modeler-eclipse-plugin-gsoc/plugin.xml?rev=1188169&r1=1188168&r2=1188169&view=diff
==============================================================================
--- cayenne/sandbox/cayenne-modeler-eclipse-plugin-gsoc/plugin.xml (original)
+++ cayenne/sandbox/cayenne-modeler-eclipse-plugin-gsoc/plugin.xml Mon Oct 24 15:16:55 2011
@@ -45,11 +45,43 @@
     		label="Cayenne Actions"
     		visible="true">
     		<action 
+    			id="org.apache.cayenne.extensions.actions.ModelerFocuse"
     			class="org.apache.cayenne.extensions.actions.ModelerToolbarAction"
     			toolbarPath="Normal/cayenneGroup"
+    			label="CayenneModeler"
     			icon="icons/cayenne.png"
     			tooltip="CayenneModeler">
     		</action>
     	</actionSet>
     </extension>
-</plugin>
\ No newline at end of file
+    
+    <extension point="org.eclipse.ui.views">
+    	  <category
+    	  	id="org.apache.cayenne"
+    	  	name="Cayenne">
+    	  </category>
+          <view
+          	id="org.apache.cayenne.extensions.views.CayenneView"
+          	class="org.apache.cayenne.extensions.views.CayenneView"
+          	category="org.apache.cayenne"
+          	label="Cayenne"
+          	name="Cayenne"
+          	relationship="top"
+          	restorable="true"
+          	icon="icons/cayenne.png">
+          </view>
+    </extension>
+    
+    <extension point="org.eclipse.ui.perspectiveExtensions">
+    	<perspectiveExtension
+    		targetID="*">
+    		<view
+    			id="org.apache.cayenne.extensions.views.CayenneView"
+    			relationship="top"
+    			ratio="0.95f"
+    			relative="org.eclipse.ui.editorss"
+    			minimized="false">
+    		</view>
+    	</perspectiveExtension>
+    </extension>
+</plugin>

Modified: cayenne/sandbox/cayenne-modeler-eclipse-plugin-gsoc/pom.xml
URL: http://svn.apache.org/viewvc/cayenne/sandbox/cayenne-modeler-eclipse-plugin-gsoc/pom.xml?rev=1188169&r1=1188168&r2=1188169&view=diff
==============================================================================
--- cayenne/sandbox/cayenne-modeler-eclipse-plugin-gsoc/pom.xml (original)
+++ cayenne/sandbox/cayenne-modeler-eclipse-plugin-gsoc/pom.xml Mon Oct 24 15:16:55 2011
@@ -17,6 +17,7 @@
 	<properties>
 		<bundle.symbolicName>cayenne-modeler-eclipse-plugin</bundle.symbolicName>
 		<bundle.namespace>org.apache.cayenne</bundle.namespace>
+		<swt.variant>unknown</swt.variant>
 	</properties>
 	
 	<repositories>
@@ -160,6 +161,59 @@
 			</plugin>
 		</plugins>
 	</build>
+	
+	<profiles>
+		<profile>
+			<id>swt.gtk-linux-x86-64</id>
+			<activation>
+				<os>
+					<name>linux</name>
+					<arch>amd64</arch>
+				</os>
+			</activation>
+			<properties>
+				<swt.variant>gtk.linux.x86_64</swt.variant>
+			</properties>
+		</profile>
+		
+		<profile>
+			<id>swt.gtk-linux-x86</id>
+			<activation>
+				<os>
+					<name>linux</name>
+					<arch>i386</arch>
+				</os>
+			</activation>
+			<properties>
+				<swt.variant>gtk.linux.x86</swt.variant>
+			</properties>
+		</profile>
+		
+		<profile>
+			<id>swt.cocoa-macosx</id>
+			<activation>
+				<os>
+					<family>mac</family>
+				</os>
+			</activation>
+			<properties>
+				<swt.variant>cocoa.macosx</swt.variant>
+			</properties>
+		</profile>
+		
+		<profile>
+			<id>swt.win32-x86</id>
+			<activation>
+				<os>
+					<family>windows</family>
+					<arch>x86</arch>
+				</os>
+			</activation>
+			<properties>
+				<swt.variant>win32.win32.x86</swt.variant>
+			</properties>
+		</profile>
+	</profiles>
 
 	<dependencies>
 		<!-- Eclipse dependencies -->
@@ -204,6 +258,16 @@
 			<artifactId>ide</artifactId>
 			<version>3.6.2.M20101201-0800</version>
 		</dependency>
+		<dependency>
+			<groupId>org.eclipse.core</groupId>
+			<artifactId>commands</artifactId>
+			<version>3.6.0.I20100512-1500</version>
+		</dependency>
+		<dependency>
+			<groupId>org.eclipse.swt</groupId>
+			<artifactId>org.eclipse.swt.${swt.variant}</artifactId>
+			<version>3.6.2</version>
+		</dependency>
 
 
 		<!-- Cayenne dependencies -->

Modified: cayenne/sandbox/cayenne-modeler-eclipse-plugin-gsoc/src/main/java/org/apache/cayenne/Activator.java
URL: http://svn.apache.org/viewvc/cayenne/sandbox/cayenne-modeler-eclipse-plugin-gsoc/src/main/java/org/apache/cayenne/Activator.java?rev=1188169&r1=1188168&r2=1188169&view=diff
==============================================================================
--- cayenne/sandbox/cayenne-modeler-eclipse-plugin-gsoc/src/main/java/org/apache/cayenne/Activator.java (original)
+++ cayenne/sandbox/cayenne-modeler-eclipse-plugin-gsoc/src/main/java/org/apache/cayenne/Activator.java Mon Oct 24 15:16:55 2011
@@ -45,7 +45,7 @@ public class Activator extends AbstractU
 	 * The shared instance.
 	 */
 	private static Activator plugin;
-	public static final String PLUGIN_ID = "org.apache.cayenne.extentions";
+	public static final String PLUGIN_ID = "cayenne-modeler-eclipse-plugin";
 	
 	protected Injector injector;
 	protected String projectName;

Added: cayenne/sandbox/cayenne-modeler-eclipse-plugin-gsoc/src/main/java/org/apache/cayenne/extensions/views/CayenneContentProvider.java
URL: http://svn.apache.org/viewvc/cayenne/sandbox/cayenne-modeler-eclipse-plugin-gsoc/src/main/java/org/apache/cayenne/extensions/views/CayenneContentProvider.java?rev=1188169&view=auto
==============================================================================
--- cayenne/sandbox/cayenne-modeler-eclipse-plugin-gsoc/src/main/java/org/apache/cayenne/extensions/views/CayenneContentProvider.java (added)
+++ cayenne/sandbox/cayenne-modeler-eclipse-plugin-gsoc/src/main/java/org/apache/cayenne/extensions/views/CayenneContentProvider.java Mon Oct 24 15:16:55 2011
@@ -0,0 +1,38 @@
+package org.apache.cayenne.extensions.views;
+
+import org.eclipse.jface.viewers.ITreeContentProvider;
+import org.eclipse.jface.viewers.Viewer;
+
+public class CayenneContentProvider implements ITreeContentProvider {
+	
+	private CayenneViewModel model;
+
+	public Object[] getElements(Object arg0) {
+		return model.getProjects().toArray();
+	}
+
+	public void dispose() {
+		
+	}
+
+	public void inputChanged(Viewer arg0, Object oldInput, Object newInput) {
+		this.model = (CayenneViewModel)newInput;
+	}
+
+	public Object[] getChildren(Object parentElement) {
+		if (parentElement instanceof WorkspaceProject) {
+			WorkspaceProject project = (WorkspaceProject)parentElement;
+			return project.getCayenneProjects().toArray();
+		}
+		return null;
+	}
+
+	public Object getParent(Object arg0) {
+		return null;
+	}
+
+	public boolean hasChildren(Object element) {
+		return element instanceof WorkspaceProject;
+	}
+
+}

Added: cayenne/sandbox/cayenne-modeler-eclipse-plugin-gsoc/src/main/java/org/apache/cayenne/extensions/views/CayenneLabelProvider.java
URL: http://svn.apache.org/viewvc/cayenne/sandbox/cayenne-modeler-eclipse-plugin-gsoc/src/main/java/org/apache/cayenne/extensions/views/CayenneLabelProvider.java?rev=1188169&view=auto
==============================================================================
--- cayenne/sandbox/cayenne-modeler-eclipse-plugin-gsoc/src/main/java/org/apache/cayenne/extensions/views/CayenneLabelProvider.java (added)
+++ cayenne/sandbox/cayenne-modeler-eclipse-plugin-gsoc/src/main/java/org/apache/cayenne/extensions/views/CayenneLabelProvider.java Mon Oct 24 15:16:55 2011
@@ -0,0 +1,33 @@
+package org.apache.cayenne.extensions.views;
+
+import org.apache.cayenne.Activator;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.jface.viewers.LabelProvider;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.ui.ISharedImages;
+import org.eclipse.ui.PlatformUI;
+
+public class CayenneLabelProvider extends LabelProvider {
+	
+	@Override
+	public String getText(Object element) {
+		if (element instanceof WorkspaceProject) {
+			return ((WorkspaceProject) element).getName();
+		}
+		else {
+			return ((CayenneProjectFile) element).getName();
+		}
+	}
+	
+	@Override
+	public Image getImage(Object element) {
+		if (element instanceof WorkspaceProject) {
+			return PlatformUI.getWorkbench().getSharedImages().getImage(ISharedImages.IMG_OBJ_PROJECT);
+		}
+		else {
+			ImageDescriptor image = Activator.getImageDescriptor("icons/cayenne.png");
+			return image.createImage();
+		}
+	}
+
+}

Added: cayenne/sandbox/cayenne-modeler-eclipse-plugin-gsoc/src/main/java/org/apache/cayenne/extensions/views/CayenneProjectFile.java
URL: http://svn.apache.org/viewvc/cayenne/sandbox/cayenne-modeler-eclipse-plugin-gsoc/src/main/java/org/apache/cayenne/extensions/views/CayenneProjectFile.java?rev=1188169&view=auto
==============================================================================
--- cayenne/sandbox/cayenne-modeler-eclipse-plugin-gsoc/src/main/java/org/apache/cayenne/extensions/views/CayenneProjectFile.java (added)
+++ cayenne/sandbox/cayenne-modeler-eclipse-plugin-gsoc/src/main/java/org/apache/cayenne/extensions/views/CayenneProjectFile.java Mon Oct 24 15:16:55 2011
@@ -0,0 +1,23 @@
+package org.apache.cayenne.extensions.views;
+
+import java.io.File;
+
+public class CayenneProjectFile {
+	
+	private File path;
+	private String name;
+	
+	public CayenneProjectFile(String name, File path) {
+		this.name = name;
+		this.path = path;
+	}
+	
+	public String getName() {
+		return name;
+	}
+	
+	public File getPath() {
+		return path;
+	}
+
+}

Added: cayenne/sandbox/cayenne-modeler-eclipse-plugin-gsoc/src/main/java/org/apache/cayenne/extensions/views/CayenneView.java
URL: http://svn.apache.org/viewvc/cayenne/sandbox/cayenne-modeler-eclipse-plugin-gsoc/src/main/java/org/apache/cayenne/extensions/views/CayenneView.java?rev=1188169&view=auto
==============================================================================
--- cayenne/sandbox/cayenne-modeler-eclipse-plugin-gsoc/src/main/java/org/apache/cayenne/extensions/views/CayenneView.java (added)
+++ cayenne/sandbox/cayenne-modeler-eclipse-plugin-gsoc/src/main/java/org/apache/cayenne/extensions/views/CayenneView.java Mon Oct 24 15:16:55 2011
@@ -0,0 +1,55 @@
+package org.apache.cayenne.extensions.views;
+
+import java.io.File;
+
+import org.apache.cayenne.extensions.modeler.PluginMain;
+import org.eclipse.jface.viewers.DoubleClickEvent;
+import org.eclipse.jface.viewers.IDoubleClickListener;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.FillLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.ui.part.ViewPart;
+
+public class CayenneView extends ViewPart {
+	
+	private TreeViewer viewer;
+
+	@Override
+	public void createPartControl(Composite parent) {
+		FillLayout layout = new FillLayout();
+		parent.setLayout(layout);
+		
+		viewer = new TreeViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL);
+		viewer.setContentProvider(new CayenneContentProvider());
+		viewer.setLabelProvider(new CayenneLabelProvider());
+		viewer.setInput(new CayenneViewModel());
+		
+		viewer.addDoubleClickListener(new IDoubleClickListener() {
+			
+			public void doubleClick(DoubleClickEvent e) {
+				IStructuredSelection selection = (IStructuredSelection)e.getSelection();
+				Object element = selection.getFirstElement();
+				if (element instanceof CayenneProjectFile) {
+					File projFile = ((CayenneProjectFile) element).getPath();
+					if (projFile != null) {
+						String[] args = new String[] { projFile.toString() };
+						PluginMain plugin = new PluginMain(args);
+						plugin.start();
+					}
+				}
+				else {
+					viewer.setExpandedState(element, !viewer.getExpandedState(element));
+				}
+			}
+		});
+		
+	}
+	
+	@Override
+	public void setFocus() {
+		viewer.getControl().setFocus();
+	}
+
+}

Added: cayenne/sandbox/cayenne-modeler-eclipse-plugin-gsoc/src/main/java/org/apache/cayenne/extensions/views/CayenneViewModel.java
URL: http://svn.apache.org/viewvc/cayenne/sandbox/cayenne-modeler-eclipse-plugin-gsoc/src/main/java/org/apache/cayenne/extensions/views/CayenneViewModel.java?rev=1188169&view=auto
==============================================================================
--- cayenne/sandbox/cayenne-modeler-eclipse-plugin-gsoc/src/main/java/org/apache/cayenne/extensions/views/CayenneViewModel.java (added)
+++ cayenne/sandbox/cayenne-modeler-eclipse-plugin-gsoc/src/main/java/org/apache/cayenne/extensions/views/CayenneViewModel.java Mon Oct 24 15:16:55 2011
@@ -0,0 +1,27 @@
+package org.apache.cayenne.extensions.views;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IWorkspace;
+import org.eclipse.core.resources.ResourcesPlugin;
+
+public class CayenneViewModel {
+	
+	public List<WorkspaceProject> getProjects() {
+		List<WorkspaceProject> projects = new ArrayList<WorkspaceProject>();
+		
+		IWorkspace workspace = ResourcesPlugin.getWorkspace();
+		
+		for (IProject project : workspace.getRoot().getProjects()) {
+			WorkspaceProject proj = new WorkspaceProject(
+					project.getName(), 
+					project.getLocation().toFile());
+			projects.add(proj);
+		}
+		
+		return projects;
+	}
+
+}

Added: cayenne/sandbox/cayenne-modeler-eclipse-plugin-gsoc/src/main/java/org/apache/cayenne/extensions/views/WorkspaceProject.java
URL: http://svn.apache.org/viewvc/cayenne/sandbox/cayenne-modeler-eclipse-plugin-gsoc/src/main/java/org/apache/cayenne/extensions/views/WorkspaceProject.java?rev=1188169&view=auto
==============================================================================
--- cayenne/sandbox/cayenne-modeler-eclipse-plugin-gsoc/src/main/java/org/apache/cayenne/extensions/views/WorkspaceProject.java (added)
+++ cayenne/sandbox/cayenne-modeler-eclipse-plugin-gsoc/src/main/java/org/apache/cayenne/extensions/views/WorkspaceProject.java Mon Oct 24 15:16:55 2011
@@ -0,0 +1,77 @@
+package org.apache.cayenne.extensions.views;
+
+import java.io.File;
+import java.io.FileFilter;
+import java.io.FilenameFilter;
+import java.util.ArrayList;
+import java.util.List;
+
+public class WorkspaceProject {
+	
+	private String name;
+	private File rootDir;
+	
+	private List<CayenneProjectFile> cayenneProjects;
+	
+	public WorkspaceProject(String name, File rootDir) {
+		this.name = name;
+		this.rootDir = rootDir;
+	}
+	
+	public String getName() {
+		return name;
+	}
+	
+	public File getRootDir() {
+		return rootDir;
+	}
+	
+	public List<CayenneProjectFile> getCayenneProjects() {
+		
+		if (cayenneProjects != null) {
+			return cayenneProjects;
+		}
+		
+		cayenneProjects = new ArrayList<CayenneProjectFile>();
+		List<File> cayenneProjectPaths = new ArrayList<File>();
+		getCayenneProjects(rootDir, cayenneProjectPaths);
+		
+		for (File path : cayenneProjectPaths) {
+			cayenneProjects.add(new CayenneProjectFile(path.getName(), path));
+		}
+		
+		return cayenneProjects;
+	}
+
+	private void getCayenneProjects(File projectDir, List<File> results) {
+		File dir = projectDir;
+		
+		if (dir != null) {
+			FilenameFilter projectFilter = new FilenameFilter() {
+
+				public boolean accept(File dir, String name) {
+					return name.matches("cayenne-.*xml");
+				}
+			};
+			
+			for (File file : dir.listFiles(projectFilter)) {
+				results.add(file);
+			}
+			
+			FileFilter folderFilter = new FileFilter() {
+				
+				public boolean accept(File pathname) {
+					return pathname.isDirectory();
+				}
+			};
+			
+			for (File subdir : dir.listFiles(folderFilter)) {
+				if (!"target".equals(subdir.getName())) {
+					getCayenneProjects(subdir, results);
+				}
+			}
+		}
+	}
+	
+	
+}