You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by ro...@apache.org on 2013/09/13 10:14:38 UTC

svn commit: r1522808 [2/2] - in /sling/branches/tooling-ide-vlt/tooling/ide: ./ eclipse-core/ eclipse-core/META-INF/ eclipse-core/src/org/apache/sling/ide/eclipse/core/ eclipse-core/src/org/apache/sling/ide/eclipse/core/internal/ eclipse-m2e-ui/ eclips...

Modified: sling/branches/tooling-ide-vlt/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/nav/model/JcrNode.java
URL: http://svn.apache.org/viewvc/sling/branches/tooling-ide-vlt/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/nav/model/JcrNode.java?rev=1522808&r1=1522807&r2=1522808&view=diff
==============================================================================
--- sling/branches/tooling-ide-vlt/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/nav/model/JcrNode.java (original)
+++ sling/branches/tooling-ide-vlt/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/nav/model/JcrNode.java Fri Sep 13 08:14:36 2013
@@ -16,8 +16,10 @@
  */
 package org.apache.sling.ide.eclipse.ui.nav.model;
 
+import java.io.ByteArrayInputStream;
 import java.io.IOException;
 import java.util.Arrays;
+import java.util.Collection;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Iterator;
@@ -30,7 +32,8 @@ import javax.xml.parsers.ParserConfigura
 import javax.xml.parsers.SAXParser;
 import javax.xml.parsers.SAXParserFactory;
 
-import org.apache.sling.ide.eclipse.ui.internal.SharedImages;
+import org.apache.sling.ide.eclipse.ui.WhitelabelSupport;
+import org.eclipse.core.resources.IContainer;
 import org.eclipse.core.resources.IFile;
 import org.eclipse.core.resources.IFolder;
 import org.eclipse.core.resources.IProject;
@@ -41,11 +44,19 @@ import org.eclipse.core.resources.mappin
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IAdaptable;
 import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.resource.ImageDescriptor;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.ui.IActionFilter;
 import org.eclipse.ui.IContributorResourceAdapter;
+import org.eclipse.ui.PlatformUI;
 import org.eclipse.ui.model.WorkbenchLabelProvider;
 import org.eclipse.ui.views.properties.IPropertySource;
+import org.eclipse.ui.views.properties.tabbed.ITabbedPropertySheetPageContributor;
+import org.w3c.dom.Element;
 import org.w3c.dom.Node;
 import org.xml.sax.Attributes;
 import org.xml.sax.InputSource;
@@ -83,7 +94,7 @@ public class JcrNode implements IAdaptab
 
 	private final static WorkbenchLabelProvider workbenchLabelProvider = new WorkbenchLabelProvider();
 	
-	GenericJcrRootFile underlying;
+	final GenericJcrRootFile underlying;
 
 	JcrNode parent;
 
@@ -95,20 +106,33 @@ public class JcrNode implements IAdaptab
 	
 	private boolean resourceChildrenAdded = false;
 	
-	final ReadOnlyProperties properties = new ReadOnlyProperties();
+	final ModifiableProperties properties = new ModifiableProperties(this);
+
+	final Set<JcrNode> hiddenChildren = new HashSet<JcrNode>();
 	
 	JcrNode() {
 		// for subclass use only
+		if (this instanceof GenericJcrRootFile) {
+			this.underlying = (GenericJcrRootFile) this;
+		} else {
+			this.underlying = null;
+		}
 	}
 	
-	JcrNode(JcrNode parent, Node domNode) {
+	JcrNode(JcrNode parent, Node domNode, IResource resource) {
+		this(parent, domNode, parent.underlying, resource);
+	}
+	
+	
+	JcrNode(JcrNode parent, Node domNode, GenericJcrRootFile underlying, IResource resource) {
 		if (parent == null) {
 			throw new IllegalArgumentException("parent must not be null");
 		}
 		this.parent = parent;
 		// domNode can be null
 		this.domNode = domNode;
-		this.underlying = parent.underlying;
+		this.underlying = underlying;
+		this.resource = resource;
 		parent.addChild(this);
 	}
 	
@@ -116,6 +140,60 @@ public class JcrNode implements IAdaptab
 	public String toString() {
 		return "JcrNode[dom:"+domNode+", file:"+resource+"]";
 	}
+	
+	@Override
+	public int hashCode() {
+		if (underlying==null) {
+			if (resource==null) {
+				if (domNode==null) {
+					return toString().hashCode();
+				} else {
+					return domNode.toString().hashCode() + parent.hashCode();
+				}
+			} else {
+				return resource.getFullPath().hashCode();
+			}
+		} else {
+			return underlying.hashCode() + domNode.toString().hashCode();
+		}
+	}
+	
+	@Override
+	public boolean equals(Object obj) {
+		if (this==obj) {
+			return true;
+		}
+		if (!(obj instanceof JcrNode)) {
+			return false;
+		}
+		JcrNode other = (JcrNode) obj;
+		if (other.underlying==null && underlying!=null) {
+			return false;
+		} else if (other.underlying!=null && underlying==null) {
+			return false;
+		}
+		if (underlying!=null && !underlying.equals(other.underlying)) {
+			return false;
+		}
+		if (resource!=null && other.resource!=null) {
+			if (resource.equals(other.resource)) {
+				return true;
+			} else {
+				return false;
+			}
+		} else if (resource!=null && other.resource==null) {
+			return false;
+		} else if (resource==null && other.resource!=null) {
+			return false;
+		}
+		if (parent!=null && other.parent!=null) {
+			if (!parent.equals(other.parent)) {
+				return false;
+			}
+			return domNode.toString().equals(other.domNode.toString());
+		}
+		return toString().equals(obj.toString());
+	}
 
 	protected void addChild(JcrNode jcrNode) {
 		children.add(jcrNode);
@@ -148,11 +226,26 @@ public class JcrNode implements IAdaptab
 		}
 		return children.size()>0 || members;
 	}
+	
+	public void hide(JcrNode node) {
+		hiddenChildren.add(node);
+	}
 
+	Object[] filterHiddenChildren(final Collection<JcrNode> collection) {
+		final Collection<JcrNode> values = new HashSet<JcrNode>(collection);
+		
+		for (Iterator<JcrNode> it = hiddenChildren.iterator(); it.hasNext();) {
+			final JcrNode hiddenNode = it.next();
+			values.remove(hiddenNode);
+		}
+		
+		return values.toArray();
+	}
+	
 	public Object[] getChildren() {
 		try {
 			if (resourceChildrenAdded) {
-				return children.toArray();
+				return filterHiddenChildren(children);
 			}
 			Map<String,JcrNode> resultMap = new HashMap<String, JcrNode>();
 			for (Iterator it = children.iterator(); it.hasNext();) {
@@ -188,9 +281,13 @@ public class JcrNode implements IAdaptab
 					}
 					for (Iterator it = membersList.iterator(); it.hasNext();) {
 						IResource iResource = (IResource) it.next();
-						JcrNode node = new JcrNode(this, (Node)null);
-						node.setResource(iResource);
-						node.init();
+						JcrNode node;
+						if (DirNode.isDirNode(iResource)) {
+							node = new DirNode(this, (Node)null, iResource);
+						} else {
+							node = new JcrNode(this, (Node)null, iResource);
+						}
+//						node.setResource(iResource);
 						// load the children - to make sure we get vault files loaded too
 						node.getChildren();
 						resultMap.put(node.getName(), node);
@@ -200,22 +297,22 @@ public class JcrNode implements IAdaptab
 			}
 			resourceChildrenAdded = true;
 			
-			return resultMap.values().toArray();
+			return filterHiddenChildren(resultMap.values());
 		} catch (CoreException e) {
+			e.printStackTrace();
 			return new Object[0];
 		} catch (ParserConfigurationException e) {
+			e.printStackTrace();
 			return new Object[0];
 		} catch (SAXException e) {
+			e.printStackTrace();
 			return new Object[0];
 		} catch (IOException e) {
+			e.printStackTrace();
 			return new Object[0];
 		}
 	}
 
-	protected void init() {
-		// placeholder for initializing any common properties
-	}
-
 	private boolean isVaultFile(IResource iResource)
 			throws ParserConfigurationException, SAXException, IOException,
 			CoreException {
@@ -256,6 +353,13 @@ public class JcrNode implements IAdaptab
 			} else
 				try {
 					if (!isVaultFile(resource)){
+						final String jcrMimeType = getJcrContentProperty("jcr:mimeType");
+						if (jcrMimeType!=null && jcrMimeType.length()!=0) {
+							ImageDescriptor desc = getImageDescriptor(resource.getName(), jcrMimeType);
+							if (desc!=null) {
+								return desc.createImage();
+							}
+						}
 						return workbenchLabelProvider.getImage(resource);
 					}
 				} catch (ParserConfigurationException e) {
@@ -276,7 +380,35 @@ public class JcrNode implements IAdaptab
 		//	return workbenchLabelProvider.getImage(domNode);
 		//}
 		
-		return SharedImages.SLING_ICON.createImage();
+		return WhitelabelSupport.JCR_NODE_ICON.createImage();
+	}
+
+	private ImageDescriptor getImageDescriptor(String filename, String jcrMimeType) {
+		final String modifiedFilename;
+		if (jcrMimeType.equals("image/jpeg")) {
+			modifiedFilename = filename + ".jpg";
+		} else if (jcrMimeType.contains("/")) {
+			modifiedFilename = filename + "." + (jcrMimeType.substring(jcrMimeType.indexOf("/")+1));
+		} else {
+			return null;
+		}
+		return PlatformUI.getWorkbench().getEditorRegistry().getImageDescriptor(modifiedFilename, null);
+	}
+
+	private String getJcrContentProperty(String propertyKey) {
+		final Object[] chldrn = getChildren();
+		for (int i = 0; i < chldrn.length; i++) {
+			JcrNode jcrNode = (JcrNode) chldrn[i];
+			if ("jcr:content".equals(jcrNode.getName())) {
+				if (jcrNode.properties!=null) {
+					Object propertyValue = jcrNode.properties.getValue(propertyKey);
+					if (propertyValue!=null) {
+						return String.valueOf(propertyValue);
+					}
+				}
+			}
+		}
+		return null;
 	}
 
 	public String getName() {
@@ -305,14 +437,41 @@ public class JcrNode implements IAdaptab
 	@Override
 	public Object getAdapter(Class adapter) {
 		final Object result = doGetAdapter(adapter);
-		if (result==null) {
-		//	System.out.println("adapter looked for: "+adapter+", result: "+result);
-		}
+		//if (result==null) {
+			//System.out.println("adapter looked for: "+adapter+", result: "+result);
+		//}
 		return result;
 	}
 	
 	private Object doGetAdapter(Class adapter) {
-		if (adapter==IPropertySource.class) {
+		if (adapter==IActionFilter.class) {
+			return new IActionFilter() {
+				
+				@Override
+				public boolean testAttribute(Object target, String name, String value) {
+					if (!(target instanceof JcrNode)) {
+						return false;
+					}
+					final JcrNode node = (JcrNode)target;
+					if ("domNode".equals(name)) {
+						return node.domNode!=null;	
+					}
+					if ("nonDomNode".equals(name)) {
+						return node.domNode==null;	
+					}
+					return false;
+				}
+			};
+		} else if (adapter==ITabbedPropertySheetPageContributor.class && "christmas".equals("christmas")) {
+			return new ITabbedPropertySheetPageContributor() {
+
+				@Override
+				public String getContributorId() {
+					return "org.apache.sling.ide.eclipse-ui.propertyContributor1";
+				}
+				
+			};
+		} else if (adapter==IPropertySource.class) {
 			return properties;
 		} else if (adapter == IFile.class) {
 			if (resource instanceof IFile) {
@@ -321,9 +480,9 @@ public class JcrNode implements IAdaptab
 				return null;
 			}
 		} else if (adapter == IContributorResourceAdapter.class) {
-			if (resource==null) {
-				return null;
-			}
+			//if (resource==null) {
+			//	return null;
+			//}
 			return new IContributorResourceAdapter() {
 				
 				@Override
@@ -334,34 +493,46 @@ public class JcrNode implements IAdaptab
 					JcrNode node = (JcrNode)adaptable;
 					if (node.resource!=null) {
 						return node.resource;
+					} else {
+						return node.underlying.file;
 					}
-					return null;
+//					return null;
 				}
 			};
 		} else if (adapter == IResource.class) {
-			return resource;		
+			if (resource!=null) {
+				return resource;
+			} else {
+				return null;//underlying.file;
+			}
 		} else if (adapter == ResourceMapping.class) { 
 			boolean t = true;
 			if (!t) {
 				return null;
 			}
-			if (resource==null) {
-				return null;
-			}
+//			if (resource==null) {
+//				return null;
+//			}
 			return new ResourceMapping() {
 				
 				@Override
 				public ResourceTraversal[] getTraversals(ResourceMappingContext context,
 						IProgressMonitor monitor) throws CoreException {
-					return new ResourceTraversal[] { new ResourceTraversal(new IResource[] { resource }, IResource.DEPTH_INFINITE, IResource.NONE) };
+					if (resource!=null) {
+						return new ResourceTraversal[] { new ResourceTraversal(new IResource[] { resource }, IResource.DEPTH_INFINITE, IResource.NONE) };
+					} else {
+						return new ResourceTraversal[] { new ResourceTraversal(new IResource[] { underlying.file }, IResource.DEPTH_INFINITE, IResource.NONE) };
+					}
 				}
 				
 				@Override
 				public IProject[] getProjects() {
 					if (resource!=null) {
 						return new IProject[] {resource.getProject()};
+					} else {
+						return new IProject[] {underlying.file.getProject()};
 					}
-					return null;
+//					return null;
 				}
 				
 				@Override
@@ -371,11 +542,99 @@ public class JcrNode implements IAdaptab
 				
 				@Override
 				public Object getModelObject() {
-					return resource;
+					if (resource!=null) {
+						return resource;
+					} else {
+						return underlying.file;
+					}
 				}
 			};
 		}
 		return null;
 	}
 
+	public IFile getFileForEditor() {
+		if (resource instanceof IFile) {
+//			if (!isVaultFile(resource)) {
+			return (IFile)resource;
+		} else if (resource instanceof IContainer) {
+			return null;
+		} else if (underlying!=null && underlying.file!=null) {
+			return underlying.file;
+		} else {
+			return null;
+		}
+	}
+
+	public void rename(String string) {
+		if (domNode!=null && underlying!=null) {
+			domNode.getOwnerDocument().renameNode(domNode, domNode.getNamespaceURI(), string);
+			underlying.save();
+		}
+	}
+
+	public boolean canBeRenamed() {
+		if (resource!=null) {
+			return false;
+		}
+		if (domNode!=null && underlying!=null) {
+			if (domNode.getNodeName().equals("jcr:content")) {
+				return false;
+			}
+			return true;
+		}
+		return false;
+	}
+
+	public JcrNode getParent() {
+		return parent;
+	}
+	
+	IResource getResource() {
+		return resource;
+	}
+
+	public void createChild(String nodeName) {
+		if (domNode==null) {
+			// then we're not in the context of a .content.xml file yet
+			// so we need to create one
+			final String minimalContentXml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><jcr:root xmlns:sling=\"http://sling.apache.org/jcr/sling/1.0\" xmlns:jcr=\"http://www.jcp.org/jcr/1.0\"/>";
+			if (resource instanceof IFolder) {
+				IFolder folder = (IFolder)resource;
+				IFile file = folder.getFile(nodeName+".xml");
+				try {
+					file.create(new ByteArrayInputStream(minimalContentXml.getBytes()), true, new NullProgressMonitor());
+				} catch (CoreException e) {
+					//TODO proper logging
+					e.printStackTrace();
+				}
+			} else {
+				MessageDialog.openInformation(Display.getDefault().getActiveShell(), 
+						"Cannot create JCR node on a File", "Creating a JCR node on a File is not yet supported");
+			}
+		} else {
+			try{
+				Element element = domNode.getOwnerDocument().createElement(nodeName);
+				element.setAttribute("jcr:primaryType", "nt:unstructured");
+				Node childDomNode = domNode.appendChild(element);
+				JcrNode childNode = new JcrNode(this, childDomNode, null);
+				underlying.save();
+			} catch(Exception e) {
+				MessageDialog.openError(Display.getDefault().getActiveShell(), "Error creating new JCR node", "The following error occurred: "+e.getMessage());
+			}
+		}
+	}
+
+	public void delete() {
+		if (parent==null) {
+			// then I dont know how to delete
+			return;
+		}
+		parent.children.remove(this);
+		if (domNode!=null) {
+			domNode.getParentNode().removeChild(domNode);
+		}
+		underlying.save();
+	}
+
 }

Modified: sling/branches/tooling-ide-vlt/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/nav/model/SyncDir.java
URL: http://svn.apache.org/viewvc/sling/branches/tooling-ide-vlt/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/nav/model/SyncDir.java?rev=1522808&r1=1522807&r2=1522808&view=diff
==============================================================================
--- sling/branches/tooling-ide-vlt/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/nav/model/SyncDir.java (original)
+++ sling/branches/tooling-ide-vlt/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/nav/model/SyncDir.java Fri Sep 13 08:14:36 2013
@@ -17,6 +17,7 @@
 package org.apache.sling.ide.eclipse.ui.nav.model;
 
 import org.apache.sling.ide.eclipse.ui.internal.SharedImages;
+import org.eclipse.core.resources.IFile;
 import org.eclipse.core.resources.IFolder;
 import org.eclipse.swt.graphics.Image;
 
@@ -34,6 +35,20 @@ public class SyncDir extends JcrNode {
 	}
 	
 	@Override
+	public int hashCode() {
+		return folder.hashCode();
+	}
+	
+	@Override
+	public boolean equals(Object obj) {
+		if (obj instanceof SyncDir) {
+			SyncDir other = (SyncDir) obj;
+			return folder.equals(other.folder);
+		}
+		return false;
+	}
+	
+	@Override
 	public Image getImage() {
 		return SharedImages.SLING_ICON.createImage();
 	}
@@ -55,5 +70,10 @@ public class SyncDir extends JcrNode {
 	public String getName() {
 		return "/";
 	}
+	
+	@Override
+	public IFile getFileForEditor() {
+		return null;
+	}
 
 }

Propchange: sling/branches/tooling-ide-vlt/tooling/ide/m2e-feature/
------------------------------------------------------------------------------
--- svn:ignore (added)
+++ svn:ignore Fri Sep 13 08:14:36 2013
@@ -0,0 +1,5 @@
+target
+
+.settings
+
+.project

Modified: sling/branches/tooling-ide-vlt/tooling/ide/p2update/category.xml
URL: http://svn.apache.org/viewvc/sling/branches/tooling-ide-vlt/tooling/ide/p2update/category.xml?rev=1522808&r1=1522807&r2=1522808&view=diff
==============================================================================
--- sling/branches/tooling-ide-vlt/tooling/ide/p2update/category.xml (original)
+++ sling/branches/tooling-ide-vlt/tooling/ide/p2update/category.xml Fri Sep 13 08:14:36 2013
@@ -3,5 +3,8 @@
    <feature url="features/org.apache.sling.ide.feature_0.0.1.qualifier.jar" id="org.apache.sling.ide.feature" version="0.0.1.qualifier">
       <category name="sling"/>
    </feature>
+   <feature url="features/org.apache.sling.ide.m2e-feature_0.0.1.qualifier.jar" id="org.apache.sling.ide.m2e-feature" version="0.0.1.qualifier">
+      <category name="sling"/>
+   </feature>
    <category-def name="sling" label="Sling"/>
 </site>

Modified: sling/branches/tooling-ide-vlt/tooling/ide/pom.xml
URL: http://svn.apache.org/viewvc/sling/branches/tooling-ide-vlt/tooling/ide/pom.xml?rev=1522808&r1=1522807&r2=1522808&view=diff
==============================================================================
--- sling/branches/tooling-ide-vlt/tooling/ide/pom.xml (original)
+++ sling/branches/tooling-ide-vlt/tooling/ide/pom.xml Fri Sep 13 08:14:36 2013
@@ -19,6 +19,8 @@
 		<module>eclipse-core</module>
 		<module>eclipse-ui</module>
 		<module>feature</module>
+		<module>eclipse-m2e-ui</module>
+		<module>m2e-feature</module>
 		<module>p2update</module>
 	</modules>
 

Modified: sling/branches/tooling-ide-vlt/tooling/ide/target-definition/org.apache.sling.ide.target-definition.target
URL: http://svn.apache.org/viewvc/sling/branches/tooling-ide-vlt/tooling/ide/target-definition/org.apache.sling.ide.target-definition.target?rev=1522808&r1=1522807&r2=1522808&view=diff
==============================================================================
--- sling/branches/tooling-ide-vlt/tooling/ide/target-definition/org.apache.sling.ide.target-definition.target (original)
+++ sling/branches/tooling-ide-vlt/tooling/ide/target-definition/org.apache.sling.ide.target-definition.target Fri Sep 13 08:14:36 2013
@@ -1,21 +1,53 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<?pde version="3.8"?><target name="Sling IDE Tools" sequenceNumber="13">
+<?pde version="3.8"?>
+<target name="Sling IDE Tools" sequenceNumber="23">
 <locations>
 <location includeAllPlatforms="false" includeConfigurePhase="false" includeMode="planner" includeSource="true" type="InstallableUnit">
-<unit id="org.eclipse.wst.server_adapters.feature.feature.group" version="3.2.100.v20110303-51EoAkF77g8HBSc"/>
-<unit id="org.eclipse.jdt.feature.group" version="3.7.2.v20120120-1414-7z8gFcuFMP7BW5XTz0jLTnz0l9B1"/>
-<unit id="org.eclipse.platform.feature.group" version="3.7.2.v20120207-1839-9gF7UHPDFxGjd-PqDr2jX_4yKaumkoHTz04_q-q"/>
-<unit id="org.eclipse.jst.enterprise_ui.feature.feature.group" version="3.3.2.v201111030500-7b7II1YFSK2WIuPRDEnExPV-RvTn"/>
-<repository location="http://download.eclipse.org/releases/indigo"/>
-</location>
-<location includeAllPlatforms="false" includeConfigurePhase="false" includeMode="planner" includeSource="true" type="InstallableUnit">
+<unit id="org.apache.commons.httpclient" version="3.1.0.v201012070820"/>
 <unit id="org.json" version="1.0.0.v201011060100"/>
 <unit id="org.apache.commons.io" version="2.0.1.v201105210651"/>
 <unit id="org.slf4j.api" version="1.6.4.v20120130-2120"/>
 <unit id="ch.qos.logback.slf4j" version="1.0.0.v20120123-1500"/>
 <unit id="org.apache.commons.collections" version="3.2.0.v201005080500"/>
-<unit id="org.apache.commons.httpclient" version="3.1.0.v201012070820"/>
 <repository location="http://download.eclipse.org/tools/orbit/downloads/drops/R20120526062928/repository"/>
 </location>
+<location includeAllPlatforms="false" includeConfigurePhase="false" includeMode="planner" includeSource="true" type="InstallableUnit">
+<unit id="org.eclipse.m2e.feature.feature.group" version="1.4.0.20130601-0317"/>
+<repository location="http://download.eclipse.org/technology/m2e/releases"/>
+</location>
+<location includeAllPlatforms="false" includeConfigurePhase="false" includeMode="planner" includeSource="true" type="InstallableUnit">
+<unit id="org.eclipse.platform.feature.group" version="3.7.2.v20120207-1839-9gF7UHPDFxGjd-PqDr2jX_4yKaumkoHTz04_q-q"/>
+<unit id="org.eclipse.jdt.feature.group" version="3.7.2.v20120120-1414-7z8gFcuFMP7BW5XTz0jLTnz0l9B1"/>
+<unit id="org.eclipse.pde.feature.group" version="3.7.2.v20120120-1420-7b7rFUOFEx2Xnqafnpz0E--0"/>
+<unit id="org.eclipse.wst.server_adapters.feature.feature.group" version="3.2.100.v20110303-51EoAkF77g8HBSc"/>
+<unit id="org.eclipse.jst.enterprise_ui.feature.feature.group" version="3.3.2.v201111030500-7b7II1YFSK2WIuPRDEnExPV-RvTn"/>
+<unit id="org.eclipse.pde.api.tools.ee.fragments.feature.group" version="1.0.200.r37x_v20110803-7D-FHkFAFkNZZO9PfBZStN"/>
+<unit id="org.eclipse.libra.facet.feature.feature.group" version="0.1.2.201202130952"/>
+<repository location="http://download.eclipse.org/releases/indigo"/>
+</location>
+<location id="org.sonatype.tycho.m2e.feature" path="${eclipse_home}" type="Feature"/>
+<location includeAllPlatforms="false" includeConfigurePhase="false" includeMode="planner" includeSource="true" type="InstallableUnit">
+<unit id="org.eclipse.jst.web_ui.feature.feature.group" version="3.3.2.v201112072049-7F7AFO7C25ToiIbpoiuW12GT78Mciy6W7iwuxaco"/>
+<unit id="org.eclipse.wst.common_core.feature.feature.group" version="3.3.2.v201111030500-7B7DFO9F7RZHOhIjR6Mz-NJ"/>
+<unit id="org.eclipse.wst.web_core.feature.feature.group" version="3.3.2.v201111030500-7E7EFMcAJvn8cwW45JTLsz-TCw6tofoJ"/>
+<unit id="org.eclipse.wst.common_ui.feature.feature.group" version="3.3.2.v201111030500-7C79FVsEdhO_sfog9oNekiJkS7Nz00OK"/>
+<unit id="org.eclipse.wst.server_ui.feature.feature.group" version="3.3.2.v20111026_1748-7B79FBdAtJcez0EONePJUSNPjBC42"/>
+<unit id="org.eclipse.wst.xml_core.feature.feature.group" version="3.3.2.v201112072049-7C7OFeMF7RZHQOIsNANyRc"/>
+<unit id="org.eclipse.jst.server_adapters.ext.feature.feature.group" version="3.3.2.v20111010_1242-777HFHzCcNBDjCbIUfEEE3"/>
+<unit id="org.eclipse.wst.server_userdoc.feature.feature.group" version="3.3.0.v20110512-20DF7w312215222664"/>
+<unit id="org.eclipse.wst.xml_userdoc.feature.feature.group" version="3.3.0.v201102071641-50FYwAkF7B77UBZFDBL"/>
+<unit id="org.eclipse.wst.server_adapters.feature.feature.group" version="3.2.100.v20110303-51EoAkF77g8HBSc"/>
+<unit id="org.eclipse.wst.ws_wsdl15.feature.feature.group" version="1.5.301.v201102200555-2407w312123151655"/>
+<unit id="org.eclipse.wst.server_core.feature.feature.group" version="3.3.2.v20111026_1748-30FBd8s7356394Ka2531"/>
+<unit id="org.eclipse.wst.ws_userdoc.feature.feature.group" version="3.1.300.v201102200555-44FR79oB5855Q8IBD7G"/>
+<unit id="org.eclipse.wst.web_userdoc.feature.feature.group" version="3.3.0.v201102200555-31Eo8s734B3E4H7799"/>
+<unit id="org.eclipse.jst.web_core.feature.feature.group" version="3.3.2.v201112072049-7Q7DGLAFE9LeAHGQwz0Yz0Nmuitz01z01sRxi387"/>
+<unit id="org.eclipse.wst.ws_core.feature.feature.group" version="3.3.1.v201108230355-7L7RFi8FGtGd-thsz0z0rQwh2766"/>
+<unit id="org.eclipse.wst.ws_ui.feature.feature.group" version="3.3.2.v201112142348-7I7AFg1EtEoVFjz-98J1iuhhBz-uuWclgZtNHnEN"/>
+<unit id="org.eclipse.jst.web_userdoc.feature.feature.group" version="3.3.1.v201108102009-2107w31211938"/>
+<unit id="org.eclipse.jst.server_ui.feature.feature.group" version="3.3.0.v201102200555-7A6FHr9xFcAVCFLZBBJLIR43A"/>
+<unit id="org.eclipse.jst.server_adapters.feature.feature.group" version="3.2.100.v20110303-208Z7w31211419"/>
+<repository location="http://download.eclipse.org/releases/indigo"/>
+</location>
 </locations>
 </target>