Java tutorial
package com.arcusys.liferay.vaadinplugin.util; /* * #%L * Liferay Vaadin Plugin * %% * Copyright (C) 2010 - 2013 Vaadin Ltd. * Copyright (C) 2013 Arcusys Ltd. * %% * Licensed 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. * #L% * * */ import com.vaadin.ui.Notification; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.URL; import java.util.*; /** * Created with IntelliJ IDEA. * User: Igor.Borisov * Date: 29.03.13 * Time: 11:46 */ public class VaadinVersionFetcher { public List<DownloadInfo> fetchAllVersionList() { Collection<DownloadInfo.VaadinReleaseType> releaseTypesCollection = new ArrayList<DownloadInfo.VaadinReleaseType>(); releaseTypesCollection.add(DownloadInfo.VaadinReleaseType.release); releaseTypesCollection.add(DownloadInfo.VaadinReleaseType.nightly); releaseTypesCollection.add(DownloadInfo.VaadinReleaseType.prerelease); return fetchVersionList(releaseTypesCollection); } public DownloadInfo fetchLatestReleaseVersion() { Collection<DownloadInfo.VaadinReleaseType> releaseTypesCollection = new ArrayList<DownloadInfo.VaadinReleaseType>(); releaseTypesCollection.add(DownloadInfo.VaadinReleaseType.release); List<DownloadInfo> versions = fetchVersionList(releaseTypesCollection); return versions.get(versions.size() - 1); } private List<DownloadInfo> fetchVersionList(Collection<DownloadInfo.VaadinReleaseType> versiontypes) { LinkParser parser = new LinkParser(); List<DownloadInfo> downloadInfos = new ArrayList<DownloadInfo>(); for (DownloadInfo.VaadinReleaseType type : versiontypes) { try { String vaadinMajorVersionListUrl = ControlPanelPortletUtil.VAADIN_DOWNLOAD_URL + type + "/"; List<LinkParser.VersionData> majorVersions = getVersions(parser, vaadinMajorVersionListUrl, DownloadInfo.VAADIN_MAJOR_VERSION.toString()); List<LinkParser.VersionData> minorVersions = new ArrayList<LinkParser.VersionData>(); if (type == DownloadInfo.VaadinReleaseType.prerelease) { List<LinkParser.VersionData> versions = new ArrayList<LinkParser.VersionData>(); for (LinkParser.VersionData version : majorVersions) { versions.addAll(getVersions(parser, version.getUrl(), version.getVersion())); } majorVersions = versions; } for (LinkParser.VersionData version : majorVersions) { minorVersions.addAll(getVersions(parser, version.getUrl(), version.getVersion())); } for (LinkParser.VersionData versionData : minorVersions) { String zipName = "vaadin-all-" + versionData.getVersion() + ".zip"; Version version = new Version(versionData.getVersion()); DownloadInfo downloadInfo = new DownloadInfo(version, type, versionData.getUrl() + zipName, versionData.getDate()); if (downloadInfo.isSupported()) downloadInfos.add(downloadInfo); } } catch (Exception e) { Notification.show("Can't fetch " + type + " versions", Notification.Type.ERROR_MESSAGE); } } Collections.sort(downloadInfos, new Comparator<DownloadInfo>() { @Override public int compare(DownloadInfo o1, DownloadInfo o2) { if (o1 == null) return -1; if (o2 == null) return 1; String vers1 = o1.getVersion().toString().substring(0, 5); String vers2 = o2.getVersion().toString().substring(0, 5); if (vers1.compareTo(vers2) == 0) { if (o1.getReleaseDate() != null && o2.getReleaseDate() != null) { return o1.getReleaseDate().compareTo(o2.getReleaseDate()); } else { return o1.getVersion().compareTo(o2.getVersion()); } } else { return o1.getVersion().compareTo(o2.getVersion()); } } }); return downloadInfos; } private List<LinkParser.VersionData> getVersions(LinkParser parser, String versionListUrl, String majorVersion) throws IOException { String majorVerisonResponse = getResponseString(versionListUrl); return parser.getVaadinVersionsAndDates(majorVerisonResponse, majorVersion, versionListUrl); } private String getResponseString(String downloadUrl) throws IOException { URL url; InputStream inputStream = null; BufferedReader dataInputStream = null; try { url = new URL(downloadUrl); inputStream = url.openStream(); dataInputStream = new BufferedReader(new InputStreamReader(inputStream)); String line; StringBuffer response = new StringBuffer(); while ((line = dataInputStream.readLine()) != null) { response.append(line); } return response.toString(); } finally { ControlPanelPortletUtil.close(dataInputStream); ControlPanelPortletUtil.close(inputStream); } } }