use of com.google.common.io.InputSupplier in project cdap by caskdata.
the class InterceptableClassLoader method getManifest.
/**
* Returns the {@link Manifest} of the given resource if it is representing a local JAR file.
*/
@Nullable
private Manifest getManifest(URL resource) {
if (!"jar".equals(resource.getProtocol())) {
return null;
}
String path = resource.getFile();
final String jarURIString = path.substring(0, path.indexOf("!/"));
// the loadClass call (caller of this method).
synchronized (this) {
if (!manifests.containsKey(jarURIString)) {
try {
// Tries to load the Manifest from the Jar URI
final URI jarURI = URI.create(jarURIString);
manifests.put(jarURIString, BundleJarUtil.getManifest(jarURI, new InputSupplier<InputStream>() {
@Override
public InputStream getInput() throws IOException {
return jarURI.toURL().openStream();
}
}));
} catch (IOException e) {
// Ignore if cannot get Manifest from the jar file and remember the failure
manifests.put(jarURIString, null);
}
}
return manifests.get(jarURIString);
}
}
use of com.google.common.io.InputSupplier in project cdap by caskdata.
the class BundleJarUtil method getEntry.
/**
* Returns an {@link InputSupplier} for a given entry. This avoids unjar the whole file to just get one entry.
* However, to get many entries, unjar would be more efficient. Also, the jar file is scanned every time the
* {@link InputSupplier#getInput()} is invoked.
*
* @param jarLocation Location of the jar file.
* @param entryName Name of the entry to fetch
* @return An {@link InputSupplier}.
*/
public static InputSupplier<InputStream> getEntry(final Location jarLocation, final String entryName) throws IOException {
Preconditions.checkArgument(jarLocation != null);
Preconditions.checkArgument(entryName != null);
final URI uri = jarLocation.toURI();
// Small optimization if the location is local
if ("file".equals(uri.getScheme())) {
return new InputSupplier<InputStream>() {
@Override
public InputStream getInput() throws IOException {
final JarFile jarFile = new JarFile(new File(uri));
ZipEntry entry = jarFile.getEntry(entryName);
if (entry == null) {
throw new IOException("Entry not found for " + entryName);
}
return new FilterInputStream(jarFile.getInputStream(entry)) {
@Override
public void close() throws IOException {
try {
super.close();
} finally {
jarFile.close();
}
}
};
}
};
}
// Otherwise, use JarInputStream
return new InputSupplier<InputStream>() {
@Override
public InputStream getInput() throws IOException {
JarInputStream is = new JarInputStream(jarLocation.getInputStream());
JarEntry entry = is.getNextJarEntry();
while (entry != null) {
if (entryName.equals(entry.getName())) {
return is;
}
entry = is.getNextJarEntry();
}
Closeables.closeQuietly(is);
throw new IOException("Entry not found for " + entryName);
}
};
}
use of com.google.common.io.InputSupplier in project cdap by caskdata.
the class ArtifactClientTestRun method testArtifacts.
@Test
public void testArtifacts() throws Exception {
// add 2 versions of an artifact with an application
ArtifactId myapp1Id = NamespaceId.DEFAULT.artifact("myapp", "1.0.0");
ArtifactId myapp2Id = NamespaceId.DEFAULT.artifact("myapp", "2.0.0");
LocalLocationFactory locationFactory = new LocalLocationFactory(TMP_FOLDER.newFolder());
Manifest manifest = new Manifest();
manifest.getMainAttributes().put(ManifestFields.BUNDLE_VERSION, "2.0.0");
final Location appJarLoc = AppJarHelper.createDeploymentJar(locationFactory, MyApp.class, manifest);
InputSupplier<InputStream> inputSupplier = new InputSupplier<InputStream>() {
@Override
public InputStream getInput() throws IOException {
return appJarLoc.getInputStream();
}
};
artifactClient.add(myapp1Id.getParent(), myapp1Id.getArtifact(), inputSupplier, myapp1Id.getVersion());
// add some properties
Map<String, String> myapp1Properties = ImmutableMap.of("k1", "v1");
artifactClient.writeProperties(myapp1Id, myapp1Properties);
// let it derive version from jar manifest, which has bundle-version at 2.0.0
artifactClient.add(myapp2Id.getParent(), myapp2Id.getArtifact(), inputSupplier, null, null);
// add some properties
Map<String, String> myapp2Properties = ImmutableMap.of("k1", "v1", "k2", "v2");
artifactClient.writeProperties(myapp2Id, myapp2Properties);
// add an artifact that contains a plugin, but only extends myapp-2.0.0
ArtifactId pluginId = NamespaceId.DEFAULT.artifact("myapp-plugins", "2.0.0");
manifest = new Manifest();
manifest.getMainAttributes().put(ManifestFields.EXPORT_PACKAGE, Plugin1.class.getPackage().getName());
final Location pluginJarLoc = PluginJarHelper.createPluginJar(locationFactory, manifest, Plugin1.class);
inputSupplier = new InputSupplier<InputStream>() {
@Override
public InputStream getInput() throws IOException {
return pluginJarLoc.getInputStream();
}
};
Set<ArtifactRange> parents = Sets.newHashSet(new ArtifactRange(myapp2Id.getParent().getNamespace(), myapp2Id.getArtifact(), new ArtifactVersion(myapp2Id.getVersion()), new ArtifactVersion("3.0.0")));
Set<PluginClass> additionalPlugins = Sets.newHashSet(new PluginClass("jdbc", "mysql", "", "com.mysql.jdbc.Driver", null, Collections.<String, PluginPropertyField>emptyMap()));
artifactClient.add(pluginId.getParent(), pluginId.getArtifact(), inputSupplier, pluginId.getVersion(), parents, additionalPlugins);
ArtifactSummary myapp1Summary = new ArtifactSummary(myapp1Id.getArtifact(), myapp1Id.getVersion());
ArtifactSummary myapp2Summary = new ArtifactSummary(myapp2Id.getArtifact(), myapp2Id.getVersion());
ArtifactSummary pluginArtifactSummary = new ArtifactSummary(pluginId.getArtifact(), pluginId.getVersion());
Set<ArtifactSummary> artifacts = Sets.newHashSet(artifactClient.list(NamespaceId.DEFAULT));
Assert.assertEquals(Sets.newHashSet(myapp1Summary, myapp2Summary, pluginArtifactSummary), artifacts);
// list all artifacts named 'myapp'
Assert.assertEquals(Sets.newHashSet(myapp1Summary, myapp2Summary), Sets.newHashSet(artifactClient.listVersions(NamespaceId.DEFAULT, myapp1Id.getArtifact())));
// list all artifacts named 'myapp-plugins'
Assert.assertEquals(Sets.newHashSet(pluginArtifactSummary), Sets.newHashSet(artifactClient.listVersions(NamespaceId.DEFAULT, pluginId.getArtifact())));
// artifacts should be in user scope
try {
artifactClient.listVersions(NamespaceId.DEFAULT, pluginId.getArtifact(), ArtifactScope.SYSTEM);
Assert.fail();
} catch (ArtifactNotFoundException e) {
// expected
}
// get info about specific artifacts
Schema myAppConfigSchema = new ReflectionSchemaGenerator(false).generate(MyApp.Conf.class);
ArtifactClasses myAppClasses = ArtifactClasses.builder().addApp(new ApplicationClass(MyApp.class.getName(), "", myAppConfigSchema)).build();
// test get myapp-1.0.0
ArtifactInfo myapp1Info = new ArtifactInfo(myapp1Id.getArtifact(), myapp1Id.getVersion(), ArtifactScope.USER, myAppClasses, myapp1Properties);
Assert.assertEquals(myapp1Info, artifactClient.getArtifactInfo(myapp1Id));
// test get myapp-2.0.0
ArtifactInfo myapp2Info = new ArtifactInfo(myapp2Id.getArtifact(), myapp2Id.getVersion(), ArtifactScope.USER, myAppClasses, myapp2Properties);
Assert.assertEquals(myapp2Info, artifactClient.getArtifactInfo(myapp2Id));
// test overwriting properties
myapp2Properties = ImmutableMap.of("k1", "v3", "k5", "v5");
artifactClient.writeProperties(myapp2Id, myapp2Properties);
Assert.assertEquals(myapp2Properties, artifactClient.getArtifactInfo(myapp2Id).getProperties());
// test deleting property
artifactClient.deleteProperty(myapp2Id, "k1");
Assert.assertEquals(ImmutableMap.of("k5", "v5"), artifactClient.getArtifactInfo(myapp2Id).getProperties());
// test writing property
artifactClient.writeProperty(myapp2Id, "k5", "v4");
Assert.assertEquals(ImmutableMap.of("k5", "v4"), artifactClient.getArtifactInfo(myapp2Id).getProperties());
// test deleting properties
artifactClient.deleteProperties(myapp2Id);
Assert.assertTrue(artifactClient.getArtifactInfo(myapp2Id).getProperties().isEmpty());
// test get myapp-plugins-2.0.0
Map<String, PluginPropertyField> props = ImmutableMap.of("x", new PluginPropertyField("x", "", "int", true, false));
ArtifactClasses pluginClasses = ArtifactClasses.builder().addPlugin(new PluginClass("callable", "plugin1", "p1 description", Plugin1.class.getName(), "conf", props)).addPlugins(additionalPlugins).build();
ArtifactInfo pluginArtifactInfo = new ArtifactInfo(pluginId.getArtifact(), pluginId.getVersion(), ArtifactScope.USER, pluginClasses, ImmutableMap.<String, String>of());
Assert.assertEquals(pluginArtifactInfo, artifactClient.getArtifactInfo(pluginId));
// test get all app classes in namespace
Set<ApplicationClassSummary> expectedSummaries = ImmutableSet.of(new ApplicationClassSummary(myapp1Summary, MyApp.class.getName()), new ApplicationClassSummary(myapp2Summary, MyApp.class.getName()));
Set<ApplicationClassSummary> appClassSummaries = Sets.newHashSet(artifactClient.getApplicationClasses(NamespaceId.DEFAULT));
Assert.assertEquals(expectedSummaries, appClassSummaries);
// test get all app classes in namespace with name MyApp.class.getName()
Set<ApplicationClassInfo> appClassInfos = Sets.newHashSet(artifactClient.getApplicationClasses(NamespaceId.DEFAULT, MyApp.class.getName()));
Set<ApplicationClassInfo> expectedInfos = ImmutableSet.of(new ApplicationClassInfo(myapp1Summary, MyApp.class.getName(), myAppConfigSchema), new ApplicationClassInfo(myapp2Summary, MyApp.class.getName(), myAppConfigSchema));
Assert.assertEquals(expectedInfos, appClassInfos);
// test get plugin types for myapp-1.0.0. should be empty, since plugins only extends versions [2.0.0 - 3.0.0)
Assert.assertTrue(artifactClient.getPluginTypes(myapp1Id).isEmpty());
// test get plugin types for myapp-2.0.0
Assert.assertEquals(Lists.newArrayList("callable", "jdbc"), artifactClient.getPluginTypes(myapp2Id));
// test get plugins of type callable for myapp-2.0.0
PluginSummary pluginSummary = new PluginSummary("plugin1", "callable", "p1 description", Plugin1.class.getName(), pluginArtifactSummary);
Assert.assertEquals(Sets.newHashSet(pluginSummary), Sets.newHashSet(artifactClient.getPluginSummaries(myapp2Id, "callable")));
// no plugins of type "runnable"
Assert.assertTrue(artifactClient.getPluginSummaries(myapp2Id, "runnable").isEmpty());
// test get plugin details for plugin1 for myapp-2.0.0
PluginInfo pluginInfo = new PluginInfo("plugin1", "callable", "p1 description", Plugin1.class.getName(), pluginArtifactSummary, props, new HashSet<String>());
Assert.assertEquals(Sets.newHashSet(pluginInfo), Sets.newHashSet(artifactClient.getPluginInfo(myapp2Id, "callable", "plugin1")));
}
use of com.google.common.io.InputSupplier in project cdap by caskdata.
the class HBaseQueueTest method getConsumerConfigCache.
private ConsumerConfigCache getConsumerConfigCache(QueueName queueName) throws Exception {
String tableName = HBaseQueueAdmin.getConfigTableName();
TableId hTableId = tableUtil.createHTableId(new NamespaceId(queueName.getFirstComponent()), tableName);
try (HTable hTable = tableUtil.createHTable(hConf, hTableId)) {
HTableDescriptor htd = hTable.getTableDescriptor();
final TableName configTableName = htd.getTableName();
String prefix = htd.getValue(Constants.Dataset.TABLE_PREFIX);
CConfigurationReader cConfReader = new CConfigurationReader(hConf, HTableNameConverter.getSysConfigTablePrefix(prefix));
return TableNameAwareCacheSupplier.getSupplier(configTableName, cConfReader, new Supplier<TransactionVisibilityState>() {
@Override
public TransactionVisibilityState get() {
try {
return getTransactionManager().getSnapshot();
} catch (IOException e) {
throw Throwables.propagate(e);
}
}
}, new InputSupplier<HTableInterface>() {
@Override
public HTableInterface getInput() throws IOException {
return new HTable(hConf, configTableName);
}
}).get();
}
}
use of com.google.common.io.InputSupplier in project Cloud9 by lintool.
the class ClueWarcDocnoMappingBuilder method run.
/**
* Runs this tool.
*/
public int run(String[] args) throws IOException {
DocnoMapping.DefaultBuilderOptions options = DocnoMapping.BuilderUtils.parseDefaultOptions(args);
if (options == null) {
return -1;
}
LOG.info("Tool name: " + ClueWarcDocnoMappingBuilder.class.getSimpleName());
LOG.info(" - input path: " + options.collection);
LOG.info(" - output file: " + options.docnoMapping);
FileSystem fs = FileSystem.get(getConf());
FSDataOutputStream out = fs.create(new Path(options.docnoMapping), true);
final InputStream in = ClueWarcDocnoMapping.class.getResourceAsStream("docno.mapping");
List<String> lines = CharStreams.readLines(CharStreams.newReaderSupplier(new InputSupplier<InputStream>() {
@Override
public InputStream getInput() throws IOException {
return in;
}
}, Charsets.UTF_8));
out.write((Joiner.on("\n").join(lines) + "\n").getBytes());
out.close();
return 0;
}
Aggregations