in vault-core/src/main/java/org/apache/jackrabbit/vault/fs/io/AbstractExporter.java [221:301]
public void export(VaultFile parent, boolean noClose)
throws RepositoryException, IOException {
exportInfo.getEntries().clear();
open();
AggregateManager mgr = parent.getFileSystem().getAggregateManager();
mgr.startTracking(tracker == null ? null : tracker.getListener());
if (!noMetaInf) {
// update properties
setProperty(MetaInf.CREATED, Calendar.getInstance(TimeZone.getTimeZone(ZoneOffset.UTC), Locale.ROOT));
setProperty(MetaInf.CREATED_BY, mgr.getUserId());
setProperty(MetaInf.GENERATOR, generator);
setProperty(MetaInf.PACKAGE_FORMAT_VERSION, String.valueOf(MetaInf.FORMAT_VERSION_2));
// get filter and translate if necessary
WorkspaceFilter filter = mgr.getWorkspaceFilter();
String mountPath = mgr.getRoot().getPath();
String rootPath = parent.getPath();
if ("/".equals(rootPath)) {
rootPath = "";
}
if (mountPath.length() > 0 || rootPath.length() > 0) {
filter = filter.translate(new SimplePathMapping(mountPath, PlatformNameFormat.getRepositoryPath(rootPath)));
}
// check for package type
if (!properties.containsKey(NAME_PACKAGE_TYPE)) {
properties.setProperty(NAME_PACKAGE_TYPE, detectPackageType(filter).name().toLowerCase(Locale.ROOT));
}
// write Manifest
Manifest mf = new Manifest();
mf.getMainAttributes().put(Attributes.Name.MANIFEST_VERSION, "1.0");
String version = properties.getProperty(NAME_VERSION);
if (version == null) {
version = "";
}
String group = properties.getProperty(NAME_GROUP);
String name = properties.getProperty(NAME_NAME);
PackageId id = new PackageId(group, name, version);
Set<String> rts = new HashSet<String>();
for (PathFilterSet p: filter.getFilterSets()) {
rts.add(p.getRoot());
}
String[] filterRoots = rts.toArray(new String[rts.size()]);
addManifestAttribute(mf, MF_PACKAGE_ID, id.toString());
addManifestAttribute(mf, MF_PACKAGE_DESC, properties.getProperty(NAME_DESCRIPTION));
addManifestAttribute(mf, MF_PACKAGE_ROOTS, Text.implode(filterRoots, ","));
addManifestAttribute(mf, MF_PACKAGE_DEPENDENCIES, properties.getProperty(NAME_DEPENDENCIES));
addManifestAttribute(mf, MF_PACKAGE_TYPE, properties.getProperty(NAME_PACKAGE_TYPE));
ByteArrayOutputStream tmpOut = new ByteArrayOutputStream();
mf.write(tmpOut);
writeFile(new ByteArrayInputStream(tmpOut.toByteArray()), JarFile.MANIFEST_NAME);
createDirectory(Constants.META_INF);
createDirectory(Constants.META_DIR);
// add some 'fake' tracking
track("A", Constants.META_INF);
track("A", JarFile.MANIFEST_NAME);
track("A", Constants.META_DIR);
track("A", Constants.META_DIR + "/" + Constants.CONFIG_XML);
track("A", Constants.META_DIR + "/" + Constants.FILTER_XML);
track("A", Constants.META_DIR + "/" + Constants.NODETYPES_CND);
track("A", Constants.META_DIR + "/" + Constants.PROPERTIES_XML);
// write properties
tmpOut = new ByteArrayOutputStream();
properties.storeToXML(tmpOut, "FileVault Package Properties", "utf-8");
writeFile(new ByteArrayInputStream(tmpOut.toByteArray()), Constants.META_DIR + "/" + Constants.PROPERTIES_XML);
writeFile(mgr.getConfig().getSource(), Constants.META_DIR + "/" + Constants.CONFIG_XML);
writeFile(filter.getSource(), Constants.META_DIR + "/" + Constants.FILTER_XML);
}
export(parent, "");
if (!noMetaInf) {
// write node types last, as they are calculated during export.
writeFile(getNodeTypes(mgr.getSession(), mgr.getNodeTypes()), Constants.META_DIR + "/" + Constants.NODETYPES_CND);
}
if (!noClose) {
close();
}
mgr.stopTracking();
}