Skip to content

Commit 9b78586

Browse files
committed
Updated repository urls and parsing
1 parent 122b4e3 commit 9b78586

File tree

1 file changed

+50
-72
lines changed

1 file changed

+50
-72
lines changed

src/processing/mode/android/SysImageDownloader.java

Lines changed: 50 additions & 72 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@
2323

2424
import org.w3c.dom.Document;
2525
import org.w3c.dom.Element;
26-
import org.w3c.dom.Node;
2726
import org.w3c.dom.NodeList;
2827
import org.xml.sax.SAXException;
2928

@@ -37,6 +36,7 @@
3736
import javax.xml.parsers.DocumentBuilder;
3837
import javax.xml.parsers.DocumentBuilderFactory;
3938
import javax.xml.parsers.ParserConfigurationException;
39+
import javax.xml.xpath.*;
4040

4141
import java.awt.*;
4242
import java.awt.event.ActionEvent;
@@ -51,21 +51,15 @@
5151
@SuppressWarnings("serial")
5252
public class SysImageDownloader extends JDialog implements PropertyChangeListener {
5353
private static final String SYS_IMAGES_URL = "https://dl.google.com/android/repository/sys-img/google_apis/";
54-
private static final String SYS_IMAGES_LIST = "sys-img.xml";
54+
private static final String SYS_IMAGES_LIST = "sys-img2-1.xml";
5555

5656
private static final String SYS_IMAGES_WEAR_URL = "https://dl.google.com/android/repository/sys-img/android-wear/";
57-
private static final String SYS_IMAGES_WEAR_LIST = "sys-img.xml";
57+
private static final String SYS_IMAGES_WEAR_LIST = "sys-img2-1.xml";
5858

5959
public static final String SYSTEM_IMAGE_TAG = "google_apis";
60-
private static final String SYSTEM_IMAGE_MACOSX = "Google APIs Intel x86 Atom System Image";
61-
private static final String SYSTEM_IMAGE_WINDOWS = "Google APIs Intel x86 Atom System Image";
62-
private static final String SYSTEM_IMAGE_LINUX = "Google APIs Intel x86 Atom System Image";
63-
60+
6461
public static final String SYSTEM_IMAGE_WEAR_TAG = "android-wear";
65-
private static final String SYSTEM_IMAGE_WEAR_MACOSX = "Android Wear Intel x86 Atom System Image";
66-
private static final String SYSTEM_IMAGE_WEAR_WINDOWS = "Android Wear Intel x86 Atom System Image";
67-
private static final String SYSTEM_IMAGE_WEAR_LINUX = "Android Wear Intel x86 Atom System Image";
68-
62+
6963
private static final String PROPERTY_CHANGE_EVENT_TOTAL = "total";
7064
private static final String PROPERTY_CHANGE_EVENT_DOWNLOADED = "downloaded";
7165

@@ -223,74 +217,58 @@ private void fixSourceProperties(File imageFolder) {
223217

224218
private void getDownloadUrls(UrlHolder urlHolder,
225219
String repositoryUrl, String requiredHostOs)
226-
throws ParserConfigurationException, IOException, SAXException {
220+
throws ParserConfigurationException, IOException, SAXException, XPathException {
227221
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
228222
DocumentBuilder db = dbf.newDocumentBuilder();
223+
XPathFactory xPathfactory = XPathFactory.newInstance();
224+
XPath xpath = xPathfactory.newXPath();
225+
XPathExpression expr;
226+
NodeList remotePackages;
227+
228+
expr = xpath.compile("//remotePackage[contains(@path, '" + AndroidBuild.TARGET_SDK + "')" +
229+
"and contains(@path, \"x86\")]");
229230

230231
if (wear) {
231-
// wear system image
232-
String systemImage = "";
233-
if (Platform.isMacOS()) {
234-
systemImage = SYSTEM_IMAGE_WEAR_MACOSX;
235-
} else if (Platform.isWindows()) {
236-
systemImage = SYSTEM_IMAGE_WEAR_WINDOWS;
237-
} else if (Platform.isLinux()) {
238-
systemImage = SYSTEM_IMAGE_WEAR_LINUX;
239-
}
240232
Document docSysImgWear = db.parse(new URL(repositoryUrl).openStream());
241-
NodeList sysImgWearList = docSysImgWear.getElementsByTagName("sdk:system-image");
242-
for (int i = 0; i < sysImgWearList.getLength(); i++) {
243-
Node img = sysImgWearList.item(i);
244-
NodeList level = ((Element) img).getElementsByTagName("sdk:api-level");
245-
NodeList desc = ((Element) img).getElementsByTagName("sdk:description");
246-
NodeList codename = ((Element) img).getElementsByTagName("sdk:codename");
247-
// Only considering nodes without a codename, which correspond to the platform
248-
// pre-releases.
249-
if (level.item(0).getTextContent().equals(AndroidBuild.TARGET_SDK) &&
250-
desc.item(0).getTextContent().equals(systemImage) &&
251-
codename.item(0) == null) {
252-
NodeList tag = ((Element) img).getElementsByTagName("sdk:tag-id");
253-
urlHolder.sysImgWearTag = tag.item(0).getTextContent();
254-
Node archiveListItem = ((Element) img).getElementsByTagName("sdk:archives").item(0);
255-
Node archiveItem = ((Element) archiveListItem).getElementsByTagName("sdk:archive").item(0);
256-
urlHolder.sysImgWearFilename = ((Element) archiveItem).getElementsByTagName("sdk:url").item(0).getTextContent();
257-
urlHolder.sysImgWearUrl = SYS_IMAGES_WEAR_URL + urlHolder.sysImgWearFilename;
258-
urlHolder.totalSize += Integer.parseInt(((Element) archiveItem).getElementsByTagName("sdk:size").item(0).getTextContent());
259-
break;
260-
}
261-
}
233+
remotePackages = (NodeList) expr.evaluate(docSysImgWear, XPathConstants.NODESET);
234+
NodeList childNodes = remotePackages.item(0).getChildNodes();
235+
236+
NodeList typeDetails = ((Element) childNodes).getElementsByTagName("type-details");
237+
NodeList tag = ((Element) typeDetails.item(0)).getElementsByTagName("tag");
238+
NodeList id = ((Element) tag.item(0)).getElementsByTagName("id");
239+
urlHolder.sysImgWearTag = id.item(0).getTextContent();
240+
241+
NodeList archives = ((Element) childNodes).getElementsByTagName("archive");
242+
NodeList archive = archives.item(0).getChildNodes();
243+
NodeList complete = ((Element) archive).getElementsByTagName("complete");
244+
245+
NodeList url = ((Element) complete.item(0)).getElementsByTagName("url");
246+
NodeList size = ((Element) complete.item(0)).getElementsByTagName("size");
247+
248+
urlHolder.sysImgWearFilename = url.item(0).getTextContent();
249+
urlHolder.sysImgWearUrl = SYS_IMAGES_WEAR_URL + urlHolder.sysImgWearFilename;
250+
urlHolder.totalSize += Integer.parseInt(size.item(0).getTextContent());
262251
} else {
263-
// default system image
264-
String systemImage = "";
265-
if (Platform.isMacOS()) {
266-
systemImage = SYSTEM_IMAGE_MACOSX;
267-
} else if (Platform.isWindows()) {
268-
systemImage = SYSTEM_IMAGE_WINDOWS;
269-
} else if (Platform.isLinux()) {
270-
systemImage = SYSTEM_IMAGE_LINUX;
271-
}
272252
Document docSysImg = db.parse(new URL(repositoryUrl).openStream());
273-
NodeList sysImgList = docSysImg.getElementsByTagName("sdk:system-image");
274-
for (int i = 0; i < sysImgList.getLength(); i++) {
275-
Node img = sysImgList.item(i);
276-
NodeList level = ((Element) img).getElementsByTagName("sdk:api-level");
277-
NodeList desc = ((Element) img).getElementsByTagName("sdk:description");
278-
NodeList codename = ((Element) img).getElementsByTagName("sdk:codename");
279-
// Only considering nodes without a codename, which correspond to the platform
280-
// pre-releases.
281-
if (level.item(0).getTextContent().equals(AndroidBuild.TARGET_SDK) &&
282-
desc.item(0).getTextContent().equals(systemImage) &&
283-
codename.item(0) == null) {
284-
NodeList tag = ((Element) img).getElementsByTagName("sdk:tag-id");
285-
urlHolder.sysImgTag = tag.item(0).getTextContent();
286-
Node archiveListItem = ((Element) img).getElementsByTagName("sdk:archives").item(0);
287-
Node archiveItem = ((Element) archiveListItem).getElementsByTagName("sdk:archive").item(0);
288-
urlHolder.sysImgFilename = ((Element) archiveItem).getElementsByTagName("sdk:url").item(0).getTextContent();
289-
urlHolder.sysImgUrl = SYS_IMAGES_URL + urlHolder.sysImgFilename;
290-
urlHolder.totalSize += Integer.parseInt(((Element) archiveItem).getElementsByTagName("sdk:size").item(0).getTextContent());
291-
break;
292-
}
293-
}
253+
remotePackages = (NodeList) expr.evaluate(docSysImg, XPathConstants.NODESET);
254+
NodeList childNodes = remotePackages.item(0).getChildNodes(); // Index 1 contains x86_64
255+
256+
NodeList typeDetails = ((Element) childNodes).getElementsByTagName("type-details");
257+
//NodeList abi = ((Element) typeDetails.item(0)).getElementsByTagName("abi");
258+
NodeList tag = ((Element) typeDetails.item(0)).getElementsByTagName("tag");
259+
NodeList id = ((Element) tag.item(0)).getElementsByTagName("id");
260+
urlHolder.sysImgTag = id.item(0).getTextContent();
261+
262+
NodeList archives = ((Element) childNodes).getElementsByTagName("archive");
263+
NodeList archive = archives.item(0).getChildNodes();
264+
NodeList complete = ((Element) archive).getElementsByTagName("complete");
265+
266+
NodeList url = ((Element) complete.item(0)).getElementsByTagName("url");
267+
NodeList size = ((Element) complete.item(0)).getElementsByTagName("size");
268+
269+
urlHolder.sysImgFilename = url.item(0).getTextContent();
270+
urlHolder.sysImgUrl = SYS_IMAGES_URL + urlHolder.sysImgFilename;
271+
urlHolder.totalSize += Integer.parseInt(size.item(0).getTextContent());
294272
}
295273
}
296274
}

0 commit comments

Comments
 (0)