/*
* JBoss, Home of Professional Open Source
* Copyright 2009, Red Hat Middleware LLC, and individual contributors
* by the @authors tag. See the copyright.txt in the distribution for a
* full listing of individual contributors.
*
* 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.
*/
package org.jboss.shrinkwrap.impl.base.importer;
import java.io.File;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.regex.Pattern;
import org.jboss.shrinkwrap.api.Archive;
import org.jboss.shrinkwrap.api.ArchivePath;
import org.jboss.shrinkwrap.api.Filter;
import org.jboss.shrinkwrap.api.Filters;
import org.jboss.shrinkwrap.api.asset.FileAsset;
import org.jboss.shrinkwrap.api.importer.ExplodedImporter;
import org.jboss.shrinkwrap.impl.base.AssignableBase;
import org.jboss.shrinkwrap.impl.base.Validate;
import org.jboss.shrinkwrap.impl.base.path.BasicPath;
ExplodedImporterImpl Importer used to import Exploded directory structures into a Archive
Author: Aslak Knutsen Version: $Revision: $
/**
* ExplodedImporterImpl
*
* Importer used to import Exploded directory structures into a {@link Archive}
*
* @author <a href="mailto:aslak@conduct.no">Aslak Knutsen</a>
* @version $Revision: $
*/
public class ExplodedImporterImpl extends AssignableBase<Archive<?>> implements ExplodedImporter {
// -------------------------------------------------------------------------------------||
// Class Members -----------------------------------------------------------------------||
// -------------------------------------------------------------------------------------||
Logger
/**
* Logger
*/
private static final Logger log = Logger.getLogger(ExplodedImporterImpl.class.getName());
// -------------------------------------------------------------------------------------||
// Constructor -------------------------------------------------------------------------||
// -------------------------------------------------------------------------------------||
public ExplodedImporterImpl(final Archive<?> archive) {
super(archive);
}
// -------------------------------------------------------------------------------------||
// Required Implementations ------------------------------------------------------------||
// -------------------------------------------------------------------------------------||
void a() {
}
{@inheritDoc}
See Also:
/**
* {@inheritDoc}
*
* @see org.jboss.shrinkwrap.api.importer.ExplodedImporter#importDirectory(java.lang.String)
*/
@Override
public ExplodedImporter importDirectory(String fileName) {
return importDirectory(fileName, Filters.includeAll());
}
{@inheritDoc}
See Also:
/**
* {@inheritDoc}
*
* @see org.jboss.shrinkwrap.api.importer.ExplodedImporter#importDirectory(java.lang.String, org.jboss.shrinkwrap.api.Filter)
*/
@Override
public ExplodedImporter importDirectory(String fileName, Filter<ArchivePath> filter) {
Validate.notNull(fileName, "FileName must be specified");
return importDirectory(new File(fileName), filter);
}
{@inheritDoc}
See Also:
/**
* {@inheritDoc}
*
* @see org.jboss.shrinkwrap.api.importer.ExplodedImporter#importDirectory(java.io.File)
*/
@Override
public ExplodedImporter importDirectory(File file) {
return importDirectory(file, Filters.includeAll());
}
{@inheritDoc}
See Also:
/**
* {@inheritDoc}
*
* @see org.jboss.shrinkwrap.api.importer.ExplodedImporter#importDirectory(java.io.File, org.jboss.shrinkwrap.api.Filter)
*/
@Override
public ExplodedImporter importDirectory(File file, Filter<ArchivePath> filter) {
Validate.notNull(file, "File must be specified");
Validate.notNull(filter, "Filter must be specified");
if (!file.isDirectory()) {
throw new IllegalArgumentException("Given file is not a directory " + file.getAbsolutePath());
}
doImport(file, file.listFiles(), filter);
return this;
}
private void doImport(File root, File[] files, Filter<ArchivePath> filter) {
for (File file : files) {
if (log.isLoggable(Level.FINER)) {
log.finer("Importing: " + file.getAbsolutePath());
}
final Archive<?> archive = this.getArchive();
final ArchivePath path = calculatePath(root, file);
if( filter.include(path) ) {
if (file.isDirectory()) {
archive.addAsDirectory(path);
doImport(root, file.listFiles(), filter);
} else {
archive.add(new FileAsset(file), path);
}
}
}
}
Calculate the relative child path.
Params: - root –
The Archive root folder
- child –
The Child file
Returns: a Path fort he child relative to root
/**
* Calculate the relative child path.
*
* @param root
* The Archive root folder
* @param child
* The Child file
* @return a Path fort he child relative to root
*/
private ArchivePath calculatePath(File root, File child) {
String rootPath = unifyPath(root.getPath());
String childPath = unifyPath(child.getPath());
String archiveChildPath = childPath.replaceFirst(Pattern.quote(rootPath), "");
return new BasicPath(archiveChildPath);
}
Windows vs Linux will return different path separators, unify the paths.
Returns:
/**
* Windows vs Linux will return different path separators, unify the paths.
*
* @return
*/
private String unifyPath(String path) {
return path.replaceAll("\\\\", "/");
}
}