/*
 * 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("\\\\", "/"); } }