use of java.nio.channels.ReadableByteChannel in project LanternServer by LanternPowered.
the class LanternClassLoader method load.
private static LanternClassLoader load() throws IOException {
ClassLoader.registerAsParallelCapable();
// Get the bootstrap class loader
final ClassLoader classLoader = LanternClassLoader.class.getClassLoader();
// Load the dependencies files
final List<Dependencies> dependenciesEntries = new ArrayList<>();
// Load the dependencies file within the jar, not available in the IDE
final URL dependenciesURL = classLoader.getResource("dependencies.json");
if (dependenciesURL != null) {
try {
dependenciesEntries.add(DependenciesParser.read(new BufferedReader(new InputStreamReader(dependenciesURL.openStream()))));
} catch (ParseException e) {
throw new IllegalStateException("Failed to parse the dependencies.json file within the jar.", e);
}
}
// Try to generate or load the dependencies file
final Path dependenciesFile = Paths.get("dependencies.json");
if (!Files.exists(dependenciesFile)) {
try (BufferedWriter writer = Files.newBufferedWriter(dependenciesFile)) {
writer.write("{\n \"repositories\": [\n ],\n \"dependencies\": [\n ]\n}");
}
} else {
try {
dependenciesEntries.add(DependenciesParser.read(Files.newBufferedReader(dependenciesFile)));
} catch (ParseException e) {
throw new IllegalStateException("Failed to parse the dependencies.json file within the root directory.", e);
}
}
// Merge the dependencies files
final List<URL> repositoryUrls = new ArrayList<>();
final Map<String, Dependency> dependencyMap = new HashMap<>();
for (Dependencies dependencies : dependenciesEntries) {
dependencies.getRepositories().stream().map(Repository::getUrl).filter(e -> !repositoryUrls.contains(e)).forEach(repositoryUrls::add);
for (Dependency dependency : dependencies.getDependencies()) {
dependencyMap.put(dependency.getGroup() + ':' + dependency.getName(), dependency);
}
}
String localRepoPath = System.getProperty("maven.repo.local");
if (localRepoPath == null) {
final String mavenHome = System.getenv("M2_HOME");
if (mavenHome != null) {
final Path settingsPath = Paths.get(mavenHome, "conf", "setting.xml");
if (Files.exists(settingsPath)) {
try {
final DocumentBuilder documentBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
final Document document = documentBuilder.parse(settingsPath.toFile());
// http://stackoverflow.com/questions/13786607/normalization-in-dom-parsing-with-java-how-does-it-work
document.getDocumentElement().normalize();
final Node node = document.getElementsByTagName("localRepository").item(0);
if (node != null) {
localRepoPath = node.getTextContent();
}
} catch (ParserConfigurationException | SAXException e) {
throw new IllegalStateException(e);
}
}
}
}
if (localRepoPath == null) {
localRepoPath = "~/.m/repository";
}
localRepoPath = localRepoPath.trim();
if (localRepoPath.charAt(0) == '~') {
localRepoPath = System.getProperty("user.home") + '/' + localRepoPath.substring(2);
}
// Try to find the local maven repository
repositoryUrls.add(0, new File(localRepoPath).toURL());
final List<FileRepository> repositories = new ArrayList<>();
for (URL repositoryUrl : repositoryUrls) {
if (repositoryUrl.getProtocol().equals("file")) {
final File baseFile = new File(repositoryUrl.getFile());
repositories.add(path -> {
final File file = new File(baseFile, path);
try {
return file.exists() ? file.toURL().openStream() : null;
} catch (IOException e) {
throw new IllegalStateException(e);
}
});
} else {
String repositoryUrlBase = repositoryUrl.toString();
if (repositoryUrlBase.endsWith("/")) {
repositoryUrlBase = repositoryUrlBase.substring(0, repositoryUrlBase.length() - 1);
}
final String urlBase = repositoryUrlBase;
repositories.add(path -> {
try {
final URL url = new URL(urlBase + "/" + path);
final HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
final String encoding = connection.getHeaderField("Content-Encoding");
InputStream is = connection.getInputStream();
if (encoding != null) {
if (encoding.equals("gzip")) {
is = new GZIPInputStream(is);
} else {
throw new IllegalStateException("Unsupported encoding: " + encoding);
}
}
return is;
} catch (IOException e) {
return null;
}
});
}
}
// If we are outside development mode, the server will be packed
// into a jar. We will also need to make sure that this one gets
// added in this case
final CodeSource source = LanternClassLoader.class.getProtectionDomain().getCodeSource();
final URL location = source == null ? null : source.getLocation();
// Setup the environment variable
final String env = System.getProperty(ENVIRONMENT);
final Environment environment;
if (env != null) {
try {
environment = Environment.valueOf(env.toUpperCase());
} catch (IllegalArgumentException e) {
throw new RuntimeException("Invalid environment type: " + env);
}
} else {
environment = location == null || new File(location.getFile()).isDirectory() ? Environment.DEVELOPMENT : Environment.PRODUCTION;
System.setProperty(ENVIRONMENT, environment.toString().toLowerCase());
}
Environment.set(environment);
// Scan the jar for library jars
if (location != null) {
repositories.add(path -> classLoader.getResourceAsStream("dependencies/" + path));
}
final List<URL> libraryUrls = new ArrayList<>();
// Download or load all the dependencies
final Path internalLibrariesPath = Paths.get(".cached-dependencies");
for (Dependency dependency : dependencyMap.values()) {
final String group = dependency.getGroup();
final String name = dependency.getName();
final String version = dependency.getVersion();
final Path target = internalLibrariesPath.resolve(String.format("%s/%s/%s/%s-%s.jar", group.replace('.', '/'), name, version, name, version));
libraryUrls.add(target.toUri().toURL());
final String id = String.format("%s:%s:%s", dependency.getGroup(), dependency.getName(), dependency.getVersion());
if (Files.exists(target)) {
System.out.printf("Loaded: \"%s\"\n", id);
continue;
}
InputStream is = null;
for (FileRepository repository : repositories) {
is = repository.get(dependency);
if (is != null) {
break;
}
}
if (is == null) {
throw new IllegalStateException("The following dependency could not be found: " + id);
}
final Path parent = target.getParent();
if (!Files.exists(parent)) {
Files.createDirectories(parent);
}
System.out.printf("Downloading \"%s\"\n", id);
try (ReadableByteChannel i = Channels.newChannel(is);
FileOutputStream o = new FileOutputStream(target.toFile())) {
o.getChannel().transferFrom(i, 0, Long.MAX_VALUE);
}
}
// All the folders are from lantern or sponge,
// in development mode are all the libraries on
// the classpath, so there is no need to add them
// to the library classloader
final List<URL> urls = new ArrayList<>();
final String classPath = System.getProperty("java.class.path");
final String[] libraries = classPath.split(File.pathSeparator);
for (String library : libraries) {
try {
final URL url = Paths.get(library).toUri().toURL();
if (!library.endsWith(".jar") || url.equals(location)) {
urls.add(url);
}
} catch (MalformedURLException ignored) {
System.out.println("Invalid library found in the class path: " + library);
}
}
// The server class loader will load lantern, the api and all the plugins
final LanternClassLoader serverClassLoader = new LanternClassLoader(urls.toArray(new URL[urls.size()]), libraryUrls.toArray(new URL[libraryUrls.size()]), classLoader);
Thread.currentThread().setContextClassLoader(serverClassLoader);
return serverClassLoader;
}
use of java.nio.channels.ReadableByteChannel in project onebusaway-application-modules by camsys.
the class SyncBundleAction method syncBundle.
public String syncBundle() {
String syncStatus = "Syncing in progress";
String apiHost = "http://admin.staging.obast.org:9999/api/bundle/latest";
JsonObject latestBundle = null;
try {
latestBundle = getJsonData(apiHost).getAsJsonObject();
} catch (Exception e) {
_log.error("Failed to retrieve name of the latest deployed bundle");
}
String datasetName = latestBundle.get("dataset").getAsString();
String buildName = latestBundle.get("name").getAsString();
String bundleId = latestBundle.get("id").getAsString();
String bundleFileName = buildName + ".tar.gz";
String tmpDir = new NYCFileUtils().createTmpDirectory();
String bundleDir = "/var/lib/oba/bundles";
String deployDir = "/var/lib/oba/bundles/active";
String bundleBuildDir = "/var/lib/oba/bundles/builder";
try {
String bundleSourceString = "http://admin.staging.obast.org:9999/api/bundle/archive/get-by-name/" + datasetName + "/" + buildName + "/" + bundleFileName;
URL bundleSource = new URL(bundleSourceString);
ReadableByteChannel rbc = Channels.newChannel(bundleSource.openStream());
FileOutputStream fos = new FileOutputStream(tmpDir + File.separator + bundleFileName);
fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE);
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
unzipBundle(tmpDir, bundleFileName);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// Copy to extracted files /var/lib/oba/bundles/active
try {
// FileUtils.copyDirectory(new File(tmpDir + File.separator + "untarredBundle" + File.separator + buildName), new File(deployDir));
FileUtils.copyDirectory(new File(tmpDir + File.separator + "untarredBundle"), new File(deployDir));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// Copy downloaded .tar.gz bundle to bundle builds dir
String buildDest = bundleBuildDir + File.separator + datasetName + File.separator + "builds" + File.separator + buildName + File.separator + bundleFileName;
try {
FileUtils.copyFile(new File(tmpDir + File.separator + bundleFileName), new File(buildDest));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// Copy inputs and outputs dirs
File srcInputDir = new File(tmpDir + File.separator + "untarredBundle" + File.separator + buildName + File.separator + "inputs");
File srcOutputDir = new File(tmpDir + File.separator + "untarredBundle" + File.separator + buildName + File.separator + "outputs");
String destBuildsDir = bundleBuildDir + File.separator + datasetName + File.separator + "builds" + File.separator + buildName;
try {
FileUtils.copyDirectory(srcInputDir, new File(destBuildsDir + File.separator + "inputs"));
FileUtils.copyDirectory(srcOutputDir, new File(destBuildsDir + File.separator + "outputs"));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// Copy gtfs and aux files to aux_latest and gtfs_latest
String gtfsFileDest = bundleBuildDir + File.separator + datasetName + File.separator + "gtfs_latest";
String auxFileDest = bundleBuildDir + File.separator + datasetName + File.separator + "aux_latest";
File[] inputFiles = srcInputDir.listFiles();
for (File inputFile : inputFiles) {
try {
String fileName = inputFile.getName();
int idx = fileName.indexOf("_");
if (idx > 0) {
// Skip over config dir
String agencyNum = fileName.substring(0, idx);
String zipFileName = fileName.substring(idx + 1);
if (agencyNum.equals("29")) {
// For CT aux files
String fileDest = auxFileDest + File.separator + agencyNum + File.separator + zipFileName;
FileUtils.copyFile(inputFile, new File(fileDest));
} else {
String fileDest = gtfsFileDest + File.separator + agencyNum + File.separator + zipFileName;
FileUtils.copyFile(inputFile, new File(fileDest));
}
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
syncStatus = "Complete";
return "syncStatus";
}
use of java.nio.channels.ReadableByteChannel in project gemoc-studio by eclipse.
the class IFileUtils method isStreamEqual.
private static boolean isStreamEqual(InputStream i1, InputStream i2) throws IOException {
ReadableByteChannel ch1 = Channels.newChannel(i1);
ReadableByteChannel ch2 = Channels.newChannel(i2);
ByteBuffer buf1 = ByteBuffer.allocateDirect(1024);
ByteBuffer buf2 = ByteBuffer.allocateDirect(1024);
try {
while (true) {
int n1 = ch1.read(buf1);
int n2 = ch2.read(buf2);
if (n1 == -1 || n2 == -1)
return n1 == n2;
buf1.flip();
buf2.flip();
for (int i = 0; i < Math.min(n1, n2); i++) if (buf1.get() != buf2.get())
return false;
buf1.compact();
buf2.compact();
}
} finally {
if (i1 != null)
i1.close();
if (i2 != null)
i2.close();
}
}
use of java.nio.channels.ReadableByteChannel in project gemoc-studio by eclipse.
the class ManifestChanger method isStreamEqual.
private static boolean isStreamEqual(InputStream i1, InputStream i2) throws IOException {
ReadableByteChannel ch1 = Channels.newChannel(i1);
ReadableByteChannel ch2 = Channels.newChannel(i2);
ByteBuffer buf1 = ByteBuffer.allocateDirect(1024);
ByteBuffer buf2 = ByteBuffer.allocateDirect(1024);
try {
while (true) {
int n1 = ch1.read(buf1);
int n2 = ch2.read(buf2);
if (n1 == -1 || n2 == -1)
return n1 == n2;
buf1.flip();
buf2.flip();
for (int i = 0; i < Math.min(n1, n2); i++) if (buf1.get() != buf2.get())
return false;
buf1.compact();
buf2.compact();
}
} finally {
if (i1 != null)
i1.close();
if (i2 != null)
i2.close();
}
}
use of java.nio.channels.ReadableByteChannel in project providence by morimekta.
the class FramedBufferTest method testReadMultiple.
@Test
public void testReadMultiple() throws IOException {
ReadableByteChannel channel = Channels.newChannel(new ByteArrayInputStream(multiData));
FramedBufferInputStream in = new FramedBufferInputStream(channel);
in.nextFrame();
byte[] out = new byte[14];
assertEquals(10, in.read(out));
assertEquals("this is a\n", new String(out, 0, 10, UTF_8));
in.nextFrame();
out = new byte[14];
assertEquals(13, in.read(out));
assertEquals("not again...\n", new String(out, 0, 13, UTF_8));
}
Aggregations