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>