/* org.org.lib.repository.crawler is a java library/OSGI Bundle Providing Crawling capabilities for Maven 2 HTTP exposed repositories Copyright (C) 2007 Pierre-Antoine Grégoire This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ package org.org.repository.crawler.maven2.model.protocolplugins; import java.io.File; import java.io.IOException; import java.net.MalformedURLException; import java.net.URL; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Queue; import java.util.concurrent.LinkedBlockingQueue; import org.org.repository.crawler.RepositoryCrawlingException; import org.org.repository.crawler.items.IFileSystemCrawledRepositorySetup; import org.org.repository.crawler.mapping.Entry; import org.org.repository.crawler.mapping.Entry.MavenType; import org.org.repository.crawler.mapping.Entry.RawType; import org.org.repository.crawler.maven2.RepositoryCrawlerService; import org.org.repository.crawler.maven2.model.ArtifactVersion; /** * @author pagregoire */ public class FileSystemRepositoryBrowserPlugin implements IRepositoryBrowserPlugin<IFileSystemCrawledRepositorySetup> { /** * init this class with the repository info * * @param httpBrowsedRepository */ public void init(IFileSystemCrawledRepositorySetup repository) { // does nothing for now... } /** * Checks the repository's validity * * @param repository * @return */ public void checkRepositorySetup(IFileSystemCrawledRepositorySetup repositorySetup) { if (repositorySetup.getBasePath() == null) { throw new RepositoryCrawlingException("A base path should be defined for the repository."); } } /** * @param repository * @param upperGroupName * @param folderName * @return */ public String buildUrl(IFileSystemCrawledRepositorySetup repositorySetup, String upperGroupName, String folderName) { StringBuffer buffer = new StringBuffer(repositorySetup.getBasePath()); buffer.append((repositorySetup.getBasePath().endsWith("/") ? "" : "/")); if (!upperGroupName.equals("")) { buffer.append(upperGroupName.replace('.', '/')); } if (!folderName.equals("")) { buffer.append("/" + (folderName.endsWith("/") ? folderName : folderName + "/")); } return buffer.toString(); } /** * @param requestedUrl * @return * @throws IOException */ public Queue<Entry> getEntryList(String requestedUrl) throws IOException { File file = new File(requestedUrl); Queue<Entry> entryList = new LinkedBlockingQueue<Entry>(); if (file.exists()) { List<String> files = new ArrayList<String>(); if (file.isDirectory()) { files = Arrays.asList(file.list()); } File nextFile = null; for (String entryName : files) { Entry entry = new Entry(); nextFile = new File(file, entryName); entry.setValue(nextFile.getAbsolutePath()); entry.setResolvedName(entryName); if (nextFile.isDirectory()) { entry.setRawType(RawType.DIRECTORY); } if (entry.isRawType(RawType.DIRECTORY)) { if (RepositoryCrawlerService.ARTIFACT_VERSION_FOLDER_PATTERN.matcher(entry.getResolvedName()).matches()) { entry.setMavenType(MavenType.ARTIFACT_VERSION_FOLDER); } } if (nextFile.isFile()) { entry.setRawType(RawType.FILE); } if (entry.isRawType(RawType.FILE)) { if (entry.getResolvedName().startsWith("maven-metadata")) { entry.setMavenType(MavenType.METADATA_FILE); } } entryList.add(entry); } } return entryList; } /** * @see org.org.repository.crawler.maven2.RepositoryCrawlerService#cleanFolderName(java.lang.String) */ public String cleanFolderName(String folderName) { return folderName; } /** * @see org.org.repository.crawler.maven2.RepositoryCrawlerService#setUrlToArtifactVersion(org.org.maven2.crawler.items.ArtifactVersion) */ public void setUrlForArtifactVersion(ArtifactVersion artifactVersion, String requestedUrl, String version) throws MalformedURLException { artifactVersion.setUrl(new URL("file:" + (requestedUrl.endsWith("/") ? requestedUrl : (requestedUrl + "/")) + version + "/" + artifactVersion.getId())); } }