You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@ant.apache.org by hi...@apache.org on 2011/01/07 13:39:33 UTC
svn commit: r1056288 - in /ant/ivy/core/trunk:
src/java/org/apache/ivy/osgi/updatesite/
src/java/org/apache/ivy/osgi/updatesite/xml/
test/java/org/apache/ivy/osgi/updatesite/
Author: hibou
Date: Fri Jan 7 12:39:32 2011
New Revision: 1056288
URL: http://svn.apache.org/viewvc?rev=1056288&view=rev
Log:
Add a first implementation of a parser of an Eclipse update site
Added:
ant/ivy/core/trunk/src/java/org/apache/ivy/osgi/updatesite/
ant/ivy/core/trunk/src/java/org/apache/ivy/osgi/updatesite/PluginAdapter.java (with props)
ant/ivy/core/trunk/src/java/org/apache/ivy/osgi/updatesite/UpdateSiteDescriptor.java (with props)
ant/ivy/core/trunk/src/java/org/apache/ivy/osgi/updatesite/UpdateSiteLoader.java (with props)
ant/ivy/core/trunk/src/java/org/apache/ivy/osgi/updatesite/xml/
ant/ivy/core/trunk/src/java/org/apache/ivy/osgi/updatesite/xml/Archive.java (with props)
ant/ivy/core/trunk/src/java/org/apache/ivy/osgi/updatesite/xml/CategoryDef.java (with props)
ant/ivy/core/trunk/src/java/org/apache/ivy/osgi/updatesite/xml/EclipseFeature.java (with props)
ant/ivy/core/trunk/src/java/org/apache/ivy/osgi/updatesite/xml/EclipsePlugin.java (with props)
ant/ivy/core/trunk/src/java/org/apache/ivy/osgi/updatesite/xml/EclipseUpdateSiteParser.java (with props)
ant/ivy/core/trunk/src/java/org/apache/ivy/osgi/updatesite/xml/FeatureParser.java (with props)
ant/ivy/core/trunk/src/java/org/apache/ivy/osgi/updatesite/xml/Require.java (with props)
ant/ivy/core/trunk/src/java/org/apache/ivy/osgi/updatesite/xml/UpdateSite.java (with props)
ant/ivy/core/trunk/src/java/org/apache/ivy/osgi/updatesite/xml/UpdateSiteDigestParser.java (with props)
ant/ivy/core/trunk/test/java/org/apache/ivy/osgi/updatesite/
ant/ivy/core/trunk/test/java/org/apache/ivy/osgi/updatesite/UpdateSiteLoaderTest.java (with props)
Added: ant/ivy/core/trunk/src/java/org/apache/ivy/osgi/updatesite/PluginAdapter.java
URL: http://svn.apache.org/viewvc/ant/ivy/core/trunk/src/java/org/apache/ivy/osgi/updatesite/PluginAdapter.java?rev=1056288&view=auto
==============================================================================
--- ant/ivy/core/trunk/src/java/org/apache/ivy/osgi/updatesite/PluginAdapter.java (added)
+++ ant/ivy/core/trunk/src/java/org/apache/ivy/osgi/updatesite/PluginAdapter.java Fri Jan 7 12:39:32 2011
@@ -0,0 +1,80 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+package org.apache.ivy.osgi.updatesite;
+
+import java.util.Iterator;
+
+import org.apache.ivy.osgi.core.BundleInfo;
+import org.apache.ivy.osgi.core.BundleRequirement;
+import org.apache.ivy.osgi.updatesite.xml.EclipseFeature;
+import org.apache.ivy.osgi.updatesite.xml.EclipsePlugin;
+import org.apache.ivy.osgi.updatesite.xml.Require;
+import org.apache.ivy.osgi.util.VersionRange;
+
+public class PluginAdapter {
+
+ public static BundleInfo featureAsBundle(String baseUrl, EclipseFeature feature) {
+ BundleInfo b = new BundleInfo(feature.getId(), feature.getVersion());
+
+ if (feature.getUrl() == null) {
+ b.setUri(baseUrl + "features/" + feature.getId() + '_' + feature.getVersion() + ".jar");
+ } else {
+ b.setUri(baseUrl + feature.getUrl());
+ }
+
+ b.setDescription(feature.getDescription());
+ b.setLicense(feature.getLicense());
+
+ Iterator itPlugins = feature.getPlugins().iterator();
+ while (itPlugins.hasNext()) {
+ EclipsePlugin plugin = (EclipsePlugin) itPlugins.next();
+ BundleRequirement r = new BundleRequirement(BundleInfo.BUNDLE_TYPE, plugin.getId(),
+ new VersionRange(plugin.getVersion()), null);
+ b.addRequirement(r);
+ }
+
+ Iterator itRequires = feature.getRequires().iterator();
+ while (itRequires.hasNext()) {
+ Require require = (Require) itRequires.next();
+ String id;
+ if (require.getPlugin() != null) {
+ id = require.getPlugin();
+ } else {
+ id = require.getFeature();
+ }
+ VersionRange range;
+ if (require.getMatch().equals("greaterOrEqual")) {
+ range = new VersionRange(require.getVersion());
+ } else {
+ throw new IllegalStateException("unsupported match " + require.getMatch());
+ }
+ BundleRequirement r = new BundleRequirement(BundleInfo.BUNDLE_TYPE, id, range, null);
+ b.addRequirement(r);
+ }
+
+ return b;
+ }
+
+ public static BundleInfo pluginAsBundle(String baseUrl, EclipsePlugin plugin) {
+ BundleInfo b = new BundleInfo(plugin.getId(), plugin.getVersion());
+
+ b.setUri(baseUrl + "plugins/" + plugin.getId() + '_' + plugin.getVersion() + ".jar");
+
+ return b;
+ }
+}
Propchange: ant/ivy/core/trunk/src/java/org/apache/ivy/osgi/updatesite/PluginAdapter.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: ant/ivy/core/trunk/src/java/org/apache/ivy/osgi/updatesite/PluginAdapter.java
------------------------------------------------------------------------------
svn:keywords = Date Revision Author HeadURL Id
Propchange: ant/ivy/core/trunk/src/java/org/apache/ivy/osgi/updatesite/PluginAdapter.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: ant/ivy/core/trunk/src/java/org/apache/ivy/osgi/updatesite/UpdateSiteDescriptor.java
URL: http://svn.apache.org/viewvc/ant/ivy/core/trunk/src/java/org/apache/ivy/osgi/updatesite/UpdateSiteDescriptor.java?rev=1056288&view=auto
==============================================================================
--- ant/ivy/core/trunk/src/java/org/apache/ivy/osgi/updatesite/UpdateSiteDescriptor.java (added)
+++ ant/ivy/core/trunk/src/java/org/apache/ivy/osgi/updatesite/UpdateSiteDescriptor.java Fri Jan 7 12:39:32 2011
@@ -0,0 +1,42 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+package org.apache.ivy.osgi.updatesite;
+
+import java.util.Iterator;
+
+import org.apache.ivy.osgi.core.ExecutionEnvironmentProfileProvider;
+import org.apache.ivy.osgi.repo.RepoDescriptor;
+import org.apache.ivy.osgi.updatesite.xml.EclipseFeature;
+import org.apache.ivy.osgi.updatesite.xml.EclipsePlugin;
+
+public class UpdateSiteDescriptor extends RepoDescriptor {
+
+ public UpdateSiteDescriptor(ExecutionEnvironmentProfileProvider profileProvider) {
+ super(profileProvider);
+ }
+
+ public void addFeature(String baseUrl, EclipseFeature feature) {
+ addBundle(PluginAdapter.featureAsBundle(baseUrl, feature));
+
+ Iterator itPlugins = feature.getPlugins().iterator();
+ while (itPlugins.hasNext()) {
+ addBundle(PluginAdapter.pluginAsBundle(baseUrl, (EclipsePlugin) itPlugins.next()));
+ }
+ }
+
+}
Propchange: ant/ivy/core/trunk/src/java/org/apache/ivy/osgi/updatesite/UpdateSiteDescriptor.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: ant/ivy/core/trunk/src/java/org/apache/ivy/osgi/updatesite/UpdateSiteDescriptor.java
------------------------------------------------------------------------------
svn:keywords = Date Revision Author HeadURL Id
Propchange: ant/ivy/core/trunk/src/java/org/apache/ivy/osgi/updatesite/UpdateSiteDescriptor.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: ant/ivy/core/trunk/src/java/org/apache/ivy/osgi/updatesite/UpdateSiteLoader.java
URL: http://svn.apache.org/viewvc/ant/ivy/core/trunk/src/java/org/apache/ivy/osgi/updatesite/UpdateSiteLoader.java?rev=1056288&view=auto
==============================================================================
--- ant/ivy/core/trunk/src/java/org/apache/ivy/osgi/updatesite/UpdateSiteLoader.java (added)
+++ ant/ivy/core/trunk/src/java/org/apache/ivy/osgi/updatesite/UpdateSiteLoader.java Fri Jan 7 12:39:32 2011
@@ -0,0 +1,208 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+package org.apache.ivy.osgi.updatesite;
+
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URL;
+import java.text.ParseException;
+import java.util.Iterator;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipInputStream;
+
+import org.apache.ivy.osgi.core.ExecutionEnvironmentProfileProvider;
+import org.apache.ivy.osgi.p2.P2ArtifactParser;
+import org.apache.ivy.osgi.p2.P2Descriptor;
+import org.apache.ivy.osgi.p2.P2MetadataParser;
+import org.apache.ivy.osgi.p2.XMLInputParser;
+import org.apache.ivy.osgi.repo.RepoDescriptor;
+import org.apache.ivy.osgi.updatesite.xml.EclipseFeature;
+import org.apache.ivy.osgi.updatesite.xml.EclipseUpdateSiteParser;
+import org.apache.ivy.osgi.updatesite.xml.FeatureParser;
+import org.apache.ivy.osgi.updatesite.xml.UpdateSite;
+import org.apache.ivy.osgi.updatesite.xml.UpdateSiteDigestParser;
+import org.xml.sax.SAXException;
+
+public class UpdateSiteLoader {
+
+ public RepoDescriptor load(String url) throws IOException, ParseException, SAXException {
+ // first look for a p2 repository
+ RepoDescriptor repo = loadP2(url);
+ if (repo != null) {
+ return repo;
+ }
+ // then try the old update site
+ UpdateSite site = loadSite(url);
+ repo = loadFromDigest(site);
+ if (repo != null) {
+ return repo;
+ }
+ return loadFromSite(site);
+ }
+
+ private P2Descriptor loadP2(String url) throws IOException, ParseException, SAXException {
+ P2Descriptor p2Descriptor = new P2Descriptor(
+ ExecutionEnvironmentProfileProvider.getInstance());
+
+ if (!readJarOrXml(url, "artifacts", new P2ArtifactParser(p2Descriptor))) {
+ return null;
+ }
+
+ if (!readJarOrXml(url, "content", new P2MetadataParser(p2Descriptor))) {
+ return null;
+ }
+
+ return p2Descriptor;
+ }
+
+ private boolean readJarOrXml(String url, String baseName, XMLInputParser reader)
+ throws IOException, ParseException, SAXException {
+ URL contentUrl = new URL(url + baseName + ".jar");
+ InputStream in;
+ InputStream readIn = null; // the input stream from which the xml should be read
+ try {
+ in = contentUrl.openStream();
+ } catch (FileNotFoundException e) {
+ // no jar file, try the xml one
+ contentUrl = new URL(url + baseName + ".xml");
+ try {
+ in = contentUrl.openStream();
+ } catch (FileNotFoundException e2) {
+ // no xml either
+ return false;
+ }
+ // we will then read directly from that input stream
+ readIn = in;
+ }
+ try {
+ if (readIn == null) {
+ // compressed, let's get the pointer on the actual xml
+ readIn = findEntry(in, baseName + ".xml");
+ if (readIn == null) {
+ return false;
+ }
+ }
+ reader.parse(readIn);
+ return true;
+ } finally {
+ in.close();
+ }
+ }
+
+ private UpdateSite loadSite(String url) throws IOException, ParseException, SAXException {
+ String siteUrl = normalizeSiteUrl(url, null);
+ URL u = new URL(siteUrl + "site.xml");
+ InputStream in = u.openStream();
+ try {
+ UpdateSite site = EclipseUpdateSiteParser.parse(in);
+ site.setUrl(normalizeSiteUrl(site.getUrl(), siteUrl));
+ return site;
+ } finally {
+ in.close();
+ }
+ }
+
+ private String normalizeSiteUrl(String url, String defaultValue) {
+ if (url == null) {
+ return defaultValue;
+ }
+ if (url.endsWith("site.xml")) {
+ return url.substring(0, url.length() - 8);
+ }
+ if (!url.endsWith("/")) {
+ return url + "/";
+ }
+ return url;
+ }
+
+ private UpdateSiteDescriptor loadFromDigest(UpdateSite site) throws IOException,
+ ParseException, SAXException {
+ String baseUrl = site.getDigestURL();
+ String siteUrl = site.getUrl();
+ if (baseUrl == null) {
+ baseUrl = siteUrl;
+ } else if (baseUrl.startsWith(".")) {
+ if (baseUrl.length() > 1 && baseUrl.charAt(1) == '/') {
+ baseUrl = siteUrl + baseUrl.substring(2);
+ } else {
+ baseUrl = siteUrl + baseUrl.substring(1);
+ }
+ }
+ String digestUrl;
+ if (baseUrl.endsWith("/")) {
+ digestUrl = baseUrl + "digest.zip";
+ } else {
+ digestUrl = baseUrl + "/digest.zip";
+ }
+ URL digest = new URL(digestUrl);
+ InputStream in;
+ try {
+ in = digest.openStream();
+ } catch (FileNotFoundException e) {
+ return null;
+ }
+ try {
+ ZipInputStream zipped = findEntry(in, "digest.xml");
+ if (zipped == null) {
+ return null;
+ }
+ return UpdateSiteDigestParser.parse(zipped, site);
+ } finally {
+ in.close();
+ }
+ }
+
+ private UpdateSiteDescriptor loadFromSite(UpdateSite site) throws IOException, ParseException,
+ SAXException {
+ UpdateSiteDescriptor repoDescriptor = new UpdateSiteDescriptor(
+ ExecutionEnvironmentProfileProvider.getInstance());
+
+ Iterator itFeatures = site.getFeatures().iterator();
+ while (itFeatures.hasNext()) {
+ EclipseFeature feature = (EclipseFeature) itFeatures.next();
+ URL url = new URL(site.getUrl() + feature.getUrl());
+ InputStream in = url.openStream();
+ try {
+ ZipInputStream zipped = findEntry(in, "feature.xml");
+ if (zipped == null) {
+ return null;
+ }
+ EclipseFeature f = FeatureParser.parse(zipped);
+ f.setURL(feature.getUrl());
+ repoDescriptor.addFeature(site.getUrl(), f);
+ } finally {
+ in.close();
+ }
+ }
+
+ return repoDescriptor;
+ }
+
+ private ZipInputStream findEntry(InputStream in, String entryName) throws IOException {
+ ZipInputStream zipped = new ZipInputStream(in);
+ ZipEntry zipEntry = zipped.getNextEntry();
+ while (zipEntry != null && !zipEntry.getName().equals(entryName)) {
+ zipEntry = zipped.getNextEntry();
+ }
+ if (zipEntry == null) {
+ return null;
+ }
+ return zipped;
+ }
+}
Propchange: ant/ivy/core/trunk/src/java/org/apache/ivy/osgi/updatesite/UpdateSiteLoader.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: ant/ivy/core/trunk/src/java/org/apache/ivy/osgi/updatesite/UpdateSiteLoader.java
------------------------------------------------------------------------------
svn:keywords = Date Revision Author HeadURL Id
Propchange: ant/ivy/core/trunk/src/java/org/apache/ivy/osgi/updatesite/UpdateSiteLoader.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: ant/ivy/core/trunk/src/java/org/apache/ivy/osgi/updatesite/xml/Archive.java
URL: http://svn.apache.org/viewvc/ant/ivy/core/trunk/src/java/org/apache/ivy/osgi/updatesite/xml/Archive.java?rev=1056288&view=auto
==============================================================================
--- ant/ivy/core/trunk/src/java/org/apache/ivy/osgi/updatesite/xml/Archive.java (added)
+++ ant/ivy/core/trunk/src/java/org/apache/ivy/osgi/updatesite/xml/Archive.java Fri Jan 7 12:39:32 2011
@@ -0,0 +1,34 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+package org.apache.ivy.osgi.updatesite.xml;
+
+public class Archive {
+
+ public void setPath(String path) {
+ // TODO Auto-generated method stub
+
+ }
+
+ public void setURL(String url) {
+ // TODO Auto-generated method stub
+
+ }
+
+
+
+}
Propchange: ant/ivy/core/trunk/src/java/org/apache/ivy/osgi/updatesite/xml/Archive.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: ant/ivy/core/trunk/src/java/org/apache/ivy/osgi/updatesite/xml/Archive.java
------------------------------------------------------------------------------
svn:keywords = Date Revision Author HeadURL Id
Propchange: ant/ivy/core/trunk/src/java/org/apache/ivy/osgi/updatesite/xml/Archive.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: ant/ivy/core/trunk/src/java/org/apache/ivy/osgi/updatesite/xml/CategoryDef.java
URL: http://svn.apache.org/viewvc/ant/ivy/core/trunk/src/java/org/apache/ivy/osgi/updatesite/xml/CategoryDef.java?rev=1056288&view=auto
==============================================================================
--- ant/ivy/core/trunk/src/java/org/apache/ivy/osgi/updatesite/xml/CategoryDef.java (added)
+++ ant/ivy/core/trunk/src/java/org/apache/ivy/osgi/updatesite/xml/CategoryDef.java Fri Jan 7 12:39:32 2011
@@ -0,0 +1,37 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+package org.apache.ivy.osgi.updatesite.xml;
+
+public class CategoryDef {
+
+ public void setLabel(String label) {
+ // TODO Auto-generated method stub
+
+ }
+
+ public void setName(String name) {
+ // TODO Auto-generated method stub
+
+ }
+
+ public void setDescription(String trim) {
+ // TODO Auto-generated method stub
+
+ }
+
+}
Propchange: ant/ivy/core/trunk/src/java/org/apache/ivy/osgi/updatesite/xml/CategoryDef.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: ant/ivy/core/trunk/src/java/org/apache/ivy/osgi/updatesite/xml/CategoryDef.java
------------------------------------------------------------------------------
svn:keywords = Date Revision Author HeadURL Id
Propchange: ant/ivy/core/trunk/src/java/org/apache/ivy/osgi/updatesite/xml/CategoryDef.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: ant/ivy/core/trunk/src/java/org/apache/ivy/osgi/updatesite/xml/EclipseFeature.java
URL: http://svn.apache.org/viewvc/ant/ivy/core/trunk/src/java/org/apache/ivy/osgi/updatesite/xml/EclipseFeature.java?rev=1056288&view=auto
==============================================================================
--- ant/ivy/core/trunk/src/java/org/apache/ivy/osgi/updatesite/xml/EclipseFeature.java (added)
+++ ant/ivy/core/trunk/src/java/org/apache/ivy/osgi/updatesite/xml/EclipseFeature.java Fri Jan 7 12:39:32 2011
@@ -0,0 +1,176 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+package org.apache.ivy.osgi.updatesite.xml;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.ivy.osgi.util.Version;
+
+public class EclipseFeature {
+
+ private String id;
+
+ private Version version;
+
+ private List/* <EclipsePlugin> */plugins = new ArrayList();
+
+ private List/* <Require> */requires = new ArrayList();
+
+ private String url;
+
+ private String description;
+
+ private String license;
+
+ public EclipseFeature(String id, Version version) {
+ this.id = id;
+ this.version = version;
+ this.url = "features/" + id + '_' + version + ".jar";
+ }
+
+ public void setURL(String url) {
+ this.url = url;
+ }
+
+ public String getUrl() {
+ return url;
+ }
+
+ public void setType(String type) {
+ // TODO Auto-generated method stub
+ }
+
+ public String getId() {
+ return id;
+ }
+
+ public Version getVersion() {
+ return version;
+ }
+
+ public void setLabel(String label) {
+ // TODO Auto-generated method stub
+
+ }
+
+ public void setOS(String os) {
+ // TODO Auto-generated method stub
+
+ }
+
+ public void setWS(String ws) {
+ // TODO Auto-generated method stub
+
+ }
+
+ public void setNL(String nl) {
+ // TODO Auto-generated method stub
+
+ }
+
+ public void setArch(String arch) {
+ // TODO Auto-generated method stub
+
+ }
+
+ public void setPatch(String patch) {
+ // TODO Auto-generated method stub
+
+ }
+
+ public void addCategory(String name) {
+ // TODO Auto-generated method stub
+
+ }
+
+ public void setDescription(String description) {
+ this.description = description;
+ }
+
+ public String getDescription() {
+ return description;
+ }
+
+ public void setCopyright(String trim) {
+ // not useful
+ }
+
+ public void setLicense(String license) {
+ this.license = license;
+ }
+
+ public String getLicense() {
+ return license;
+ }
+
+ public void addPlugin(EclipsePlugin plugin) {
+ plugins.add(plugin);
+ }
+
+ public List getPlugins() {
+ return plugins;
+ }
+
+ public void addRequire(Require require) {
+ requires.add(require);
+ }
+
+ public List getRequires() {
+ return requires;
+ }
+
+ public void setApplication(String value) {
+ // TODO Auto-generated method stub
+
+ }
+
+ public void setPlugin(String value) {
+ // TODO Auto-generated method stub
+
+ }
+
+ public void setExclusive(boolean booleanValue) {
+ // TODO Auto-generated method stub
+
+ }
+
+ public void setPrimary(boolean booleanValue) {
+ // TODO Auto-generated method stub
+
+ }
+
+ public void setColocationAffinity(String value) {
+ // TODO Auto-generated method stub
+
+ }
+
+ public void setProviderName(String value) {
+ // TODO Auto-generated method stub
+
+ }
+
+ public void setImage(String value) {
+ // TODO Auto-generated method stub
+
+ }
+
+ public String toString() {
+ return id + "#" + version;
+ }
+}
Propchange: ant/ivy/core/trunk/src/java/org/apache/ivy/osgi/updatesite/xml/EclipseFeature.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: ant/ivy/core/trunk/src/java/org/apache/ivy/osgi/updatesite/xml/EclipseFeature.java
------------------------------------------------------------------------------
svn:keywords = Date Revision Author HeadURL Id
Propchange: ant/ivy/core/trunk/src/java/org/apache/ivy/osgi/updatesite/xml/EclipseFeature.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: ant/ivy/core/trunk/src/java/org/apache/ivy/osgi/updatesite/xml/EclipsePlugin.java
URL: http://svn.apache.org/viewvc/ant/ivy/core/trunk/src/java/org/apache/ivy/osgi/updatesite/xml/EclipsePlugin.java?rev=1056288&view=auto
==============================================================================
--- ant/ivy/core/trunk/src/java/org/apache/ivy/osgi/updatesite/xml/EclipsePlugin.java (added)
+++ ant/ivy/core/trunk/src/java/org/apache/ivy/osgi/updatesite/xml/EclipsePlugin.java Fri Jan 7 12:39:32 2011
@@ -0,0 +1,59 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+package org.apache.ivy.osgi.updatesite.xml;
+
+import org.apache.ivy.osgi.util.Version;
+
+public class EclipsePlugin {
+
+ private String id;
+
+ private Version version;
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public String getId() {
+ return id;
+ }
+
+ public void setVersion(Version version) {
+ this.version = version;
+ }
+
+ public Version getVersion() {
+ return version;
+ }
+
+ public void setUnpack(boolean valueOf) {
+ // TODO Auto-generated method stub
+
+ }
+
+ public void setFragment(String value) {
+ // TODO Auto-generated method stub
+
+ }
+
+ public void setFilter(String value) {
+ // TODO Auto-generated method stub
+
+ }
+
+}
Propchange: ant/ivy/core/trunk/src/java/org/apache/ivy/osgi/updatesite/xml/EclipsePlugin.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: ant/ivy/core/trunk/src/java/org/apache/ivy/osgi/updatesite/xml/EclipsePlugin.java
------------------------------------------------------------------------------
svn:keywords = Date Revision Author HeadURL Id
Propchange: ant/ivy/core/trunk/src/java/org/apache/ivy/osgi/updatesite/xml/EclipsePlugin.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: ant/ivy/core/trunk/src/java/org/apache/ivy/osgi/updatesite/xml/EclipseUpdateSiteParser.java
URL: http://svn.apache.org/viewvc/ant/ivy/core/trunk/src/java/org/apache/ivy/osgi/updatesite/xml/EclipseUpdateSiteParser.java?rev=1056288&view=auto
==============================================================================
--- ant/ivy/core/trunk/src/java/org/apache/ivy/osgi/updatesite/xml/EclipseUpdateSiteParser.java (added)
+++ ant/ivy/core/trunk/src/java/org/apache/ivy/osgi/updatesite/xml/EclipseUpdateSiteParser.java Fri Jan 7 12:39:32 2011
@@ -0,0 +1,257 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+package org.apache.ivy.osgi.updatesite.xml;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.text.ParseException;
+import java.util.ArrayList;
+
+import org.apache.ivy.osgi.util.DelegetingHandler;
+import org.apache.ivy.osgi.util.Version;
+import org.xml.sax.Attributes;
+import org.xml.sax.InputSource;
+import org.xml.sax.SAXException;
+import org.xml.sax.XMLReader;
+import org.xml.sax.helpers.XMLReaderFactory;
+
+public class EclipseUpdateSiteParser {
+
+ public static UpdateSite parse(InputStream in) throws ParseException, IOException, SAXException {
+ XMLReader reader = XMLReaderFactory.createXMLReader();
+ SiteHandler handler = new SiteHandler();
+ reader.setContentHandler(handler);
+ reader.parse(new InputSource(in));
+ return handler.updatesite;
+ }
+
+ static class SiteHandler extends DelegetingHandler {
+
+ private static final String SITE = "site";
+
+ private static final String URL = "url";
+
+ private static final String PACK200 = "pack200";
+
+ private static final String MIRRORS_URL = "mirrorsURL";
+
+ private static final String ASSOCIATE_SITES_URL = "associateSitesURL";
+
+ private static final String DIGEST_URL = "digestURL";
+
+ UpdateSite updatesite;
+
+ public SiteHandler() {
+ super(SITE);
+ // addChild(new DescriptionHandler(), new ChildElementHandler() {
+ // public void childHanlded(DelegetingHandler child) {
+ // updateSite.setDescription(child.getBufferedChars().trim());
+ // }
+ // });
+ addChild(new FeatureHandler(), new ChildElementHandler() {
+ public void childHanlded(DelegetingHandler child) {
+ updatesite.addFeature(((FeatureHandler) child).feature);
+ }
+ });
+ // addChild(new ArchiveHandler(), new ChildElementHandler() {
+ // public void childHanlded(DelegetingHandler child) {
+ // updateSite.addArchive(((ArchiveHandler) child).archive);
+ // }
+ // });
+ // addChild(new CategoryDefHandler(), new ChildElementHandler() {
+ // public void childHanlded(DelegetingHandler child) {
+ // updateSite.addCategoryDef(((CategoryDefHandler) child).categoryDef);
+ // }
+ // });
+ }
+
+ protected void handleAttributes(Attributes atts) {
+ String url = atts.getValue(URL);
+ if (url != null && !("".equals(url.trim()))) {
+ if (!url.endsWith("/") && !url.endsWith(File.separator)) {
+ url += "/";
+ }
+ updatesite.setUrl(url);
+ }
+
+ String mirrorsURL = atts.getValue(MIRRORS_URL);
+ if (mirrorsURL != null && mirrorsURL.trim().length() > 0) {
+ updatesite.setMirrorsURL(mirrorsURL);
+ }
+
+ String pack200 = atts.getValue(PACK200);
+ if (pack200 != null && new Boolean(pack200).booleanValue()) {
+ updatesite.setPack200(true);
+ }
+
+ String digestURL = atts.getValue(DIGEST_URL);
+ if (digestURL != null) {
+ updatesite.setDigestURL(digestURL);
+ }
+
+ String associateSitesURL = atts.getValue(ASSOCIATE_SITES_URL);
+ if (associateSitesURL != null) {
+ updatesite.setAssociateSitesURL(associateSitesURL);
+ }
+ }
+ }
+
+ static class DescriptionHandler extends DelegetingHandler {
+
+ private static final String DESCRIPTION = "description";
+
+ private static final String URL = "url";
+
+ public DescriptionHandler() {
+ super(DESCRIPTION);
+ setBufferingChar(true);
+ }
+
+ protected void handleAttributes(Attributes atts) {
+ String url = atts.getValue(URL);
+ }
+ }
+
+ static class FeatureHandler extends DelegetingHandler {
+
+ private static final String FEATURE = "feature";
+
+ private static final String VERSION = "version";
+
+ private static final String ID = "id";
+
+ private static final String URL = "url";
+
+ private static final String PATCH = "patch";
+
+ private static final String ARCH = "arch";
+
+ private static final String NL = "nl";
+
+ private static final String WS = "ws";
+
+ private static final String OS = "os";
+
+ private static final String LABEL = "label";
+
+ private static final String TYPE = "type";
+
+ private EclipseFeature feature;
+
+ public FeatureHandler() {
+ super(FEATURE);
+ addChild(new CategoryHandler(), new ChildElementHandler() {
+ public void childHanlded(DelegetingHandler child) {
+ feature.addCategory(((CategoryHandler) child).name);
+ }
+ });
+ }
+
+ protected void handleAttributes(Attributes atts) throws SAXException {
+ feature = new EclipseFeature(atts.getValue(ID), new Version(atts.getValue(VERSION)));
+
+ String url = atts.getValue(URL);
+ if (url != null) {
+ feature.setURL(url);
+ }
+ feature.setType(atts.getValue(TYPE));
+ feature.setLabel(atts.getValue(LABEL));
+ feature.setOS(atts.getValue(OS));
+ feature.setWS(atts.getValue(WS));
+ feature.setNL(atts.getValue(NL));
+ feature.setArch(atts.getValue(ARCH));
+ feature.setPatch(atts.getValue(PATCH));
+ }
+
+ }
+
+ static class CategoryHandler extends DelegetingHandler {
+
+ private static final String CATEGORY = "category";
+
+ private static final String NAME = "name";
+
+ String name;
+
+ public CategoryHandler() {
+ super(CATEGORY);
+ }
+
+ protected void handleAttributes(Attributes atts) throws SAXException {
+ name = atts.getValue(NAME);
+ }
+ }
+
+ static class ArchiveHandler extends DelegetingHandler {
+
+ private static final String ARCHIVE = "archive";
+
+ private static final String URL = "url";
+
+ private static final String PATH = "path";
+
+ private Archive archive;
+
+ public ArchiveHandler() {
+ super(ARCHIVE);
+ }
+
+ protected void handleAttributes(Attributes atts) throws SAXException {
+ archive = new Archive();
+
+ String path = atts.getValue(PATH);
+ archive.setPath(path);
+
+ String url = atts.getValue(URL);
+ archive.setURL(url);
+
+ }
+ }
+
+ static class CategoryDefHandler extends DelegetingHandler {
+
+ private static final String CATEGORY_DEF = "category-def";
+
+ private static final String NAME = "name";
+
+ private static final String LABEL = "label";
+
+ private CategoryDef categoryDef;
+
+ public CategoryDefHandler() {
+ super(CATEGORY_DEF);
+ addChild(new DescriptionHandler(), new ChildElementHandler() {
+ public void childHanlded(DelegetingHandler child) {
+ categoryDef.setDescription(child.getBufferedChars().trim());
+ }
+ });
+ }
+
+ protected void handleAttributes(Attributes atts) throws SAXException {
+ categoryDef = new CategoryDef();
+
+ String name = atts.getValue(NAME);
+ categoryDef.setName(name);
+
+ String label = atts.getValue(LABEL);
+ categoryDef.setLabel(label);
+ }
+ }
+
+}
Propchange: ant/ivy/core/trunk/src/java/org/apache/ivy/osgi/updatesite/xml/EclipseUpdateSiteParser.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: ant/ivy/core/trunk/src/java/org/apache/ivy/osgi/updatesite/xml/EclipseUpdateSiteParser.java
------------------------------------------------------------------------------
svn:keywords = Date Revision Author HeadURL Id
Propchange: ant/ivy/core/trunk/src/java/org/apache/ivy/osgi/updatesite/xml/EclipseUpdateSiteParser.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: ant/ivy/core/trunk/src/java/org/apache/ivy/osgi/updatesite/xml/FeatureParser.java
URL: http://svn.apache.org/viewvc/ant/ivy/core/trunk/src/java/org/apache/ivy/osgi/updatesite/xml/FeatureParser.java?rev=1056288&view=auto
==============================================================================
--- ant/ivy/core/trunk/src/java/org/apache/ivy/osgi/updatesite/xml/FeatureParser.java (added)
+++ ant/ivy/core/trunk/src/java/org/apache/ivy/osgi/updatesite/xml/FeatureParser.java Fri Jan 7 12:39:32 2011
@@ -0,0 +1,373 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+package org.apache.ivy.osgi.updatesite.xml;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.text.ParseException;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.apache.ivy.osgi.util.DelegetingHandler;
+import org.apache.ivy.osgi.util.Version;
+import org.xml.sax.Attributes;
+import org.xml.sax.InputSource;
+import org.xml.sax.SAXException;
+import org.xml.sax.XMLReader;
+import org.xml.sax.helpers.XMLReaderFactory;
+
+public class FeatureParser {
+
+ public static EclipseFeature parse(InputStream in) throws ParseException, IOException,
+ SAXException {
+ XMLReader reader;
+ try {
+ reader = XMLReaderFactory.createXMLReader();
+ } catch (SAXException e) {
+ throw new ParseException(e.getMessage(), 0);
+ }
+ FeatureHandler handler = new FeatureHandler();
+ reader.setContentHandler(handler);
+ reader.parse(new InputSource(in));
+ return handler.feature;
+ }
+
+ static class FeatureHandler extends DelegetingHandler {
+
+ private static final String FEATURE = "feature";
+
+ private static final String COLOCATION_AFFINITY = "colocation-affinity";
+
+ private static final String PRIMARY = "primary";
+
+ private static final String EXCLUSIVE = "exclusive";
+
+ private static final String PLUGIN = "plugin";
+
+ private static final String APPLICATION = "application";
+
+ private static final String ARCH = "arch";
+
+ private static final String NL = "nl";
+
+ private static final String WS = "ws";
+
+ private static final String OS = "os";
+
+ private static final String VERSION = "version";
+
+ private static final String ID = "id";
+
+ private static final String PROVIDER_NAME = "provider-name";
+
+ private static final String LABEL = "label";
+
+ private static final String IMAGE = "image";
+
+ EclipseFeature feature;
+
+ public FeatureHandler() {
+ super(FEATURE);
+ addChild(new DescriptionHandler(), new ChildElementHandler() {
+ public void childHanlded(DelegetingHandler child) {
+ feature.setDescription(child.getBufferedChars().trim());
+ }
+ });
+ addChild(new LicenseHandler(), new ChildElementHandler() {
+ public void childHanlded(DelegetingHandler child) {
+ feature.setLicense(child.getBufferedChars().trim());
+ }
+ });
+ addChild(new CopyrightHandler(), new ChildElementHandler() {
+ public void childHanlded(DelegetingHandler child) {
+ feature.setCopyright(child.getBufferedChars().trim());
+ }
+ });
+ addChild(new PluginHandler(), new ChildElementHandler() {
+ public void childHanlded(DelegetingHandler child) {
+ feature.addPlugin(((PluginHandler) child).plugin);
+ }
+ });
+ addChild(new RequiresHandler(), new ChildElementHandler() {
+ public void childHanlded(DelegetingHandler child) {
+ Iterator itRequire = ((RequiresHandler) child).requires.iterator();
+ while (itRequire.hasNext()) {
+ feature.addRequire((Require) itRequire.next());
+ }
+ }
+ });
+ addChild(new UrlHandler(), new ChildElementHandler() {
+ public void childHanlded(DelegetingHandler child) {
+ }
+ });
+ }
+
+ protected void handleAttributes(Attributes atts) throws SAXException {
+ feature = new EclipseFeature(atts.getValue(ID), new Version(atts.getValue(VERSION)));
+
+ feature.setOS(atts.getValue(OS));
+ feature.setWS(atts.getValue(WS));
+ feature.setNL(atts.getValue(NL));
+ feature.setArch(atts.getValue(ARCH));
+ feature.setApplication(atts.getValue(APPLICATION));
+ feature.setPlugin(atts.getValue(PLUGIN));
+ feature.setExclusive(Boolean.valueOf(atts.getValue(EXCLUSIVE)).booleanValue());
+ feature.setPrimary(Boolean.valueOf(atts.getValue(PRIMARY)).booleanValue());
+ feature.setColocationAffinity(atts.getValue(COLOCATION_AFFINITY));
+ feature.setProviderName(atts.getValue(PROVIDER_NAME));
+ feature.setLabel(atts.getValue(LABEL));
+ feature.setImage(atts.getValue(IMAGE));
+ }
+
+ }
+
+ static class PluginHandler extends DelegetingHandler {
+
+ private static final String PLUGIN = "plugin";
+
+ private static final String FILTER = "filter";
+
+ private static final String FRAGMENT = "fragment";
+
+ private static final String UNPACK = "unpack";
+
+ private static final String VERSION = "version";
+
+ private static final String ID = "id";
+
+ private EclipsePlugin plugin;
+
+ public PluginHandler() {
+ super(PLUGIN);
+ }
+
+ protected void handleAttributes(Attributes atts) throws SAXException {
+ plugin = new EclipsePlugin();
+
+ plugin.setId(atts.getValue(ID));
+ plugin.setVersion(new Version(atts.getValue(VERSION)));
+ plugin.setUnpack(Boolean.valueOf(atts.getValue(UNPACK)).booleanValue());
+ plugin.setFragment(atts.getValue(FRAGMENT));
+ plugin.setFilter(atts.getValue(FILTER));
+ }
+ }
+
+ static class DescriptionHandler extends DelegetingHandler {
+
+ private static final String DESCRIPTION = "description";
+
+ private static final String URL = "url";
+
+ public DescriptionHandler() {
+ super(DESCRIPTION);
+ setBufferingChar(true);
+ }
+
+ protected void handleAttributes(Attributes atts) throws SAXException {
+ String url = atts.getValue(URL);
+ }
+ }
+
+ static class LicenseHandler extends DelegetingHandler {
+
+ private static final String LICENSE = "license";
+
+ private static final String URL = "url";
+
+ public LicenseHandler() {
+ super(LICENSE);
+ setBufferingChar(true);
+ }
+
+ protected void handleAttributes(Attributes atts) throws SAXException {
+ String url = atts.getValue(URL);
+ }
+
+ }
+
+ static class CopyrightHandler extends DelegetingHandler {
+
+ private static final String COPYRIGHT = "copyright";
+
+ private static final String URL = "url";
+
+ public CopyrightHandler() {
+ super(COPYRIGHT);
+ setBufferingChar(true);
+ }
+
+ protected void handleAttributes(Attributes atts) throws SAXException {
+ String url = atts.getValue(URL);
+ }
+ }
+
+ static class RequiresHandler extends DelegetingHandler {
+
+ private static final String REQUIRES = "requires";
+
+ List requires = new ArrayList();
+
+ public RequiresHandler() {
+ super(REQUIRES);
+ addChild(new ImportHandler(), new ChildElementHandler() {
+ public void childHanlded(DelegetingHandler child) {
+ requires.add(((ImportHandler) child).require);
+ }
+ });
+ }
+ }
+
+ static class ImportHandler extends DelegetingHandler {
+
+ Require require;
+
+ private static final String IMPORT = "import";
+
+ private static final String FILTER = "filter";
+
+ private static final String MATCH = "match";
+
+ private static final String VERSION = "version";
+
+ private static final String PLUGIN = "plugin";
+
+ private static final String FEATURE = "feature";
+
+ public ImportHandler() {
+ super(IMPORT);
+ }
+
+ protected void handleAttributes(Attributes atts) throws SAXException {
+ require = new Require();
+
+ require.setFeature(atts.getValue(FEATURE));
+ require.setPlugin(atts.getValue(PLUGIN));
+ require.setVersion(new Version(atts.getValue(VERSION)));
+ require.setMatch(atts.getValue(MATCH));
+ require.setFilter(atts.getValue(FILTER));
+ }
+ }
+
+ static class IncludesHandler extends DelegetingHandler {
+
+ private static final String INCLUDES = "includes";
+
+ private static final String FILTER = "filter";
+
+ private static final String OPTIONAL = "optional";
+
+ private static final String VERSION = "version";
+
+ private static final String ID = "id";
+
+ public IncludesHandler() {
+ super(INCLUDES);
+ }
+
+ protected void handleAttributes(Attributes atts) throws SAXException {
+ String id = atts.getValue(ID);
+ String version = atts.getValue(VERSION);
+ String optional = atts.getValue(OPTIONAL);
+ String filter = atts.getValue(FILTER);
+ }
+
+ }
+
+ static class InstallHandlerHandler extends DelegetingHandler {
+
+ private static final String INSTALL_HANDLER = "install-handler";
+
+ private static final String URL = "url";
+
+ private static final String LIBRARY = "library";
+
+ private static final String HANDLER = "handler";
+
+ public InstallHandlerHandler() {
+ super(INSTALL_HANDLER);
+ }
+
+ protected void handleAttributes(Attributes atts) throws SAXException {
+ String handler = atts.getValue(HANDLER);
+ String library = atts.getValue(LIBRARY);
+ String url = atts.getValue(URL);
+ }
+
+ }
+
+ static class UrlHandler extends DelegetingHandler {
+
+ private static final String URL = "url";
+
+ public UrlHandler() {
+ super(URL);
+ addChild(new UpdateHandler(), new ChildElementHandler() {
+ public void childHanlded(DelegetingHandler child) {
+ }
+ });
+ addChild(new DiscoveryHandler(), new ChildElementHandler() {
+ public void childHanlded(DelegetingHandler child) {
+ }
+ });
+ }
+
+ }
+
+ static class UpdateHandler extends DelegetingHandler {
+
+ private static final String UPDATE = "update";
+
+ private static final String LABEL = "label";
+
+ private static final String URL = "url";
+
+ public UpdateHandler() {
+ super(UPDATE);
+ }
+
+ protected void handleAttributes(Attributes atts) throws SAXException {
+ String label = atts.getValue(LABEL);
+ String url = atts.getValue(URL);
+ }
+
+ }
+
+ static class DiscoveryHandler extends DelegetingHandler {
+
+ private static final String DISCOVERY = "discovery";
+
+ private static final String URL = "url";
+
+ private static final String LABEL = "label";
+
+ private static final String TYPE = "type";
+
+ public DiscoveryHandler() {
+ super(DISCOVERY);
+ }
+
+ protected void handleAttributes(Attributes atts) throws SAXException {
+ String type = atts.getValue(TYPE);
+ String label = atts.getValue(LABEL);
+ String url = atts.getValue(URL);
+ }
+
+ }
+
+}
Propchange: ant/ivy/core/trunk/src/java/org/apache/ivy/osgi/updatesite/xml/FeatureParser.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: ant/ivy/core/trunk/src/java/org/apache/ivy/osgi/updatesite/xml/FeatureParser.java
------------------------------------------------------------------------------
svn:keywords = Date Revision Author HeadURL Id
Propchange: ant/ivy/core/trunk/src/java/org/apache/ivy/osgi/updatesite/xml/FeatureParser.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: ant/ivy/core/trunk/src/java/org/apache/ivy/osgi/updatesite/xml/Require.java
URL: http://svn.apache.org/viewvc/ant/ivy/core/trunk/src/java/org/apache/ivy/osgi/updatesite/xml/Require.java?rev=1056288&view=auto
==============================================================================
--- ant/ivy/core/trunk/src/java/org/apache/ivy/osgi/updatesite/xml/Require.java (added)
+++ ant/ivy/core/trunk/src/java/org/apache/ivy/osgi/updatesite/xml/Require.java Fri Jan 7 12:39:32 2011
@@ -0,0 +1,73 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+package org.apache.ivy.osgi.updatesite.xml;
+
+import org.apache.ivy.osgi.util.Version;
+
+public class Require {
+
+ private String plugin;
+
+ private String feature;
+
+ private Version version;
+
+ private String match;
+
+ private String filter;
+
+ public void setFeature(String feature) {
+ this.feature = feature;
+ }
+
+ public String getFeature() {
+ return feature;
+ }
+
+ public void setPlugin(String plugin) {
+ this.plugin = plugin;
+ }
+
+ public String getPlugin() {
+ return plugin;
+ }
+
+ public void setVersion(Version version) {
+ this.version = version;
+ }
+
+ public Version getVersion() {
+ return version;
+ }
+
+ public void setMatch(String match) {
+ this.match = match;
+ }
+
+ public String getMatch() {
+ return match;
+ }
+
+ public void setFilter(String filter) {
+ this.filter = filter;
+ }
+
+ public String getFilter() {
+ return filter;
+ }
+}
Propchange: ant/ivy/core/trunk/src/java/org/apache/ivy/osgi/updatesite/xml/Require.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: ant/ivy/core/trunk/src/java/org/apache/ivy/osgi/updatesite/xml/Require.java
------------------------------------------------------------------------------
svn:keywords = Date Revision Author HeadURL Id
Propchange: ant/ivy/core/trunk/src/java/org/apache/ivy/osgi/updatesite/xml/Require.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: ant/ivy/core/trunk/src/java/org/apache/ivy/osgi/updatesite/xml/UpdateSite.java
URL: http://svn.apache.org/viewvc/ant/ivy/core/trunk/src/java/org/apache/ivy/osgi/updatesite/xml/UpdateSite.java?rev=1056288&view=auto
==============================================================================
--- ant/ivy/core/trunk/src/java/org/apache/ivy/osgi/updatesite/xml/UpdateSite.java (added)
+++ ant/ivy/core/trunk/src/java/org/apache/ivy/osgi/updatesite/xml/UpdateSite.java Fri Jan 7 12:39:32 2011
@@ -0,0 +1,71 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+package org.apache.ivy.osgi.updatesite.xml;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class UpdateSite {
+
+ private String url;
+
+ private String mirrorsURL;
+
+ private boolean pack200;
+
+ private String digestUrl;
+
+ private List/* <EclipseFeature> */features = new ArrayList();
+
+ public void setUrl(String url) {
+ this.url = url;
+ }
+
+ public String getUrl() {
+ return url;
+ }
+
+ public void setMirrorsURL(String mirrorsURL) {
+ this.mirrorsURL = mirrorsURL;
+ }
+
+ public void setPack200(boolean pack200) {
+ this.pack200 = pack200;
+ }
+
+ public void setDigestURL(String digestURL) {
+ this.digestUrl = digestURL;
+ }
+
+ public String getDigestURL() {
+ return digestUrl;
+ }
+
+ public void addFeature(EclipseFeature feature) {
+ features.add(feature);
+ }
+
+ public List getFeatures() {
+ return features;
+ }
+
+ public void setAssociateSitesURL(String associateSitesURL) {
+ // TODO what's that ?
+ }
+
+}
Propchange: ant/ivy/core/trunk/src/java/org/apache/ivy/osgi/updatesite/xml/UpdateSite.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: ant/ivy/core/trunk/src/java/org/apache/ivy/osgi/updatesite/xml/UpdateSite.java
------------------------------------------------------------------------------
svn:keywords = Date Revision Author HeadURL Id
Propchange: ant/ivy/core/trunk/src/java/org/apache/ivy/osgi/updatesite/xml/UpdateSite.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: ant/ivy/core/trunk/src/java/org/apache/ivy/osgi/updatesite/xml/UpdateSiteDigestParser.java
URL: http://svn.apache.org/viewvc/ant/ivy/core/trunk/src/java/org/apache/ivy/osgi/updatesite/xml/UpdateSiteDigestParser.java?rev=1056288&view=auto
==============================================================================
--- ant/ivy/core/trunk/src/java/org/apache/ivy/osgi/updatesite/xml/UpdateSiteDigestParser.java (added)
+++ ant/ivy/core/trunk/src/java/org/apache/ivy/osgi/updatesite/xml/UpdateSiteDigestParser.java Fri Jan 7 12:39:32 2011
@@ -0,0 +1,62 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+package org.apache.ivy.osgi.updatesite.xml;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.text.ParseException;
+
+import org.apache.ivy.osgi.core.ExecutionEnvironmentProfileProvider;
+import org.apache.ivy.osgi.updatesite.UpdateSiteDescriptor;
+import org.apache.ivy.osgi.updatesite.xml.FeatureParser.FeatureHandler;
+import org.apache.ivy.osgi.util.DelegetingHandler;
+import org.xml.sax.InputSource;
+import org.xml.sax.SAXException;
+import org.xml.sax.XMLReader;
+import org.xml.sax.helpers.XMLReaderFactory;
+
+public class UpdateSiteDigestParser {
+
+ public static UpdateSiteDescriptor parse(InputStream in, UpdateSite site)
+ throws ParseException, IOException, SAXException {
+ XMLReader reader = XMLReaderFactory.createXMLReader();
+ DigestHandler handler = new DigestHandler(site);
+ reader.setContentHandler(handler);
+ reader.parse(new InputSource(in));
+ return handler.repoDescriptor;
+ }
+
+ static class DigestHandler extends DelegetingHandler {
+
+ private static final String DIGEST = "digest";
+
+ UpdateSiteDescriptor repoDescriptor = new UpdateSiteDescriptor(
+ ExecutionEnvironmentProfileProvider.getInstance());
+
+ public DigestHandler(final UpdateSite site) {
+ super(DIGEST);
+ addChild(new FeatureHandler(), new ChildElementHandler() {
+ public void childHanlded(DelegetingHandler child) {
+ repoDescriptor.addFeature(site.getUrl(), ((FeatureHandler) child).feature);
+ }
+ });
+ }
+
+ }
+
+}
Propchange: ant/ivy/core/trunk/src/java/org/apache/ivy/osgi/updatesite/xml/UpdateSiteDigestParser.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: ant/ivy/core/trunk/src/java/org/apache/ivy/osgi/updatesite/xml/UpdateSiteDigestParser.java
------------------------------------------------------------------------------
svn:keywords = Date Revision Author HeadURL Id
Propchange: ant/ivy/core/trunk/src/java/org/apache/ivy/osgi/updatesite/xml/UpdateSiteDigestParser.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: ant/ivy/core/trunk/test/java/org/apache/ivy/osgi/updatesite/UpdateSiteLoaderTest.java
URL: http://svn.apache.org/viewvc/ant/ivy/core/trunk/test/java/org/apache/ivy/osgi/updatesite/UpdateSiteLoaderTest.java?rev=1056288&view=auto
==============================================================================
--- ant/ivy/core/trunk/test/java/org/apache/ivy/osgi/updatesite/UpdateSiteLoaderTest.java (added)
+++ ant/ivy/core/trunk/test/java/org/apache/ivy/osgi/updatesite/UpdateSiteLoaderTest.java Fri Jan 7 12:39:32 2011
@@ -0,0 +1,42 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+package org.apache.ivy.osgi.updatesite;
+
+import java.io.IOException;
+import java.text.ParseException;
+
+import junit.framework.TestCase;
+
+import org.apache.ivy.osgi.repo.RepoDescriptor;
+import org.xml.sax.SAXException;
+
+public class UpdateSiteLoaderTest extends TestCase {
+
+ public void testIvyDE() throws IOException, ParseException, SAXException {
+ UpdateSiteLoader loader = new UpdateSiteLoader();
+ RepoDescriptor site = loader.load("http://www.apache.org/dist/ant/ivyde/updatesite/");
+ assertEquals(13, site.getModules().size());
+ }
+
+
+ public void testEclipse() throws IOException, ParseException, SAXException {
+ UpdateSiteLoader loader = new UpdateSiteLoader();
+ RepoDescriptor site = loader.load("http://download.eclipse.org/releases/helios/");
+ assertEquals(13, site.getModules().size());
+ }
+}
Propchange: ant/ivy/core/trunk/test/java/org/apache/ivy/osgi/updatesite/UpdateSiteLoaderTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: ant/ivy/core/trunk/test/java/org/apache/ivy/osgi/updatesite/UpdateSiteLoaderTest.java
------------------------------------------------------------------------------
svn:keywords = Date Revision Author HeadURL Id
Propchange: ant/ivy/core/trunk/test/java/org/apache/ivy/osgi/updatesite/UpdateSiteLoaderTest.java
------------------------------------------------------------------------------
svn:mime-type = text/plain